360加固逆向脱壳之过反调试

时间:2024-04-12 18:11:41

写在最前,本来是想把360加固全部脱壳后,写一篇教程。不过在我过了360加固调试后,最后卡在了native void onCreate函数的提取。最后就无结果了。但又发现许多人卡在了360加固的反调试,为了帮助其他人能成功(其实我没有这么伟大,只是发现写这篇文章对我没有害处,就决定放出来),而且希望,如果有人把native void onCreate函数dump下来的话,请觅我,我真的很想知道360加固的原理与逆向方法(这才是重点)。哦,对了,360加固版本是1.3,如果用的Android的 art 模式,在网上有一篇文章是修改系统的,可直接dump出源码,不过我没有亲测,而我用的是dalvik模式,主要是为了弄清360加固的加固原理与反调试原理。

 

我的360加固1.3样本下载地址: http://pan.baidu.com/s/1pKSP22n


好了,让我们开始吧。

 

一、使用系统上,我用android4.4编译了一个自己的android系统,并且运行在虚拟机上运行,(由此不用把APK改为什么Debug模式了,因为我用的系统就是Debug模式)修改的地方是在Native.cpp 文件中的dvmLoadNativeCode函数中 version =(*func)(gDvmJni.jniVm, NULL); 之前加入sleep(20); 之后IDA会自动断点在sleep之后,是不是很神奇?

360加固逆向脱壳之过反调试

二、启动虚拟机,并使用编译好的android 系统包(具体怎么编译,是另外的一篇教程了,可以网上搜索到,很多的。),不过也可以直接是用jdb作为桥接。

 

写在第三步之前,其实这里面还有一个可有可无的东西,需要把apk用apktool可解压,但是直接用现有的apktool解压会失败,解决方法是直接去获取apktool的源码,并且修改一个地方就OK了,至于修改哪里,有兴趣的朋友可以自己查找。应该都能过的。

 

三、虚拟机启动后,打开一个cmd,在其中输入adb forward tcp:23946 tcp:23946

再打开一个cmd,在之中运行adb shell, 然后在运行/data/local/tmp/android_server(是用IDA里面的android_server,放入到虚拟机的,并且修改了权限,网上有很多教程,可搜索)

然后在虚拟机中运行Test360_2(也就是我制作的一个360加固的hello_world样本,已经签名好了的)

 

四、然后就开始用IDA attach Test360_2进程了。关键性的东西来了。

一开始,IDA会自动断点在这里

360加固逆向脱壳之过反调试

经过4,5步F7后,来到libdvm.so

360加固逆向脱壳之过反调试

红色圆圈是我在系统源码中打的调试信息,然后在BLX R10处F7,也就是进入函数jni_onload()然后来到并在红色进入F7

来到,红色出 F7

360加固逆向脱壳之过反调试

来到,并在红色处 F7

360加固逆向脱壳之过反调试

进入上面第一个红色后,鼠标滚轮往下找到switch 函数,并在case 25下断点,如下图

360加固逆向脱壳之过反调试

360加固逆向脱壳之过反调试

然后F9(好像是按了2次F9,呵呵),反正是来到case 25,然后在 case  14 下断点如图

360加固逆向脱壳之过反调试

F7进入

多次单步F7后,来到

360加固逆向脱壳之过反调试

 把R3寄存器的6000010改为A000010 (这里的反调试检测,可能是检测rtld_db_dlactivity 函数,不过不太确定,因为没有看见源代码)

 360加固逆向脱壳之过反调试

然后单步,把case 14与case 25的断点给取消掉,并在case 29下断点,并且进入,当BLX  LR调用 strtol 的时候,需要单步出来修改一些值,来到MOV R7,R0的时候

修改R0的之后0,

 360加固逆向脱壳之过反调试

360加固逆向脱壳之过反调试

360加固逆向脱壳之过反调试

并且把 R1的hex处改为0,如下图中的红色出,需要修改为0

这里以上是检测 TracePID


然后继续F9,在多次 case 29 多次下断点后,来到

360加固逆向脱壳之过反调试

在CMP处,把R0的值修改为0(这里是检测调试端口),然后F9

还是来到

360加固逆向脱壳之过反调试

在MOV R7,R0处下端点,并修改R0与R2的值,

360加固逆向脱壳之过反调试

360加固逆向脱壳之过反调试

修改为堆栈中的值(可能你的这个值不一样,因为这个值是之前调试的时候的一个时间。这里是时间检测)

 然后就没有反调试的代码了,多次F9后,就来到了

来到了全新的世界。可是我最后没有dump出native void onCreate,遗憾。


原文地址: http://blog.****.net/chen249191508/article/details/52779264