【移动安全基础篇】——31、Android动态代码自修改原理

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 的位置
直接计算偏移,修改相应的位置

修改生效

总会有不期而遇的温暖. 和生生不息的希望。
原文地址:https://www.cnblogs.com/devi1/p/13486415.html