使用反编译的项目进行调试
方法一(麻烦不建议用,不全请参考方法二):
-
步骤
-
apktool d -d 目标.apk -o 结果存放路径
-
修改Andriod.manifest文件,在application节点中添加 android:debuggable="true"(使用emeditor修改)
-
在入口点的类的onCreate方法中添加 invoke-static{},Landroid/os/Debug;->waitForDebugger()V(使用emeditor修改)
-
编译修改过的apk文件
-
方法二:
-
步骤
-
使用androidkiller反编译apk(如反编译失败,请看 androidkiller(二) 解决Android killer1.3.1反编译高版本apk卡死)
-
修改Andriod.manifest文件,在application节点中添加 android:debuggable="true"(使用emeditor修改)
-
在入口点的类的onCreate方法中添加(使用emeditor修改)
-
invoke-static{},Landroid/os/Debug;->waitForDebugger()V
-
-
-
androidkiller编译修改过的项目(android->编译->工具->apk签名(勾选签名成功后自动安装))。完成此步骤后debug app已安装,可调式的项目也已生成
-
如果编译失败请查看( androidkiller(三)解决编译高版本项目失败的问题)
-
-
copy编译后的项目,用于调试(cp AndroidKiller_v1.3.1\projects\app-release AndroidKiller_v1.3.1\projects\app-release_as -r 伪代码,各系统请自行操作)
-
使用android studio打开app-release_as
-
android studio新建remote调试配置(Run->Edit configurations->+->remote->修改名称)
-
-
调试程序方式启动app
-
adb shell am start -D -n com.example.ndk_onload/.MainActivity(com.example.ndk_onload为project的名称,.MainActivity为active的名称,可用AndroidManifest.xml中找到)
-
-
-
查看调试程序的远程端口号
-
adb shell ps | findstr "com.example.ndk_onload"
-
第二个值即为端口号
-
-
-
设置端口转发
-
adb forward tcp:5005 jdwp:29676
-
第一个值为本地端口,jdwp为手机app的端口
-
-
-
android studio项目调试(android studio需要安装smaliide插件,详见 smaliide安装)
-
在smali中下好断点
-
Run->Debug 'remote'
-
-
技巧:修改dex的伪代码
还有一篇不错的介绍:https://www.cnblogs.com/goodhacker/p/5592313.html