一、dalvik字节码学习
1. 寄存器的命名
v: 局部变量寄存器,v0-vn , 变量寄存器: v0-vn
p: 参数寄存器, p0-pn
2.得到samli文件流程
.java ---> .class ---> .dex ----> smali
3. dalvil 字节码类型
B : byte
C : char
S : short
I : int
J : long
F : float
D : double
Z : boolean
V : void
L : java类类型,也就是类型
[ : 数组类型
4. dalvil指令集
wide : 标识指令操作数据宽度为64位
from16 : 表示源寄存器为16位
nod : 空操作指令,它的值为00。用来指令对齐,无实际作用和空格类似
move : 数据操作指令
exp : vA(4位数值) vAA(8位数值) vAAAA(16位数值)
Move vA,vB : 将vB寄存器的数值给vA寄存器
Move/form16 vA,vB :
return void : 表示函数从void方法返回,返回值为空。
return vAA : 表示函数返回一个32位非对象的值,返回寄存器为8位
return-wide vAA : 返回一个64位非对象类型数值,返回寄存器为8位
return-object vAA : 返回一个对象类型的值,返回寄存器为8位
new-instance : 实例化一个对象
invoke-direct : 调用实例化对应的方法
invoke-virtual :
supt-object :
check-cast : 将寄存器对象引用转换为指定类型
instace-of : 寄存器中的对象是否转为成指定类型
goto : 无条件跳转
switch : 分支跳转
if : 条件跳转
5.smail文件学习详解
.registers : 寄存器的总数,这个数量是参数和本地变量总和
.param : 表明方法的参数,每个.param指令表示一个参数,方法使用几个参数就有几个.paramter指令
.prologue : 指定代码的开始处,混淆代码可能去掉该指令
.line : 指定源代码的行号,混淆后代码可能去掉行号
.locals : 表示局部变量寄存器的总个数
.local : 表明方法中非寄存器
Android killer ——— AndroidCrackTool (Mac)
PKID ———> 查看是否加壳
IDA ———> 分析.so库文件
JEB : 动态调试java层代码
WinHex : 修改so库软件
Xposed框架开发
CydiaSubstrate框架
Frida框架
ADBI框架
ELFARM HOOK框架
JVMTI : 有时间学习一下,内存分配坚听