首页
论坛
课程
招聘

[原创]新手关于ida动态调试so的一些坑总结

5天前 842

[原创]新手关于ida动态调试so的一些坑总结

5天前
842

目录

 

虽然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

 

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

<img src="upload/attach/202005/869791_NVBFYY56EP86ZF6.jpg" style="zoom: 25%;" />

设置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名一致. 如果不一致会导致断点无效.


[推荐]看雪工具下载站,全新登场!(Android、Web、漏洞分析还未更新)

最后于 5天前 被nisodaisuki编辑 ,原因: 增加和修改错误
最新回复 (4)
猫子 5天前
2
0
gdb 应该是jdb吧
nisodaisuki 5天前
3
0
猫子 gdb 应该是jdb吧
是的, 已经修改了
拍拖 2 4天前
4
0
非常感谢分享。
其实可以把安卓常见的一个ANTI DEBUG的也一起整理下。 就更赞了
Editor 12小时前
5
0
感谢分享哦
游客
登录 | 注册 方可回帖
返回