一次完整的IDA动态调试dex过程

使用到的工具

IDA6.8,adb,apktool,auto-sign

原料:Crackme.apk文件


阶段一——反编译重打包重签名

使用apktool反编译Crackme.apk

用法 apktool.bat d <file.apk>

一次完整的IDA动态调试dex过程

查看一下AndroidManifest.xml文件,确认一下是否是android:debuggable="true",没有的话加上在<application >中加上,

此时如果处于其他原因需要修改smali文件的话,找到对应smali文件修改。

这个时候,还有一件重要的事需要做,保存下dex文件,在build/apk/下。

接来下还是使用apktool进行重打包,

一次完整的IDA动态调试dex过程

在解压出的Crackme文件夹下会存在一个dist文件夹,里面放着打包的好apk。

打包好后需要对它签名才能最终安装到我们的设备上,这里使用auto-sign这个工具(推荐使用,因为此前尝试过使用过jarsigner命令签名,

但签名后的文件不能正常安装,估计 是还有其他签名后的步骤未进行,而auto-sign能一步到位)

把apk名字改成update.zip

auto-sign用法:


java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip update_signed.zip

签名好之后改下后缀名就好了。

阶段二——使用adb

首先使用adb查看设备是否能够连接上,

使用adb devices查看:

一次完整的IDA动态调试dex过程

设备正常,然后就可以把我们签名好的apk程序安装到手机上,

使用

一次完整的IDA动态调试dex过程

完成后,进行下一步,接下来需要把ida安装路径下的\dbgsrv\android_server推到我们的设备上,

使用命令:

一次完整的IDA动态调试dex过程

之后使用adb shell启动shell终端,

使用su切换权限,

cd /data/local/tmp进入到android_server文件目录,

chmod 755 android_server

./android_server 运行程序

一次完整的IDA动态调试dex过程

这时我们打开另一个adb窗口进行端口转发

一次完整的IDA动态调试dex过程

阶段三——配置IDA,加载dex

dex拖到IDA中打开,在IDA菜单中选择 【Debugger】-> 【Debugger Options…】-> 【set specific options】添加以下选项:

一次完整的IDA动态调试dex过程

Debugger】-> 【Process Options…】的配置如图

一次完整的IDA动态调试dex过程

接下来点击IDA上的启动按钮,可以看到手机端的程序运行起来了,ida也发生了变化

一次完整的IDA动态调试dex过程

就可以下断点,查看变量的值,开始调试之旅了。

如果遇到“bad type”,可以使用Watch View窗口,添加变量,设置类型。

例如:

(Object*)v0

(String)v0

(char*)v0

(int)v0