您的位置:首页 > 其它

360早期壳的脱壳步骤

2016-12-19 16:37 295 查看
                                                             简略的截图和实验过程---步骤参考http://blog.csdn.net/jiangwei0910410003/article/details/51769447

 







 
 

 
 


G跳到mmap函数前后下断点
 
 
 
 
转发jdwp



开始启动程序一直F9
直到出现
Cancel两次:
 
 
Libjiagu
加载了,此时需要单步 f8
 
 
 
第2个二断点在此:
此断点用来比较和R11寄存器的大小,每次到这里修改R11的大小就好,要根据
R3,ASR#2的值要修改。修改到跟它一般大就好。此处可以F9.
 

 
 
接着可以一路F8到此处下断点,第一次下断点时,要F7跟入,以后可以F9。
 
 
 
F7进入后,在下面的地方下断点。注意,此处断点一定要F7跟入,因为里面是更改反调试内容的东西。所以一定要进入。
 
 
进入后就不用下断点了,注意,每次进入此处,一定要F8一步步走,直到把CMP
            R0, #0的指令走过就可以F9了,要把R0里面置0就好,这也是PTRACE的方式。

 
 
这里要注意把CMP             R0, #0的指令过了后,尽量F8几步,在F9,然后就是一个循环,一直这样下去。每次到mmap函数是,注意观察栈的信息,
 
 
 
 
    
 
 
第2次进入比较时比较的代码就会变了,所以我说不用再比较那里下断点的原因。要一步一步单步F8跟进。
 
 
 
 
除了第一次进入时CMP代码段,第2 cmp
比较的R0内容不是PTRace值时,其他都是。
 
 
 
 
看到如下图时就差不多完成了
 
看到下图时就要注意在Mmap里面F8单步走了,边走边观察r0寄存器的值,就差不多了。
R0寄存器每次走过下面这个函数时都会出现值.
 
 
 
此时,会一直在mmap函数循环,注意一定要把内存的地址定位到R0对应的地址。
 
 
 
 
然后多循环几次就可以了,估计有6,7次吧。
 
 
 
出现DEX的字样,可以进行Dump。
 
 
 
 
 
 
 

auto fp, dexAddress;

fp = fopen("D:\\test.dex", "wb");

for ( dexAddress=0x760C1000; dexAddress < 0x760C1000+0x04BC38; dexAddress++ )

fputc(Byte(dexAddress), fp);
 
 
 
 
 
把下好的DEX经过修复
 
 
接着反编译DEX文件,生成smali文件后在Android
killer内进行替换,替换后把 assert
和 Lib里面的SO都删除,也把入口点函数StubApplition以及ACtivity=qihoo删除,接着编译运行就好。
 
 

 
 
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: