查看: 107|回复: 0

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

[复制链接]
发表于 2020-6-3 13:38:26 | 显示全部楼层 |阅读模式


目录
动态调试步骤
        复制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
  

等待附加。

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

新手向总结:IDA动态调试So的一些坑
用pm确定要调试apk的包名  
pm(package manager)包管理工具。

列出所有的包信息:pm list packages [filter]
pm过滤器:
  • -d:只显示禁用的应用的包名
  • -e:只显示可用的应用的包名
  • -s:只显示系统应用的包名
  • -3:只显示第三方应用的包名

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

新手向总结:IDA动态调试So的一些坑
用am启动被调试应用  
am是activity manager的缩写。

am启动程序命令:am start -D -n com.example.testarm/.MainActivity
  • am start -D -n调试模式打开应用
  • com.example.testarm要调试启动的包名
  • .MainActivityLunch Activity

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

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

新手向总结:IDA动态调试So的一些坑
设置IDA调试器
用IDA打开想要调试的so库。
选择Remote ARM Linux/Android debugger。

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

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

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

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

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

新手向总结:IDA动态调试So的一些坑
开始附加程序  
设置主机和端口:

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

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

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

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

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

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

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

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

此时会显示出PC的位置:

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

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

IDA 按F9,继续执行。
jdb连接  
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
  

8700为apk运行的端口,根据实际情况更改。  
确定port的方法  
使用ddms(monitor):  

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

新手向总结:IDA动态调试So的一些坑
注意:以前monitor为Android Studio自带,从2019年下半年开始的Android Studio删除了这些工具。  
提取的ddms:https://www.jianguoyun.com/p/DWps1OsQ9oe6CBjP15oD 访问密码:HrhFnH  
触发断点  

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

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

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

新手向总结:IDA动态调试So的一些坑
Yes  
调试快捷键F2下断点  
F7单步步入  
F8单步步过  
F9执行到下个断点  
  
可能的错误

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

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

新手向总结:IDA动态调试So的一些坑
没有进行端口映射:  

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

新手向总结:IDA动态调试So的一些坑
adb forward tcp:23946 tcp:23946  
android_server未开启  

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

新手向总结:IDA动态调试So的一些坑
可附加的程序过少:  

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

新手向总结:IDA动态调试So的一些坑
启动android_server的用户权限低.用root用户运行android_server来监听.ida调试版本的so和正在运行的so不一致。  

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

新手向总结:IDA动态调试So的一些坑
jdb连接失败:  

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

新手向总结:IDA动态调试So的一些坑
ida打开的so文件名要和运行apk中的so名一致,如果不一致会导致断点无效。  
  

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

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

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

新手向总结:IDA动态调试So的一些坑
  看雪ID:nisodaisuki
https://bbs.pediy.com/user-869791.htm
  *这里由看雪论坛 nisodaisuki 原创,转载请注明来自看雪社区。


温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
微信公众号
快速回复 返回顶部 返回列表