新手向总结:IDA动态调试So的一些坑

微信扫一扫,分享到朋友圈

新手向总结:IDA动态调试So的一些坑

本文为看雪论坛优秀文章


看雪论坛作者
ID:nisodaisuki

目录

动态调试步骤

复制android_server到设备中,并执行

用pm确定要调试apk的包名

用am启动被调试应用

设置IDA调试器

开始附加程序

jdb连接

触发断点

调试快捷键

可能的错误

虽然Java层代码包含了许多有用的信息,但是一般稍微注重安全的应用都会把核心代码放到Native层,所以对Native层的调试就显得尤为重要了。

动态调试步骤

使用工具:
am + pm +IDA,其中am和pm为安卓系统自带。




复制android_server到设备中,并执行



android_server的目录为:IDA目录>dbgsrv>android_server。

注意:
android_server分版本的,使用对应的版本。

//复制到设备上

adb push android_server /data/local/tmp


//修改权限,使之能执行

chmod 777 /data/local/tmp/android_server


//执行

cd /data/local/tmp

./android_server


adb forward tcp:23946 tcp:23946

等待附加。




用pm确定要调试apk的包名



pm(package manager)包管理工具。

列出所有的包信息:pm list packages [filter]

pm过滤器:

  • -d:只显示禁用的应用的包名

  • -e:只显示可用的应用的包名

  • -s:只显示系统应用的包名

  • -3:只显示第三方应用的包名




用am启动被调试应用



am是activity manager的缩写。

am启动程序命令: am start -D -n com.example.testarm/.MainActivity

  • am start -D -n调试模式打开应用

  • com.example.testarm要调试启动的包名

  • .MainActivityLunch Activity

启动后等待调试器的链接。




设置IDA调试器



用IDA打开想要调试的so库。

选择Remote ARM Linux/Android debugger。

设置调试选项:




开始附加程序



设置主机和端口:

选择要调试的程序进行附加。

弹出对话框表示全部加载完成了。

此时会显示出PC的位置:

IDA 按F9,继续执行。




jdb连接



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

8700为apk运行的端口,根据实际情况更改。

确定port的方法

使用ddms(monitor):


注意:
以前monitor为Android Studio自带,从2019年下半年开始的

Android Studio删除了这些工具。


提取的 ddms:

https://www.jianguoyun.com/p/DWps1OsQ9oe6CBjP15oD 

访问密码:HrhFnH




触发断点



same:

Yes




调试快捷键



F2下断点

F7单步步入

F8单步步过

F9执行到下个断点

可能的错误

由于没有设置参数,所以经常有下面的错误提示,忽略或者随便给个参数:

没有进行端口映射:

adb forward tcp:23946 tcp:23946

android_server
未开启

可附加的程序过少:

启动android_server的用户权限低.用root用户运行android_server来监听.

ida调试版本的so和正在运行的so不一致。

jdb连接失败:

ida打开的so文件名要和运行apk中的so名一致,如果不一致会导致断点无效。

看雪ID:nisodaisuki

https://bbs.pediy.com/user-869791.htm
 

*这里由看雪论坛 nisodaisuki 原创,转载请注明来自看雪社区。

“爱奇艺超前点播《庆余年》”被判违法违约:赔偿损失 1500 元 + 15 天 VIP 会员

上一篇

趣漫画:Java 对 Python 的渗透能成功吗?

下一篇

你也可能喜欢

新手向总结:IDA动态调试So的一些坑

长按储存图像,分享给朋友