一直对时下流行的apk加固很感兴趣,今天抽空看了一下,不得不感叹现在的加固技术已经发展得这么厉害了。
于是花了点时间研究 了一下, 废话不多说,先整理记录一下,都是整理自各路大神的。
1.开启调试模式
就是把手机弄成可调试的状态,就是ro.debuggable=1,这个是要修改ROM里面boot的,方法就不累赘了。
2.工具准备
PC端调试工具:IDA PRO,这里我用的是6.8版本的
把IDA安装目录下的dbgsrv/android_server 放到手机/data/目录下,可以用adb push ,拷贝到data/下需要ROOT权限,
并授予android_server执行权限,我是直接给777
现在有些加固会检测调试进程做反调试,因此android_server可以改成其它名字后使用
3.手机端准备
安装好要调试的apk,这个不用说
运行刚刚push的android_server,这个同样需要ROOT权限:adb shell /data/android_server,值得注意的是有些加固也会判断IDA默认的端口,所以可以自定义调试端口:android_server -p12345(-p端口号,中间没有空格)
用命令以调试方式调起来:adb shell am start -D -n 包名/主Activity
转发端口:adb forward tcp:23946 tcp:23946(23946是默认的,如果上面指定了端口那就用上面的)
转发调试端口:adb -d forward tcp:8700 jdwp:进程ID(进程ID就是要调试APK的进程id,可以用ps命令查看)
4.PC端准备
打开IDA pro,菜单 Debugger - > Attach -> Remote ArmLinux/Android debugger,弹出对话框:
点击”Debug options”按钮,
勾选
Suspend on process entry point
Suspend on thread start/exit
Suspend on library load/unload
OK
然后hostname 填 localhost
端口默认,或者上面指定了什么端口就填什么端口
OK
在弹出窗口中找到 要调试APK的进程,双击打开。
等载入完成后,该下断点的下断点。一般是断在dvmDexFileOpenPartial函数,在这里dump出dex
最后,点绿色播放按钮开始,或者按F9。
5.开始调试
做完上面的步骤后,给手机发连接命令:jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost
这时IDA Pro 会进入调试,不出意外会停在断点,调试就算开始了。
困了,睡觉,下次继续
附DUMP代码:
auto fp, dex_addr,end_addr;
fp = fopen("C:\\dump.dex","wb");
end_addr = r0 + r1;
for (dex_addr = r0; dex_addr < end_addr; dex_addr ++)
fputc(Byte(dex_addr),fp);