本帖最后由 rel 于 2015-9-17 00:07 编辑
今天突然想看看IDA6.6调试Dex到底啥样,没想到一路的坑。。。谢谢热心的@LAI。本来没啥大的价值来分享,但是想了想自己遇到的坑觉的还是分享一下比较好,省的以后有人跟我一样心血来潮时掉坑里。
再说一句:百度确实不如google靠谱!!!
使用IDA调试Dex 调试IDA需要满足一下两个条件的任何一条 1) App的AndroidManifest.xml中Application标签包含属性android:debuggable=true 2) /default.prop中ro.debuggable的值为1 一般正常的软件发布时都不会把android:debuggable设置为true,所以要达成条件1)需要对app进行重新打包。这个方法简单但容易被检测。可以使用第二种,具体方法参见具体可参考:http://www.cnblogs.com/goodhacker/p/4106139.html
开始调试:(这里网上资料一大把) 1.用ida打开apk文件,选择dex文件进行加载 2.设置debugger选项,Debugger->Debuggeroptions->Set specific options,按如图1所示进行设置,然后一路确定返回 3.找到要下断点的位置,光标移到要下断点的那一行,按f2下断点 4.手机开启调试选项,连接到电脑,运行apk 5.选中IDA pro窗口,按f9运行,如果出现下图的画面,就说明设置成功,可以进行动态调试了。在IDA中配置 至此我们就可以进行调试了,但是我发现无法查看变量的值。我们可以通过 点击Debugger->Debugger windows->Locals来打开本地变量窗口效果如下图,但是需要提前这时选中Debugger->Use source level debugger,否则或弹出警告并且locals里什么也看不到。 此时我们发现locals里寄存器是Bad type。这表示类型不对,我们可以通过Debugger->Debugger windows->watch view 来查看v0里的内容。具体方法如下 右键AddWatch或直接按Insert键,插入一个寄存器v0,注意大小写; 插入时我们需要指定变量的类型,如(String)v1,(char *)v2,(int)v3等形式类似于C++里的类型强转。这样我们才可以看到寄存器的值。
|