jadx是目前最常用的逆向反编译工具,其新出的功能动态调试,能调试smali代码(需要一定的smali代码阅读功底),实时获取apk中的寄存器值,针对一些复杂的代码,可以使用动态调试的方式帮助我们分析。相较于frida、xposed等hook工具,动态调试不需要设备root和安装各种调试工具,比较简单。
安装最新版的jadx:Release 1.4.7 · skylot/jadx (github.com)
1、先决条件
安卓设备开启usb调试,被调试的app 在manifest开启debuggabel = true。
2、调试
将待调试的apk安装在安卓手机上,且丢入jadx逆向分析。之后开启调试功能
点击启动adb服务,之后等待adb启动完成后点击刷新,出现usb设备,点击启动app,此时app进入待调试阶段。
app显示waiting for debugger
双击待调试的进程
可通过步入、跳过、运行等方式进行调试。
-
F2 设置/删除断点
-
F7 步入
-
F8 跨步跳过
-
Shift + F8 跳出去
-
F9 运行
若报错:jdwp handshake failed
是因为jdwp端口号的问题,可以看看8700端口是否被占用了,类似于Android stuido就会占用该端口。