App逆向案例-dudu牛

Dalvik字节码

Dalvik中的寄存器都是32位大小,支持所有类型

寄存器命名

寄存器命名有两种: V命名法和p命名法

1
2
3
4
5
6
7
V命名法:
局部变量寄存器:V0 - Vn
参数寄存器:Vn - Vn+m

P命名法:
变量寄存器:V0 - Vn
参数寄存器:P0 - Pn

这两种命名法区别在于参数寄存器的命名

字节码类型

Dalvik字节码类型于java基本数据类型对应关系如下

方法+字段

Dalvik表示字段的格式:

1
类型(包名+类名); -> 字段名称:字段类型

Dalvik表示方法的格式:

1
类型(包名+类名); -> 方法名称(参数类型):返回值类型

例如:Lpackage/name/ObjectName;>FieldName:Ljava/lang/String; 其中Lpackage/name/ObjectName为类名,FieldName为字段名称,Ljava/lang/String为字段类型。

Lpackage/name/ObjectName;->MethodName (III) Z“ 其中Lpackage/name/ObjectName为类名,MethodNameName为方法名称,(III)为参数类型,表示三个类型为int整数型的参数,Z表示返回值为boolean类型。

dex文件

java文件 -> class文件 -> smail文件 <- smail文件

使用工具:

dx.jar将.class文件打包成.dex文件

baksmail.jar将.dex文件反汇编为smail文件

smail.jar将.samil文件打包成.dex文件

指令格式

基础字节码 - 名称后缀/字节码后缀 目的寄存器 源寄存器

名称后缀是wide,表示数据宽度为64位

名称后缀位from16,表示源寄存器存储容量为16位

数据定义指令

空操作指令

助记符为nop,它的值为00,通常被用来作对齐代码之用

数据操作指令

助记符为move,将源寄存器的值赋给目的寄存器

对象操作指令

数组操作指令

数据运算指令

逻辑元算指令

位移指令

比较指令

其基本格式为:cmp+kind - type vAA,vBB,vCC

方法调用指令

方法返回指令

同步指令

跳转指令

数据转换指令

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信