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

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

2022-2-2 15:26
4474

  1.寄存器

.locals 定义寄存器数量

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

  1.函数定义

.method
函数开始

.end
函数结束

  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

  1.返回指令

return vAA //vAA 返回值

return-object //返回一个对象

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

  1.数据定义

const

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

  1.实例操作

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

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

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

  1.数组操作指令

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

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

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

  1.异常

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

  1.跳转指令

goto 无条件跳转

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

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

if-test

eq 等于

ne 不等于

lt 小于

ge 大于等于

gt 大于

nez 不等于0

eqz 等于0

  1.比较指令

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

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

cmp-long比较两个长整型

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

  1.

◆普通字段以”i "开头

iget 读操作

iput 写操作

◆静态字段以“S"开头

sget 读操作


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//