IDA 动态调试

通常在APP逆向和破解时,某些重要的函数会以so文件的形式进行加载,所以,在想获得关键操作逻辑和修改某些函数时,就需要IDA来进行操作啦。以下使用IDA版本7.0,小米手机

1、上传Android_Server

文件存放在安装目录下的dbgsrv目录中,7.0以后版本多了几个其他版本的Android_server文件,上传Android_server文件到手机目录中,并提升执行权限。

adb push android_server /data/local/tmp/
chmod 755 android_server
adb forward tcp:23946 tcp:23946

执行后就可以显示正在监听23946端口,如果报错,一般是使用位数和系统不一致。

2、调试启动APP

以调试模式启动app

adb shell am start -D -n 包名/.MainActivity

手机界面显示等待调试中,便可以进行下一步了。

3、查看APP PID

调试进程进行端口转发,查看进程对应PID。

adb shell ps | grep 包名
adb forward tcp:8700 jdwp:pid

8700端口一般为默认的本地调试端口,如果不一致,可以在DDMS中查看。

4、IDA附加进程

附加进程调试时,有时候需要对,如下的选项进行勾选,一般在需要动态加载so文件,调试JNI_onload函数的时候需要,对于一般调试静态函数的,需要拦取执行后断点的,可能连调试模式启动app都不需要。

1553850211516

选择后,便可以在attach to process选项中查看到相应的可调试进程了。如果没有进程可能是你的APP不能调试,需要添加可调试参数。或者直接修改ro.debuggable=1。

1553850356604

5、JDB附加

执行jdb附加

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

6、调试选择

选择完成后,进入调试状态,在右边的modules栏可以看到加载进来的so文件。选择需要调试的so文件,如果没有看到需要的so文件,说明so文件是动态加载的,这时候F9运行,就可以看到相应的so文件了。

选择相应的so文件后,会显示so文件中的函数,选择对于函数即可。

1553850903002

7、调试断点

如选择对于的JNI_Onload 函数,这时候界面会跳转到函数的起始位置,当然也可以使用基地址加偏移地址的方式寻找。找到函数位置后就可以F2下断点了。

断点执行后,点击F9再次运行,程序就可以执行到断点位置,当然有些是需要配合界面操作来执行。由于以上是抓取JNI_Onload函数,直接运行即可。

利用F8步过,F7步入进行调试即可。

对于调试结果,可以查看右侧寄存器变化,和下面的Hex View 变化值,来查看是否有需要的执行结果和函数值。





# Android逆向  

tocToc: