1. 下载 smalieda
- 下载地址:https://bitbucket.org/JesusFreke/smali/downloads/;
- 由于下载速度比较慢,也可使用百度网盘下载 smalidea-0.05.zip,链接:https://pan.baidu.com/s/1JzhhYEv_vKQdOmtcT9OkOA,提取码:4zj9;
- 注意:下载后不要解压;
2. 配置
- 打开 AndroidStudio,依次点击 File -> Settings -> Plugins;
- 如下图所示,点击 齿轮 图标,然后点击 Install Plugins from Disk;
- 在上面的文件保存路径下,找到 smalidea-0.05.zip 文件,点击导入;
- 如下图,表示导入成功。
3. 下断
- 将反编译后的 smali 文件导入 AndroidStudio,如果不知道如何将 apk 反编译成 smali,请参考我的另一篇文章 《安卓逆向:使用 apktool 将 apk 反编译成 smali 文件》;
- 打开 smali 代码,找到调试位置并打断点,如果知不知道如何查找代码位置,请参考我的另一篇文章《安卓逆向:jadx-gui 查找方法并在 Android Studio 中定位代码》;
4. 配置模拟器
- 打开 sdk 存放文件夹,在 platform-tools 路径下找到 adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll 三个文件,将三个文件 复制;
- 打开模拟器所在文件夹,找到上述三个文件,鼠标右键 黏贴,替换掉文件夹中的三个文件;
5. 连接模拟器
启动安卓模拟器,此处使用 雷电模拟器;
打开 cmd 命令行,进入 模拟器所在文件夹,使用 adb 连接调试安卓模拟器;
adb.exe connect 127.0.0.1:5555
-- 此处使用的 雷电 模拟器,端口号为 5555去,其他模拟器参考下表;
模拟器名称 ---- 端口号
逍遥游 ---- 21503
夜神 ---- 62001
海马玩 ---- 26944
网易mumu ---- 7555
天天 ---- 6555
BlueStacks ---- 5555
雷电 ---- 5555
天天安卓 ---- 5037
安卓模拟器大师 ---- 54001
Genymotion ---- 5555
5. 获取 app 的 packageName/ActivityName
- 使用 adb 安装 apk 文件到模拟器;
adb install apk文件的绝对路径 # 菜鸟注意:鼠标直接将 apk 文件拖至此处 cmd 命令行窗口即可添加 apk 绝对路径
在模拟器启动 app,进入准备调试的页面,此处我需要调试的验证码登录,如下图;
打开 cmd,输入下面命令获取 packageName/ActivityName
adb shell dumpsys activity activities
- 结果如下图,此处得到结果为 com.gotokeep.keep/.splash.SplashActivity;
6. debug 启动 app
- 使用 adb 以 debug 方式启动 apk;
adb shell am start -D -n packageName/ActivityName
- 注意此时模拟器页面的变化,获取 PID 进程号,如下图;
7. 配置端口转发
- 可选方法一:打开 DDMS,在 Name 找到 packageName 对应的一栏;
- 可选方法二:使用 adb forward 配置端口,注意:此方法个人感觉问题较多,不推荐使用;
adb forward tcp:8700 jdwp:PID进程号
-- 如下图表示配置成功;
-- 注意:如果遇到 cannot bind to 127.0.0.1:8700 报错,参考我的另一篇文章《安卓逆向:adb forward 转发端口遇到 cannot bind listener: cannot bind to 127.0.0.1:8700 报错》;
8. 添加模拟器端口号
- 依次点击 Add Configuration... -> + -> Remote;
- 在 Port 栏输入 8700;
9. 开始调试
- 在 AndroidStudio 进行调试;
- 如下图,调试开始后,断点被断下来;