Android逆向系列之动态调试3–Eclipse调试apk

Android逆向系列之动态调试1–入门篇 
Android逆向系列之动态调试2–Smali注入
Android逆向系列之动态调试3–Eclipse调试apk
Android逆向系列之动态调试4–IDA调试dex
Android逆向系列之动态调试5–代码注入(JDB调试)
Android逆向系列之动态调试6–gdb调试
Android逆向系列之动态调试7–IDA调试so文件(上)
Android逆向系列之动态调试8–IDA调试so文件(下)

一、反编译APK
这里反编译的时候要记得带上 -d参数,以便动态调试
apktool d -d demo.apk

二、添加属性
在AndroidManifest.xml的application添加属性:android:debuggable=”true”
2

三、添加调试语句
在主Activity的OnCreate函数下一行添加:
a=0;// invoke-static {},Landroid/os/Debug;->waitForDebugger()V

四、重新打包
重新打包生成apk并签名(需卸载原来的apk)
apktool b -d out -o 3.apk (或apktool b -d out)
安装后打开apk,发现是空白,这里是进入了调试状态,并不是出现错误

五、打开eclipse
打开eclipse–>新建java project(第一次打开在project中找)–>更改默认路径为 out目录–>选择smali–>finished
3

六、设置断点
设置断点(可在OnCreate函数或OnClick函数等的下一语句下断点),这里需要首先分析源代码,找出自己想要下断点的地方,快捷键Ctrl+shift+B

七、设置调试端口
设置调试端口(可用DDMS查看端口),run-debug configuration->remote debug application–>可右键新建或者用原来的mainactivity,设置端口号–>点击Apply–>debug

问题分析:如果出现 Failed to connect to remote VM. Connection refused. Connection refused: connect
解决方法:尝试在模拟器中kill 调试apk的进程,然后重新打开,重新打开ddms,然后填写对应端口号,这里的ddms不允许关闭。

转载自http://www.tasfa.cn/index.php/2016/05/24/eclipse_apk/