Android NDK 在 r11 之后去掉了 toolchain 中的 gdb 工具,无奈下载了 r10 的 arm-linux-androideabi-gdb 和 gdbserver。

把 arm-linux-androideabi-gdb 放在 ndk 的 toolchains/arm-linux-androideabi-4.9/prebuilt/*platform*-x86_64/bin 目录下,把 gdbserver push 到手机的 system/bin 下并添加执行权限。

本次测试用 crackme 来自 0CTF 2015 Quals : simple.apk

在手机上打开 app 并执行:

1
2
ps | grep easy
gdbserver :1234 --attach 7967 // 1234 为端口,可随意指定;7967为 pid。

在电脑端执行:

1
2
3
adb forward tcp:1234 tcp:1234
arm-linux-androideabi-gdb
(gdb) target remote :1234

此时调试算是已经开始了。

扩展

为了找到该 crackme 的 flag,我们可以接着执行:

1
(gdb) gcore

等 gore dump 出内存后,在电脑端的当前目录下使用strings命令:

1
strings core.7967 | grep 0CTF

即可得到 flag ,省去了静态分析和动态调试的繁琐。