1. classes.dex
DexClassDef -> DexClassData -> DexMethod -> DexCode
里面的 u2 insns 的值便是用于存放程序实现代码的地方。
程序执行时候会把整个 dex 文件加载到内存中,然后动态地解析执行 insns 中的内容。
只要修改了里面的数据,就相当于修改了程序执行流程和方法。
2. 内存中修改 insns
1) 定位到 dex 文件
2) 计算函数的 DexCode 位置
3) 重写 DexCode 的 insns 数据
原始程序返回结果 1
找到 classes.dex 文件中 ret1()的位置
就是将 1210 改为 1220
3. ida 中动态修改
Ctrl + S 打开 map 数据
查找内存加载的 classes.dex 的位置
直接计算偏移,修改相应的位置
修改生效