ida动态调试.so文件(附:动态调试中常见问题及解析)

安卓开发交流群:651325026感兴趣的可以加群。

介绍IDA动态调试.so之前先说几个在调试过程中可能遇到的坑和相应的解决方法。

问题一:IDA在使用过程中,F5插件翻译C/C++代码,汇编时报 please position the cursor within a function。

解决方法:1.右键 create func;2.在该函数内点F5即可翻译。

问题二:在使用adb push 时adb push d:\android_server(IDA的dbgsrv目录下)  /data/local/tmp时有报错,说失败;

解决方法:1.adb shell 进入手机目录下;2.su 获取超级用户权限;3.chmod 777 data 给data赋予权限;4.cd local进入local目录下;5.chmod 777 local给local赋予权限;5.cd tmp;进入tmp目录下;6.chmod 777 tmp

问题三:启动android_server时候报错。

解决方法:

root@android:/data/local/tmp # ./android_server
IDA Android 32-bit remote debug server(ST) v1.19. Hex-Rays (c) 2004-2015 Listening on port #23946...

出现 bind: Address already in use 错误
这是因为手机中可能已经在运行android_server,使用 ps | grep android_server 看一下,有的话杀掉.
如下:(14061是pid)

root@android:/ # ps | grep android_server
root 14061 13574 11180 9504 ffffffff 40183da0 S /data/local/tmp/android_server 

127|root@android:/ # kill -s 9 14061

       下面转入正题,如何动态调试.so文件,网上其实介绍的已经有很多了,自己也是参考别人的结合自己的实践整理出一套方案。一方面便于自己记忆,另一方面也为了方便他人。

 第一步:先安装自己待调试的APK(adb install 后面的为自己的APK)

adb install C:\..\app-debug_Signed.apk

第二步:找到IDA的dbgsrv目录下的androir_server,然后将其adb push进入手机指定目录下:

adb push "D:\Program Files (x86)\IDA 6.8\dbgsrv\android_server" /data/local/tmp

第三步:adb shell进入手机根目录下,进入到tmp目录下:

adb shell

cd data/local/tmp

第四步,给android_server赋予权限并启动android_server(一定要输入su进入超级用户)

su

chmod 777 android_server

./android_server

第五步,另开启命令提示符,开始操作(注意:adb shell am start -D -n后面跟的是:包名/主函数名)

adb forward tcp:23946 tcp:23946

adb shell am start -D -n com.game.game2048/com.game.game2048.MainActivity

第六步,打开IDA,选择Go->选择Debugger->选择Attach->选择Remote ARMLinux/Android debugger->弹出弹窗,Host里面填写127.0.0.1  ->记录com.game.game2048的ID,在这里我的是27191(每次都是不一样的,一定要记住哈)->勾选debugger选项。如下图所示。

第七步,另开命令提示符,进行端口转接,8700端口为调试端口。

adb forward tcp:8700 jdwp:27191

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

第八步,根据so文件中的相对地址计算其绝对地址。

1.先F9键到加载so文件入口时。

2.要定位stringFromJNI函数,故而先看在so文件中的相对地址是0CA0

3.切回IDA,Ctrl+s调出segment表,查找libxxx.so的入口地址。我们看到该so的start地址比较多,我们记住有X属性的Start地址为75676000,忽略7567B000那个,绝对地址75676000+so内偏移地址0CA0=75676CA0。

第九步,IDA中G键,设定断点地址 75676CA0,F2设置断点。如图所示。

第十步,F9执行至断点处,F7单步调试,F8单步步入 ,这样就可以愉快的调试了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张云瀚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值