首页
社区
课程
招聘
[分享]apk文件结构-smali基础
2022-2-2 15:26 3844

[分享]apk文件结构-smali基础

2022-2-2 15:26
3844

0x1 寄存器

  1.寄存器

 

.locals 定义寄存器数量

 

  2.要使用几个,就要声明几个,修改smali代码时,如果使用了寄存器,就要增加寄存器数量,否则会报错。

0x2 函数定义

  1.函数定义

 

.method
函数开始

 

.end
函数结束

0x3 数据操作

  1.数据操作

 

move vA, vB 将vB寄存器的值赋予vA寄存器

 

move/16,vAA,vBBBB /16表示数据宽度,默认4位,vAA表示8位,vBBBB表示16位。

 

move-object vA, vB 用于对象赋值

 

move-object/16 vA,vB

0x4 返回指令

  1.返回指令

 

return vAA //vAA 返回值

 

return-object //返回一个对象

 

  2.我们后面Hook时通常修改这个函数返回值达到Hook的目的。

0x5 数据定义

  1.数据定义

 

const

 

const-string //定义一个字符串

0x6 实例操作

  1.实例操作

 

check-cast vAA,type@ BBBB 将vAA寄存器的对象引用转换成指定类型

 

instance- ofvA,vB,type@CCCC 判断vB寄存器的对象引用是否可以转换成指定类型,是vA=1,反之vA=0

 

new-instance vAA, type@AAAA 构造一个指定类型的新实例

0x7 数组操作指令

  1.数组操作指令

 

array-length vA,vB 获取vB寄存器中数组的长度,结果赋予vA寄存器

 

new-array vA,vB,type@CCCC 构造指定类型和大小(vB) 的数组,结果赋予vA

 

  2.密码加密的时候会用到,例如登录密码一般会判断长度。

0x8 异常

  1.异常

 

throw vAA 抛出vAA寄存器中指定类型的异常

0x9 跳转指令

  1.跳转指令

 

goto 无条件跳转

 

packed-switch vAA,+ BBBBBBBB 分支跳转指令,+ BBBBBBBB指向递增偏移表

 

sparse-switch vAA, +BBBBBBBB 分支跳转, 无规律

0x10 if跳转指令

if-test

 

eq 等于

 

ne 不等于

 

lt 小于

 

ge 大于等于

 

gt 大于

 

nez 不等于0

 

eqz 等于0

0x11 比较指令

  1.比较指令

 

cmp-float 比较两个单精度浮点数

 

cmp-double 比较两个双精度浮点数

 

cmp-long比较两个长整型

 

  2.比较指令后面通常会跟跳转指令。

0x12 字段操作

  1.

 

◆普通字段以”i "开头

 

iget 读操作

 

iput 写操作

 

◆静态字段以“S"开头

 

sget 读操作

 

sput 写操作

0x13 方法调用

  1.方法调用

 

invoke-virtual 调用实例虚方法

 

invoke-super 调用实例的父类方法

 

invoke-direct 调用实例的直接方法

 

invoke-static 调用实例的静态方法


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回