利用IDA6.6进行apk dex代码动态调试

网上公开IDA6.6已经有一段时间,这个版本有个好处就是能够动态调试java代码。正好如今须要动态调试,因此顺便练习一下。html

根据android的官方文档,若是要调试一个apk里面的dex代码,必须知足如下两个条件中的任何一个:java

1.apk中的AndroidManifest.xml文件中的Application标签包含属性android:debuggable=”true”android

2./default.prop中ro.debuggable的值为1windows

因为通常软件发布时都会把android:debuggable设置为false,因此要达成条件1须要反编译原apk,修改AndroidManifest.xml并进行从新打包,这样不只麻烦,并且不少软件进行了加固,要破解很难。因此想办法知足第2个条件是个一劳永逸的办法。工具

因为default.prop是保存在boot.img的ramdisk中,这部分每次从新启动都会从新从rom中加载,因此要到目的必须修改boot.img中的ramdisk并从新刷到设备中。修改步骤以下:网站

1.从Google官方网站下载到boot.img

2.使用工具(abootimg,gunzip, cpio)把boot.img彻底解开,获取到default.prop

3.修改default.prop

4.把修改后的文件从新打包成boot_new.img

5.使用fastboot工具把boot_new.img刷入设备(fastboot flash boot boot_new.img)

具体可参考:http://www.cnblogs.com/goodhacker/p/4106139.htmlspa

因为咱们这篇文章的重点是如何动态调试dex代码,因此咱们就假设该dex是可调试的。debug

1.用ida打开apk文件,选择dex文件进行加载
2.设置debugger选项,Debugger->Debugger options->Set specific options,按如图1所示进行设置(adb路径也要设置),而后一路肯定返回
3.找到要下断点的位置,光标移到要下断点的那一行,按f2下断点
4.手机开启调试选项,链接到电脑,运行apk
5.选中IDA pro窗口,按f9运行,若是出现如图2的画面,就说明设置成功,能够进行动态调试了。

图1 调试设置 调试

图2 调试界面code

如何查看寄存器的值呢?选中ida->debugger->use source level debugger,而后点击ida->debugger->debugger windows->locals打开本地变量窗口,就能够查看寄存器的值了。

若是变量的值出现“Bad type”的状况,以下图所示:

能够按下述步骤解决:

点击“Debugger->Debugger windows->Watch view”,会弹出“Watch view”窗口:

而后在Watch view窗口中右击,选择“Add watch”:

而后在弹出的窗口中本身为变量添加一个类型,相似这样:

(Object*)v0
(String)v0
(char*)v0
(int)v0

假设咱们要设置v0寄存器值的类型为String类型,就在在弹出的对话框中输入(String)v0,点击“OK”就能够在Watch view窗口中看到变量值了。

注意:若是运行过程当中一直显示如图3所示窗口,就须要关注一下你的手机屏幕,看是不是须要与用户进行交互了。

图3

参考文章:http://www.joenchen.com/archives/1196

相关文章
相关标签/搜索