Android安全–使用Eclipse调试反编译的smali

 

 

在上面一篇中已经讲到如何对apk进行反编译得到smali代码。但是有的时候会有这样的需求,在看smali代码的时候,不确定自己写的伪代码逻辑是不是正确的,特别是在逆向算法的时候。所以就会想到怎么使用Eclipse对smali进行调试。

1.反编译

首先反编译需要分析的apk文件,如下:

image

这里注意使用-d参数,生成的smali文件才是以java结尾的,才能被eclipse识别。

2.设置允许调试

找到AndroidManifest.xml文件,在application节点中设置属性android:debuggable=”true”。

image

并找到该app启动的第一个Activity。找到启动Activity的onCreate函数。

3.添加调试等待代码

在启动Activity的onCreate函数的位置添加等待调试的代码,当Activity启动的时候就会自动停在onCreate的位置等待调试器调试。

invoke-static {}, Landroid/os/Debug;->waitForDebugger()V

image

保持行前代码一致。

4.重新打包,签名。

image

image

5.安装,启动

安装新签名apk到设备。

adb install new.apk

然后启动apk,会发现apk启动后停在一个黑屏界面,也就是正在等待调试器附加的状态。

6.将java文件导入eclipse项目

删除out目录下面的build目录,新建eclipse Java Project项目,Use default location选项去掉,Location选择out文件夹,然后Next,把smali文件夹设为Source Folder,然后Finish。

image

 

在启动Activity onCreate方法后面下一个断点。

image

7.开始调试

打开eclipse的DDMS,可以看到刚刚打开的应用程序正在等待调试状态。

image

其中8684即为调试该应用程序的端口。

 

① Run -> Debug -> Debug Configurations
② 双击Remote Java Application,Host处默认localhost就行,Port填第10步得到的8684,然后Apply -> Debug。

image

注意上面的project要是刚刚新建的Java Project,否则不能正确关联smali代码!!!

 

然后Eclisep会自动进入调试模式,并停在我们下断点的地方,还可以看到变量的值是多少,是不是方便多了!

 

image

 

欢迎入群交流~~~     群号:191212593

本文链接:http://www.alonemonkey.com/eclipse-debug-smali.html