美文网首页
Android 反编译与动态调试

Android 反编译与动态调试

作者: Parallel_Lines | 来源:发表于2024-02-14 18:23 被阅读0次

0. 目标

反编译后对 Smali 源码执行打点调试。

1. 实现流程

1.1 重新打包可调试的 APK

  1. 使用 Apktool 反编译,得到源码文件夹;
apktool d decompilerdemo.apk
反编译后的文件夹
  1. 找到文件夹下的 AndroidManifest.xml,设置 debuggable = true;


    修改 AndroidManifest
  2. 使用 Apktool 重新打包成 Apk,签名并安装。

// 重新打包成 Apk
apktool b decompilerdemo -o decompilerdemo_unsigned.apk
// 签名
/Users/你的文件夹名/Library/Android/sdk/build-tools/版本号/apksigner sign -verbose --ks 你的签名文件.jks --v1-signing-enabled true --v2-signing-enabled true --ks-pass pass:签名密码 --ks-key-alias key0 --out decompilerdemo_new.apk decompilerdemo_unsigned.apk
新的 Apk

1.2 配置 JDB 调试器

  1. 下载 IntelliJ IDEA

新版 Android Studio 不支持 JDB 调试器。

  1. 该网址 下载 smalidea-0.05.zip;
  2. IntelliJ IDEA 选择 Settings -> Plugins,点击设置按钮 -> Install Plugin from Disk,选择上一步的 zip 进行安装,安装完毕后重启;

1.3 使用 JDB 进行动态调试

  1. 将要调试的应用(例子中为 decompilerdemo_new.apk)使用 Apktool 反编译,得到源码文件夹;
apktool d decompilerdemo_new.apk
反编译后的文件夹
  1. 使用 IntelliJ IDEA 打开该文件夹,打开后,右击 Smali 目录,选择 Mark Directory as -> Resources Root,将 Smali 目录标记为资源根目录。
  2. 配置调试 Configuration。点击 Edit Configurations 打开 Run/Debug Configurations 选项卡,点击 + 号新建一个 Remote JVM Debug。名字可自定,其它配置保留默认亦可,点击 Apply 保存配置。
  3. 使用 ADB 链接设备并以调试模式启动 Apk,并转发至配置端口 5005。
// 1. 调试模式启动 Apk
adb shell am start -D -n "com.dixon.app.decompilerdemo/com.dixon.app.decompilerdemo.MainActivity"

// 2. 获取进程 PID
adb shell "ps -ef | grep com.dixon.app.decompilerdemo"
// 例如结果为:
// u0_a139       8237   843 1 15:27:55 ?     00:00:00 com.dixon.app.decompilerdemo
// 则 8237 为我们所需的端口号

// 3. 转发至配置端口
adb forward tcp:5005 jdwp:第二步获取的端口号
  1. 设置断点,点击调试按钮开始动态调试。


    打点

2. 总结

动态调试支持反编译后打点,可以进一步帮助我们分析逻辑走向,但是需要对 Smali 文件有一定的阅读能力。

相关文章

网友评论

      本文标题:Android 反编译与动态调试

      本文链接:https://www.haomeiwen.com/subject/ucfeadtx.html