0x01.调试的过程。
1、首先AndroidManifest.xml里面Android:debuggable="true"。
2、将classes.dex拖入IDA中。
3、选择Debugger->Debugger options->Set specific options,在Package Name和Activity中填入主Activity的包名和类名。
4、选择Debugger->Process options,将Port改为8700。
5、下断点,在相应需要调试的函数的位置下断点。
6、手机端开启android_server
具体方法,
C:\>adb shell push android_server /data/local/tmp/ (android_server需到IDA安装目录./dbgsrv下拷贝
)
C:\>adb shell
#su //获取root权限
#chmod /data/local/tmp/android_server //给android_server添加可执行权限
#/data/local/tmp/android_server //启动android_server
7、端口转发
C:\>adb forward tcp:23946 tcp:23946 //把手机上的端口转发到pc上
8、打开要调试的Activity
C:\>adb shell am start -D -a 包名/入口 //以调试的方式期待调试的程序
9、选择Debugger->attach to process,attch到应用,选择包名单击即可。 接下来,出现的界面全部Cancel。程序运行到断点处。
0x02.查看和跟踪流程内存值.
F9运行
F8单步调试
F7进入函数
1.debugger
->
debugger windows
->
locals
查看变量的值
0x03.遇到的问题(类型转换的问题)
1.遇到IDA寄存器中的值bad type
使用 IDA 调试 APK 时经常遇到变量无法识别的情况,需要在WatchView里面手动加入类型转换,如下图
然后在弹出的窗口中自己为变量添加一个类型,类似这样:
(Object*)v0
(String)v0
(
char
*)v0
(
int
)v0
(int*)v0
0x04.修改某个寄存器的值
修改内存中的程序和值
修改程序一般都是IDA的修改方式
定位地址,edit修改对应的值后apply进行修改。
修改内存中的值,在lcoals中直接修改即可
0x05 dump内存中的dex脚本