前言

本来我也不想写这篇文章的,但我百度了各种坑后来得靠自己经验才得以解决。动态调试成功那一瞬间是真的很舒服才发现原来那么简单的事情被他们写的转载的那么复杂。所以今天我不得不写一个博客来描述此次动态调试的所有过程和方法以及遇到的坑。

工具准备

Apktool
AndroidStudio
DDMS
模拟器/手机
ADB
SmaliIdea.jar插件
工具下载

反编译APK

把APK反编译成Smali我这里有两种方法
第一种:用Apktool直接反编译
第二种:用dex2jar后再baksmali
这里因为多dex的原因我就用第一种,以抖音为例子

2.png

更改APK调试模式

反编译了Smali后还没完还得把APK更改为调试模式
这里我模拟器用的MT管理器更改的你们也可以用其他可以编辑编译后xml的软件更改。打开AndroidManiFest.xml文件在Application标签中任意添加一个属性
android:debuggable="true"
然后保存重新签名安装,或者如果手机破解了签名验证的可以直接安装
3.png

以调试的方式打开APK

这里我以夜神模拟器为例子

1
2
3
4
5
6
7
8
9
10
11
#首先ADB连接模拟器
adb connect 127.0.0.1:62001

#进入shell模式
adb shell

#可能需要获取root
su

#开启打开APK
am start -D -n 包名/Activity

ADB可能连接不上是因为5037端口被占用的原因,这里可以添加一个环境变量ANDROID_ADB_SERVER_PORT来设置ADB的端口

安装SmaliIdea插件

在上面的连接下载smali后打开Androidstudio的Settings->Plugins然后如图进行安装
8.png
9.png
在高版本的AS中自带了一个Smali插件我们需要手动修改一下才能使用我们安装的插件
10.png
11.png

动态调试方式一 ——转发调试

首先用ps和grep命令找到我们软件的进程id,这里要注意先以调试模式启动APK后才能获取到进程
4.png
获取后这里开始进行TCP转发
adb forward tcp:8762 jdwp:进程id
这里的8762记住待会我们要用到
5.png
如图就是转发成功,成功后挂后台即可
打开AS导入我们刚刚反编译的Smali,然后如图操作
6.png
7.png
12.png
13.png
14.png
15.png

动态调试方式二 ——DDMS调试

在AndroidSDK的tools目录中有一个monitor.bat双击即可打开,一样的需要先连接ADB才能识别出设备
16.png
17.png
18.png
19.png

调试效果

20.png