IDA 6.6新添加了对dex文件的调试支持,由于工作原因,我第一时间拿到了这个版本,下面就是针对这个功能的一些简单体验。
IDA对这个新功能提供了一个PDF文档进行说明,按照教程一步步来就可以完成对例子程序的调试,我这里选sina微博作例子简单讲一下实际调试的流程。
准备工作
根据android的官方文档,如果要调试一个App里面的dex代码,必须满足以下两个条件中的任何一个:
1) App的AndroidManifest.xml中Application标签包含属性android:debuggable=true
2) /default.prop中ro.debuggable的值为1
由于正常的软件发布时都不会把android:debuggable设置为true,所以要达成条件1)需要对app进行重新打包,这不仅每次分析一个App都重复操作,而且很多软件会对自身进行校验,重打包后执行会被检测到,所以想办法满足第2)个条件是个一劳永逸的办法,我实际使用的方法就是满足第二个条件。由于default.prop是保存在boot.img的ramdisk中,这部分每次重新启动都会重新从rom中加载,所以要到目的必须修改boot.img中的ramdisk并重新刷到设备中。我测试使用的设备为Nexus 7,修改步骤如下:
a) 从Google官方网站下载到boot.img,
b) 使用工具(abootimg,gunzip, cpio)把boot.img完全解开,获取到default.prop
c) 修改default.prop
d) 把修改后的文件重新打包成boot_new.img
e) 使用fastboot工具把boot_new.img刷入设备(fastboot flash boot boot_new.img)
图1 修改后的default.prop内容
实际调试
解压缩sina微博的apk,把dex文件拖到ida中进行分析(非常慢,文件会到6G多,估计IDA的dex加载器有BUG),分析完成后按照IDA的教程对Debugger Options进行设置。
图2 Debugger Options设置
设置后找到App的入口Activity——.SplashActivity, 在SplashActivity_OnCreate方法设置断点.
点击执行或者按F9即可开始运行App,由于在入口Activity的OnCreate方法设置了断点,所以App执行后就会停在刚才设置的断点处等待用户操作。
IDA对这个新功能提供了一个PDF文档进行说明,按照教程一步步来就可以完成对例子程序的调试,我这里选sina微博作例子简单讲一下实际调试的流程。
准备工作
根据android的官方文档,如果要调试一个App里面的dex代码,必须满足以下两个条件中的任何一个:
1) App的AndroidManifest.xml中Application标签包含属性android:debuggable=true
2) /default.prop中ro.debuggable的值为1
由于正常的软件发布时都不会把android:debuggable设置为true,所以要达成条件1)需要对app进行重新打包,这不仅每次分析一个App都重复操作,而且很多软件会对自身进行校验,重打包后执行会被检测到,所以想办法满足第2)个条件是个一劳永逸的办法,我实际使用的方法就是满足第二个条件。由于default.prop是保存在boot.img的ramdisk中,这部分每次重新启动都会重新从rom中加载,所以要到目的必须修改boot.img中的ramdisk并重新刷到设备中。我测试使用的设备为Nexus 7,修改步骤如下:
a) 从Google官方网站下载到boot.img,
b) 使用工具(abootimg,gunzip, cpio)把boot.img完全解开,获取到default.prop
c) 修改default.prop
d) 把修改后的文件重新打包成boot_new.img
e) 使用fastboot工具把boot_new.img刷入设备(fastboot flash boot boot_new.img)
图1 修改后的default.prop内容
解压缩sina微博的apk,把dex文件拖到ida中进行分析(非常慢,文件会到6G多,估计IDA的dex加载器有BUG),分析完成后按照IDA的教程对Debugger Options进行设置。
图2 Debugger Options设置
设置后找到App的入口Activity——.SplashActivity, 在SplashActivity_OnCreate方法设置断点.
点击执行或者按F9即可开始运行App,由于在入口Activity的OnCreate方法设置了断点,所以App执行后就会停在刚才设置的断点处等待用户操作。