mmap函数下段,然后F9运行断下,然后F8往下,一直运行到这里:
F7进来,在R2寄存器这里打一个断点:
F9运行到这里,然后F7进来;
F8往下走,这里有比较指令:这个函数的返回值在R0里面存储,(可以直接把光标放在cmp那条指令然后F4跳过去 )把R0置零:
置零之后呢,F9:
再一次F8:继续在mmap函数末尾断下,然后继续F8:来到这里:紧接着F9,继续来到mmap
然后继续F8:发现还是libc.so,继续F9,然后F8,知道来到libjiagu.so:
(注意,这是第二处反调试的点,虽然后逻辑代码和第一处的一样,但是是不同的区段,所以还需要进去看看是不是上一次哪两个下断的函数,不要直接f9,以为和第一次一样,不一样!)继续F8往下,来到这里:然后F9在这里断下:然后F7进去,然后F9在这个 LR 处断下,然后F7进去:进去后一路F8,继续来到cmp比较指令,继续修改上面函数的返回值R0寄存器的值;从而过掉反调试
直接置零即可;
修改后,继续F9:在mmap函数处断下:同样的,继续往下走,来到libjiagu.so,来时和上面一样,来到这里比价的地方:这是第三次修改R0 和cmp处比较:继续F9,在mmap函数处断下,然后在函数头位置下一个断点;
然后ctrl+S,可以看一下各个区段:
到这里,已经三次反调试的点已经过去了,现在要做的,就是找到栈去存放dex文件的地方;
在mmap函数的函数头和函数尾部分别下断点,尾部断下后,直接F9运行,在头部断下,然后F8单步,一直单步到函数尾部,时刻观察栈窗口;
在栈区发现:此时同步R0寄存器,一直单步,知道十六进制汇编窗口出现dex文件;也就是执行完上面这个函数;观察dex的区域:我们ctrl+s找到该区域跳过来看一下:在zero这个区域里面;
解密后的数据就放在这个区域,也就是R4寄存器存放的值;
这个dex文件的大小就是:19837C
也就是此时R4和R5寄存器的值;接下来,我们用脚本来dump一下;
修改起始地址和大小然后点击run运行即可;
打开压缩包,然后丢进去替换;
把安装包使用androidkiller进行反编译,在xml里面修改这两个属性:
然后保存,回编译即可;
感谢大家的支持!!!
另外再分享脱壳+修复的视频给大家
链接:https://pan.baidu.com/s/1K4cXV5DZ3NbKvTQbCEFANQ
提取码:u3ae
来源:CSDN
作者:BL11.11
链接:https://blog.csdn.net/BL9794/article/details/104354304