Android脱壳
比较简单的示例,拖一个阿里的壳,从别的地方学习借鉴到的。https://blog.csdn.net/coc_k/article/details/51985976
首先脱壳Android Killer,发现是阿里的壳。
看一下入口类:
1 | android:name="com.ali.mobisecenhance.StubApplication" |
明显是加壳了,而且文件结构中只有一个类,典型的加固,使用IDA进行脱壳。
使用调试模式打开APP,使用到的命令:
adb shell am start -D -n com.ali.tg.testapp/.MainActivity
等待我们的调试进程进行附加
我们使用IDA附加进程。来到:/system/lib/libdvm.so 这个库文件中,在导出函数:dvmDexFileOpenPartial的开始位置下断:
下好断点之后,连接调试进程:jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
输入这条命令之后,JDB就会在等待IDA运行,运行之后JDB就输出:
1 | C:\Users\a>jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700 |
这个可能失败,要注意看看DDMS怎么个情况。
然后我们程序就会断在:
我们是在dvmDexFileOpenPartial这个函数断下的,所以我们的第一个参数是dex文件的起始地址,第二个参数是dex文件的长度。第一个参数的值存在R0,第二个参数的值存在R1。我们转到R0看一下:
可以看到起始地址就是我们想要要的,然后使用脱壳脚本进行脱壳,R0:0x4E472008,R1:0x941FC
1 | static main(void) |
运行这个脚本,会在D盘下生成一个dex文件。
然后我们将脱掉的dex反编译。
最后得到smali文件:
然后我们将这两个文件拖进Android Killer的。
然后我们将我们的入口APP类删除掉,最后就是剩下我们脱掉壳的程序了。
然后我们进行编译!最终就会生成脱壳之后的apk文件。
能够正常运行。