发新帖

Android逆向系列之动态调试(七)–IDA调试so文件(下)

[复制链接]
824 0

一、环境准备

工具详见<工具篇>、破解的apk demo: Alictf2014_2.APK(反调试)、apktool

上一篇文章是讲解了IDA在无反调试的情况下调试so文件,这一篇文章自然就是解决在有反调试的情况下,如何使用IDA调试so文件,下一篇文章将会讲解dump dex的方法,敬请关注!

二、调试准备

1、同样的老操作,确保XML里的android:debuggable=”true”,不懂的参考前面的文章

2.以调试模式运行apk,命令: adb shell am start -D -n 包名/类名 (包名类名获取方式请参考文章)

adb shell am start -D -n com.yaotong.crackme/.MainActivity ,出现下图说明启动成功:

3.IDA–attach

adb shell android_server

adb forward tcp:23946 tcp:23946

启动IDA–>debugger–>attach–>remote xxxxx–>填localhost–>ok–>选择对应进程

以上步骤不完整,具体请参考上一篇文章《Android逆向系列之动态调试(六)–IDA调试so文件》

配置debugger: Debugger — Debugger Options–>勾选如下图的勾:

4.jdb–attach

先打开DDMS

F9运行程序

然后再cmd下输入: jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

问题分析: jdb出现致命错误,无法附加到目标 VM

问题解决:

打开DDMS,然后选中相应的进程,重新输入jdb命令;如果不行,重新检查是否有android:debuggable=”true”属性;

问题分析:出现如图:

问题解决:直接点取消即可,另一弹窗也点取消,最终程序会断在linker断即正确。

5.下断点–触发断点

定位函数的方法:绝对地址=基地址+偏移地址

具体方法请查看上一篇文章

这里触发断点的方式为:点击运行按钮或者是按F9

接着就可以动态调试F7或者F8里

6.程序破解

这里F8跟踪程序,每次调试到BLX R7;便退出,说明这里有问题,我们查看一下寄存器,发现是一个pthread_create函数,说明,反调试在这里开启一个线程,然后不断地做轮询,主要的原理是判断TrackerPid字段值是否等于0,由于如果存在调试,TrackerPid就不为0,因此可以用作反调试;要破解也简单,我们只要把这里的调用函数给Nop掉即可。

使用二进制编辑器,将BLX R7 nop掉,首先找到其对应的地址,这里可以再打开另一个ida去找到对应的地址。

然后使用apktool回编译,签名、安装即可进行正常的调试。

三、小结

执行android_server

端口转发 adb forward tcp:23946 tcp:23946

调试模式启动程序 adb shell am start -D -n 包名/类名

IDA附加

静态找到目标函数对应所在模块的偏移地址

Ctrl+S找到对应模块的基地址,两个地址相加得到最终地址

G跳转至地址,然后下断点

F9运行

执行jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

断下,进行调试

参考资料:

http://m.blog.csdn.net/article/details?plg_nld=1&id=51500328&plg_auth=1&plg_uin=1&plg_usr=1&plg_vkey=1&plg_nld=1&plg_dev=1

Android逆向之动态调试总结

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表