基于Smalidea+Android studio动态调试apk
1.准备工具
-
smalidea-0.05.zip 插件
用途:动态调试apk
-
Android studio 3.6.1(4.0以上目前与smalidea不兼容)
最新版本下载地址:https://developer.android.google.cn/studio#downloads
其他版本下载地址:https://www.androiddevtools.cn/
-
安卓模拟器(这里用的逍遥模拟器,其他基本相同)
-
APKtool
用途:反编译apk
-
mprop
用途:在不修改app代码前提下进行动态调试
-
以上所有安装包以打包至百度网盘(内含一个样例apk提供学习使用):https://pan.baidu.com/s/1XsMANMxzdxlrQAnEjIedxQ
提取密码:zzkk
2.正式调试
2.1 apk反编译
-
对于apk文件的获取这里不过多叙述,可以使用电脑直接从官网下载,也可以在模拟器中下载然后使用共享文件夹传到电脑端,百度网盘里有京东到家的apk提供学习。
-
把对应的apk文件放到随机文件中,这里直接放在apktool文件夹中
-
地址栏输入cmd,弹出命令行窗口运行语句,执行完毕会在apk所在目录生成反编译好的apk文件
apktool d base.apk - d后面跟apk文件地址,相对绝对路径都可
2.2 adb配置
- 将安卓 \sdk\platform-tools\adb.exe 的adb.exe复制到模拟器中的 \xyMobile\Microvirt\MEmu文件夹,对该文件夹下的adb.exe进行覆盖
2.3 Android Studio的使用
-
Android Studio打开刚才反编译后的文件夹
-
载入完毕后,右键根目录设置为Sources Root
-
导航栏FILE\Settings\Plugins引入smalidea插件,选择smalidea-0.05.zip,然后重启Android Studio
-
重启完毕使用adb指令连接安卓模拟器(如果前面AS及SDK配置好的话这里能直接在AS的Terminal使用adb指令,如果不能使用,需要重新配置好相应的SDK配置,请自行百度<as配置sdk>)
-
启动对应的安卓模拟器载入完毕后,然后在打开了刚才反编译目录的AS窗口中,点开Terminal命令框输入指令
adb devices
查看是否已经成功连接上安卓模拟器,如图已连接成功
如果没有显示有已连接列表,则先百度查询对应安卓模拟器的adb默认连接端口,然后输入指令
adb connect 127.0.0.1:端口号
参考端口列表:
模拟器名称 adb端口 夜神安卓模拟器 62001 逍遥安卓模拟器 21503 BlueStacks(蓝叠安卓模拟器) 5555 雷电安卓模拟器 5555 天天安卓模拟器 5037 网易MuMu(安卓模拟器) 7555 安卓模拟器大师 54001
重点!!!!以下操作请按照顺序来,不然可能出现看不到手机进程信息的情况
6.更改内存中ro.debugger的值,使得在不修改apk的前提下进行动态调试,操作如下:
-
将mprop文件(网盘中有)放置到安卓模拟器的/data/local/tmp目录下
-
在AS的Terminal命令框中输入指令,进入到安卓系统中(前提AS与模拟器已连接成功)
adb shell
7.进入到/data/local/tmp目录,运行命令
chmod 777 mprop
./mprop ro.debuggable 1
8.此时关闭AS,仅保留安卓模拟器
9.进入Android Studio主文件夹,进入子目录 \sdk\tools\,打开monitor.bat(AS3.0开始取消了monitor的内置模块,需要到sdk所在文件中启动)
10.重新打开AS并且仅仅打开当前反编译后app的项目
11.重复以上第五步操作,重新使用adb connect连接安卓模拟器,此时便能看到手机的进程信息
12.连接成功后使用模拟器打开对应app应用
2.4 断点动态调试
-
此时在安卓模拟器中打开目标app,在monitor.bat中找到对应的进程信息
此处的8620为目标端口号
-
返回AS,新增Remote
保存退出,debug运行。
- 由于apktool反编译出来为smali代码,因此最好使用其他能反编译成java代码的工具对照查看,本人一般使用jadx(网盘中有,直接运行.exe即可,前提是本地配置好jdk)。对照着查看目标代码,打好断点进行,操作app进行调试。
3.总结
至此已经完成了基于Smalidea+Android studio动态调试,记得目前AS4.1版本由于冲突问题不兼容smalidea插件,因此请使用AS4.1以下版本!