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

Android逆向系列之动态调试1–入门篇 
Android逆向系列之动态调试2–Smali注入
Android逆向系列之动态调试3–Eclipse调试apk
Android逆向系列之动态调试4–IDA调试dex
Android逆向系列之动态调试5–代码注入(JDB调试)
Android逆向系列之动态调试6–gdb调试
Android逆向系列之动态调试7–IDA调试so文件(上)
Android逆向系列之动态调试8–IDA调试so文件(下)

一、环境准备
工具详见<工具篇>、破解的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–>勾选如下图的勾:
ida配置

4.jdb–attach
先打开DDMS
F9运行程序
然后再cmd下输入: jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
jdb成功

问题分析:jdb出现致命错误,无法附加到目标 VM
问题解决:
打开DDMS,然后选中相应的进程,重新输入jdb命令;如果不行,重新检查是否有android:debuggable=”true”属性;

问题分析:出现如图:
找不到文件
问题解决:直接点取消即可,另一弹窗也点取消,最终程序会断在linker断即正确。

5.下断点–触发断点
定位函数的方法:绝对地址=基地址+偏移地址
具体方法请查看上一篇文章

这里触发断点的方式为:点击运行按钮或者是按F9
接着就可以动态调试F7或者F8里

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

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

然后使用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逆向之动态调试总结

转载自http://www.tasfa.cn/index.php/2016/06/04/android-ida-so-3/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值