正文
由于 JNI_OnLoad 和 .init_array 执行时间很早,so一加载到内存中就执行了,所以动态调试步骤会稍微要麻烦一些
1. 进入手机, 执行./android_server
(如果是64位程序执行./android_server64)
2. 再开一个终端,执行adb forward tcp:23946 tcp:23946
3. 因为我们徐娅程序刚启动的时候就开始调试,所以先把程序的debug开关打开(AndroidManifest.xml中),ps:本次调试的APP本来就打开了
4. 调试模式启动app,执行
am start -D -n demo2.jni.com.myapplication/.MainActivity
5. IDA attach到目标进程,init_array 和 JNI_OnLoad 中打好断电, F9执行
6. 开一个终端执行
jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost
# 这里端口默认是8700,如果报错refuse了,那么打开sdk/tools/monitor.bat,查看端口到底是多少,比如我这次就是8600
7. 点击完same后程序会断在一个点,不要理会,直接F9(如果弹出框都点Yes) ,这里可能会卡住一段时间,是正常的,比如我的就卡了十几秒,直到程序显示断在了我们的断点处 把下面调用exit对应的HEX改成00 00 00 00是可以的。
F9继续执行,这样就动态的绕过了exit推出
参考:
https://www.52pojie.cn/thread-767989-1-1.html