最近在逆向一个某工程性的APK文件,由于加了一些混淆和其他原因,需要动态调试理解一些关键代码,于是搭建了android studio调试环境。

APK的调试有很多方法,个人还是习惯Android Studio 配合JEB的伪代码来进行调试。

反编译

首先需要使用工具反编译apk。

Apktool

可以直接用Apktool反编译

1

也也可以通过Android Killer反编译(原理其实就是集成Apttool)

2

还可以使用 java -jar apktool.jar d MyApp.apk 命令调用apktool。

Android Studio3.x已经自带反编译,所以可以直接导入。

4

导入Android Studio

如果没用自AS自带的反编译,可以选择Import Project导入

3

一直选择“Next“。

插件安装

安装smaliidea插件,来对smali代码进行处理。

5

修改代码

AndroidManifest.xml文件中在application中改为true(如果没有添加上):

android:debuggable=”true”

6

设置Sources Root

在AndroidStudio工程中右键点击smali文件夹,设定Mark Directory as -> Sources Root

7

重新编译

如果之前改过代码,这步要重新编译签名程序。

java -jar apktool.jar b MyApp -o newMyApp.apk

启动DDMS

启动DDMS,在Android Studio 3.x可能在tools菜单找不到DDMS,可以直接在terninal 输入 monitor启动。

打开后可能会遇到

8

这个时候可以按照提示改下端口号。

9

如果改了还不行可以先启动monitor,再打开Android Studio即可。

配置调试

在AndroidStudio里面配置远程调试的选项,选择Run -> Edit Configurations

10

然后选择加号新建一个远程调试

11

然后进行配置

12

调试

配置完成后即可调试,直接在想调试的地方下断点。在DDMS中选择要调试的程序。

13

然后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