已经快4年没使用jeb动态调试apk了,前一段时间被徒弟问到怎么动态调试apk的dex文件时,由于没记录jeb的动态调试方法,只能给他eclipse的动态调试作为参考。
Android逆向之动态方式破解apk前奏篇(Eclipse动态调试smail源码)
上面的方法对新人来说太不友好,所以还是把使用jeb的动态调试的方法写一下,以便帮到更多的人。
准备工具
首先你得有jeb工具,吾爱破解,看雪都能搜索到,我这里就不提供了。
准备调试应用
反编译修改AndroidManifest.xml中的debug属性
即修改AndroidManifest.xml中的android:debuggable="true"
如:
修改完成后回编译成标准apk
安装调试应用
adb install xxx.apk
JEB反编译
将要动态调试的apk用JEB打开
标记断点
找到你要debug的代码,打上断点。
标记方法是在Smali中鼠标单击选中行后,快捷键Ctrl+B可以标记和取消断点。
开始调试
使用以下命令运行程序
adb shell am start -D -n 包名/入口activity名
如我这里要调试的:
adb shell am start -D -n com.tomes.sharefile/com.tomes.MainActivity
这时你的手机会弹出一个系统提示框waiting for debugger
点击JEB菜单栏上调试按钮开始调试
点击调试按钮,会弹出Attach确定弹窗。
Machines/Devices选中要调试设备,
Processes选中要调试的应用对应的进程,即Flags为D的进程(可通过点击Flags 排序的方式快速选中)。
注意:
当attach弹出Could not attach to target提示的时候。解决方法如下:
eclipse/android studio/ddms,ddms导致jeb不能附加指定的应用。 所以粗暴点,关闭eclipse/android studio/ddms;
点击Attach按钮后成功调试。
进入调试状态,VM会变成绿色
断点条件触发后进入断点,在VM/Locals中可以查看变量值,F6可以单步。
对于不熟悉smali的同学来说,可以直接按快捷键Q或者使用右键菜单的Decompile在smali和java代码里来回切换,方便查看