吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13835|回复: 9
收起左侧

[Android 转帖] Android 「动态分析」IDA 调试 so

  [复制链接]
seaguest 发表于 2019-3-5 15:26
这几天尝试IDA7.0调试so文件,网上的教程太多,有些步骤说的不是很详细,踩了很多坑,终于找到正确的方法,可以正常的调试了。
下面是转帖的全文,但是有两点需要注意:
1,如何IDA attach process看到的process很少,一定是anroid_server权限不够,可以尝试用su,以root的身份运行android_server。
2,使用IDA打开目标so文件,配置好Debugger->Process option, 在目标函数打好断点,然后Attach process。如果app一直处于waiting for debugger的状态,需要执行jdb命令恢复程序执行。

我用的是方法二。

------------------------------------------------下面是原文------------------------------------------------

方法一
适用于无需调试.init_array和JNI_OnLoad块情况,省去am和jdb;

1、安装apk并打开,手机开启IDA调试服务:【adb shell】【su】【./data/local/tmp/android_server】

2、PC端进行端口转发:【adb forward tcp:23946 tcp:23946】

3、IDA打开so文件,定位到待分析函数并下断点:【New】【Export或Function window搜索函数双击定位】

4、附加程序,进入动态调试界面:【Debugger—>Process options】【Hostname:127.0.0.1 Port:23946】然后【Debugger—>Attach to Process】【OK】

5、点击绿色三角【F9】执行程序,弹窗选Same,开始调试,【F7】单步步入,【F8】单步步过

注意:

1、步骤1:如果使用【adb shell /data/local/tmp/android_server】,若没有权限则无法读出可调试进程。

2、步骤2:步骤1开启android_server后为手机终端开启了23946端口,转发是为了使手机应用与IDA进行通信。

3、步骤3:此时下断点会一直保留到动态调试中,且定位到相应的内存位置,省去寻找偏移来计算函数地址。

4、步骤4:如果弹出的附加进程窗口没有待调试应用进程,则取消窗口后在手机上打开应用,从新进入附加进程窗口进行搜索;

5、步骤5:IDA进入动态调试界面后F9执行程序会弹窗验证这个so和应用中的so是否一致【Same】。

方法二
最常用 :-)

1、安装apk并打开,手机开启IDA调试服务:【adb shell】【su】【./data/local/tmp/android_server】

2、PC端进行端口转发:【adb forward tcp:23946 tcp:23946】

3、打开DDMS,以调试方式来启动应用【adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity】

4、IDA打开so文件,下断点,然后进行attach附加

5、使用jdb恢复进程运行,终端出现停顿:【jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700】

6、jdb恢复,点击绿色三角【F9】执行程序,弹窗选Same,开始调试,【F7】单步步入,【F8】单步步过

注意:

1、步骤3:会打开应用并弹框:Waiting For Debugger;DDMS中会出现红色虫子。

2、步骤5:端口可在DDMS中看到,若是选中状态,则可使用8700端口通信【第三步默认使DDMS选中当前调试应用】;DDMS红色虫子变成绿色;应用上弹框消失;若不使用jdb,则无法使程序在waiting状态下跑起来,则无法将so加载到内存中;若不使用DDMS,为了jdb能恢复进程则需要端口转发【adb forward tcp:8700 jdwp:11111】,11111为应用PID,可在IDA的attach界面找到进程ID、也可进入shell使用【ps|grep xxx】找到PID;如果jdb失败,即提示“无法附加到目标VM”,则考虑犯了最低级错误,应用apk没有开启可调式,在AndroidManifest.xml写入后重新打包或者直接使用BDOpener xposed框架一劳永逸。

3、在IDA的Modules界面中搜索so文件并点入,会快速找到待分析函数,双击函数跳转定位;也可以新建IDA打开so文件,确定函数偏移地址;在正调试的IDA Debug View中搜索so的基地址【Ctrl+s】;计算函数所在内存地址,并定位【G】。

4、最好在开始就将DDMS打开,以便读取进程PID,因为后打开会出现捕捉不到早已打开的可调试程序进程的情况。

BTW
1、IDA中,【空格】进行流程图界面和汇编界面转换,【Shift+TAB】进行汇编和伪c转换。

2、ida现在不需要手动导入Jni.h,直接在变量上按【y】,改为【JNIEnv*】后回车即可。

3、查看断点并双击定位:【Debugger-Breakpoints-Breakpoint list】。

免费评分

参与人数 5吾爱币 +9 热心值 +5 收起 理由
yutao531315 + 1 + 1 用心讨论,共获提升!
ADkil + 1 用心讨论,共获提升!
qtfreet00 + 6 + 1 鼓励转贴优秀软件安全工具和文档!
菜鸟也想飞 + 1 + 1 谢谢@Thanks!
丶咖啡猫丶 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

007gun 发表于 2019-3-5 15:33
好东西啊!先下载试试
多幸运遇见baby 发表于 2019-3-5 17:28
欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yushangwl 发表于 2019-3-5 22:47
夜步城 发表于 2019-3-7 08:19 来自手机
来学习一下
头像被屏蔽
pioneer_chen 发表于 2019-3-8 10:40
提示: 作者被禁止或删除 内容自动屏蔽
adie 发表于 2019-3-8 13:22
感谢分享了。快来学习一下。
诸葛小布 发表于 2019-3-27 21:29
tttttttttest
zhanghaozhen 发表于 2019-10-23 09:22
学习了,谢谢楼主
李道臣 发表于 2020-3-16 08:03
感谢分享,正在学习ARM
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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