Android 逆向基础知识

一. 初识Apk、Dalvik字节码以及Smali

Dalvik(Android操作系统的虚拟机)

Dalvik VM是基于寄存器的,而JVM是基于栈的。 Dalvik有专属的文件执行格式dex(dalvik executable),而JVM执行的则是Java字节码,Dalvik VM比JVM速度更快,占用空间更少。
通过Dalvik的字节码我们不能直接看到原来的逻辑代码,这时需要借助如ApkTool或dex2jar+jd-gui工具来查看。但是,最终我们修改Apk需要操作的文件是 .smali文件,而不是导出来的Java文件重新编译。

Smali–破解的重中之重

Smali、Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种 .dex 格式文件的汇编器、反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了 .dex格式所有功能(注解、调试信息、线路信息等)。
当我们对Apk文件反编译后,便会生成此类的文件。在Dalvik字节码中,寄存器都是32位的,能够支持任何类型,64位类型(Long/Double)用两个寄存器表示;Dalvik字节码有两种类型:原始类型、引用类型(包括对象和数组)。

二. 初识Apk、Dalvik字节码以及Smali

1. 原始类型:

B- - -byte

C- - -char

D- - - double

F- - - float

I- - -int

J- - -long

S- - - short

V- - -void

Z- - -boolean

XXX- - -array

Lxxx/yyy- - -object

最后两项:数组的表示方式是:在基本类型前加上前中括号“[”,例如int数组和float数组分别表示为:[I、[F;对象的表示则以L作为开头,格式是LpackageName/objectName;(注意必须有个分号跟在最后),例如String对象在smali中为:Ljava/lang/String;,其中java/lang对应java.lang包,String就说定义在该包中的一个对象。

类里面的内部类又如何在smali中引用呢?答案是LpackageName/objectName s u b O b j e c t N a m e ; 。 也 就 是 在 内 部 类 前 加 “ subObjectName;。也就是在内部类前加“ subObjectName;

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值