最近在逆向一个某工程性的APK文件,由于加了一些混淆和其他原因,需要动态调试理解一些关键代码,于是搭建了android studio调试环境。
APK的调试有很多方法,个人还是习惯Android Studio 配合JEB的伪代码来进行调试。
反编译
首先需要使用工具反编译apk。
Apktool
可以直接用Apktool反编译
也也可以通过Android Killer反编译(原理其实就是集成Apttool)
还可以使用 java -jar apktool.jar d MyApp.apk 命令调用apktool。
Android Studio3.x已经自带反编译,所以可以直接导入。
导入Android Studio
如果没用自AS自带的反编译,可以选择Import Project导入
一直选择“Next“。
插件安装
安装smaliidea插件,来对smali代码进行处理。
修改代码
AndroidManifest.xml文件中在application中改为true(如果没有添加上):
android:debuggable=”true”
设置Sources Root
在AndroidStudio工程中右键点击smali文件夹,设定Mark Directory as -> Sources Root
重新编译
如果之前改过代码,这步要重新编译签名程序。
java -jar apktool.jar b MyApp -o newMyApp.apk
启动DDMS
启动DDMS,在Android Studio 3.x可能在tools菜单找不到DDMS,可以直接在terninal 输入 monitor启动。
打开后可能会遇到
这个时候可以按照提示改下端口号。
如果改了还不行可以先启动monitor,再打开Android Studio即可。
配置调试
在AndroidStudio里面配置远程调试的选项,选择Run -> Edit Configurations
然后选择加号新建一个远程调试
然后进行配置
调试
配置完成后即可调试,直接在想调试的地方下断点。在DDMS中选择要调试的程序。
然后Run->Debug ‘name’来启动调试。
模拟器连接
如果通过模拟器来调试可以参考模拟器连接端口
- 夜神模拟器:adb connect 127.0.0.1:62001
- 逍遥安卓模拟器:adb connect 127.0.0.1:21503
- 天天模拟器:adb connect 127.0.0.1:6555
- 海马玩模拟器:adb connect 127.0.0.1:53001
- 网易MUMU模拟器:adb connect 127.0.0.1:7555
- 原生模拟器:adb connect (你的IP地址):5555