IDEA 动态调试Smali代码

逆向方式有多种:静态、动态, 工具也很多:JEB、IDA、IDEA/AndroidStudio,调试内容:Smali、So库。

本文介绍IDEA动态调试Smali方式。

获取Smali文件

用Apktool反编译获取Smali文件,也可使用集成工具AndroidKiller反编译apk。

  1. Apktool 在jar和apk所在目录使用命令行 apktool d ***.apk -o Project,即反编译到Project目录。
  2. AndroidKiller 直接将apk拖进主界面即可,反编译后结构:
IDEA 动态调试Smali代码_第1张图片
killer-project-dir.png

生成可调式APK

  1. AndroidManifest.xml中添加android:debuggable="true"
  2. 在入口Activity的onCreate方法开始处添加android.os.Debug.waitForDebugger()
    对应的smali代码为:invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
    IDEA 动态调试Smali代码_第2张图片
    onCreate.png
  3. 重新打包。
  • Apktool: b -d Project -o debug.apk
  • AndroidKiller: 菜单栏 Android -> 编译
  1. 安装生成apk。

IDEA 导入Project

  1. 导入反编译项目:Import Project,选择Project目录后将反编译文件导入到IDEA。
  2. 在目标Smali文件打上断点。


    IDEA 动态调试Smali代码_第3张图片
    breakpoint.png

IDEA的smalidea插件用0.0.3断点进不去,升级至0.0.5后调试成功。
smalidea下载地址


调试环境配置

  1. 运行程序,手机会显示白屏或等待调试界面。
  2. 打开DDMS,目录\sdk\tools下运行monitor.bat,DDMS出现程序待调试状态。
    ** 红色Debug表示此进程正等待调试,15745为pid/进程ID,8600为此进程的远程机器调试端口号,8700为通用备用端口号**。


    ddms.png
  3. 配置远程调试选项,
    点击菜单栏** Run ,选择 Edit Configurations ,点击 ** + ** 选择 Remote **。

** 配置远程调试选项 **

Host:localhost
Port:8600
调试模式:Attach
项目: 或 Project

IDEA 动态调试Smali代码_第4张图片
remote-debug.png

远程调试

点击Debug开始远程调试。

debug-start.png

开始调试后,DDMS中Debug标志变成绿色,表示已经成功连接远程调试服务端。
Console中也有成功连接输入Connected to the target VM, address: 'localhost:8600', transport: 'socket'

ddms-debuged.png

然后触发断点条件后,就会进入断点。


IDEA 动态调试Smali代码_第5张图片
breakpoint-checkin.png

剩下的就跟平时开发断点调试一样。


相关推荐:
JEB动态调试apk
AndroidStudio 动态调试Smali代码


参考:

使用IDEA动态调试smali代码

你可能感兴趣的:(IDEA 动态调试Smali代码)