IDA PRO动态调试 尝试脱壳记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pansing/article/details/54196931


一直对时下流行的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);









没有更多推荐了,返回首页