无需 Root 使用 IDA 调试 Android Native
工具准备
Apktool: https://ibotpeaches.github.io/Apktool/install/
Android SDK: https://developer.android.com/studio/releases/platform-tools
修改源程序
首先使用 apktool
解包。
apktool StandOnTheGiants.apk
在 AndroidManifest.xml
的 <application>
标签中添加 android:debuggable="true"
。
根据真机架构将 android_server
或 android_server64
拷贝到 lib
中对应的文件夹下。
然后使用 apktool
重新打包。
apktool b StandOnTheGiants
在 dist
目录下找到生成的 apk
,使用 keytool
和 jarsigner
对重新打包的 apk
进行签名。
keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore
jarsigner -verbose -keystore abc.keystore -signedjar StandOnTheGiantsx.apk StandOnTheGiants.apk abc.keystore
使用 adb
将重新打包的 apk
远程安装到真机。
adb install StandOnTheGiantsx.apk
启动调试器
执行 start_server.bat
启动真机上的调试服务。
@echo off
rem 下面一行需要自行修改
set apkname=com.a.standonthegiants
(echo run-as %apkname%
echo ./lib/android_server)|adb shell
pause
执行 start_apk.bat
启动真机上的目标程序。
@echo off
rem 下面一行需要自行修改
set apkname=com.a.standonthegiants
adb devices
adb shell am start -D -n %apkname%/.MainActivity
ping localhost -n 2 >nul
start /b "" adb jdwp > pid.txt
ping localhost -n 2 >nul
set /p pid=<pid.txt
echo pid:%pid%
adb forward tcp:23946 tcp:23946
adb forward tcp:5005 jdwp:%pid%
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=5005
pause
程序启动后使用 IDA
的 Remote Android
调试器 Attach
到 localhost:23946
即可。
参考文章
https://bbs.pediy.com/thread-256848.htm
https://ctf-wiki.github.io/ctf-wiki/android/basic_reverse/dynamic/ida_native_debug/