目录 动态调试步骤 复制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的一些坑
用pm确定要调试apk的包名
pm(package manager)包管理工具。
列出所有的包信息:pm list packages [filter] pm过滤器: - -d:只显示禁用的应用的包名
- -e:只显示可用的应用的包名
- -s:只显示系统应用的包名
- -3:只显示第三方应用的包名
新手向总结: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调试器用IDA打开想要调试的so库。 选择Remote ARM Linux/Android debugger。
新手向总结:IDA动态调试So的一些坑
设置调试选项:
新手向总结:IDA动态调试So的一些坑
新手向总结:IDA动态调试So的一些坑
开始附加程序
设置主机和端口:
新手向总结:IDA动态调试So的一些坑
新手向总结:IDA动态调试So的一些坑
选择要调试的程序进行附加。
弹出对话框表示全部加载完成了。
新手向总结:IDA动态调试So的一些坑
此时会显示出PC的位置:
新手向总结:IDA动态调试So的一些坑
IDA 按F9,继续执行。 jdb连接
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
8700为apk运行的端口,根据实际情况更改。
确定port的方法
使用ddms(monitor):
新手向总结:IDA动态调试So的一些坑
注意:以前monitor为Android Studio自带,从2019年下半年开始的Android Studio删除了这些工具。
提取的ddms:https://www.jianguoyun.com/p/DWps1OsQ9oe6CBjP15oD 访问密码:HrhFnH
触发断点
新手向总结:IDA动态调试So的一些坑
same:
新手向总结:IDA动态调试So的一些坑
Yes
调试快捷键F2下断点
F7单步步入
F8单步步过
F9执行到下个断点
可能的错误
由于没有设置参数,所以经常有下面的错误提示,忽略或者随便给个参数:
新手向总结:IDA动态调试So的一些坑
没有进行端口映射:
新手向总结:IDA动态调试So的一些坑
adb forward tcp:23946 tcp:23946
android_server未开启
新手向总结:IDA动态调试So的一些坑
可附加的程序过少:
新手向总结:IDA动态调试So的一些坑
启动android_server的用户权限低.用root用户运行android_server来监听.ida调试版本的so和正在运行的so不一致。
新手向总结:IDA动态调试So的一些坑
jdb连接失败:
新手向总结:IDA动态调试So的一些坑
ida打开的so文件名要和运行apk中的so名一致,如果不一致会导致断点无效。
新手向总结:IDA动态调试So的一些坑
-End -
新手向总结:IDA动态调试So的一些坑
看雪ID:nisodaisuki
https://bbs.pediy.com/user-869791.htm *这里由看雪论坛 nisodaisuki 原创,转载请注明来自看雪社区。
|