如何使用JEB进行动态调试?
⚠️法律提醒
一、准备工作(必须)
1. 环境
电脑:Windows/macOS(本文以 Windows 为例)
设备:** 模拟器(推荐)** 或 Root 真机
工具:
JEB(2.2+,建议最新版)
ADB(电脑能正常
adb devices)
2. APK 必须可调试
解包 APK → 修改
AndroidManifest.xml:
<application android:debuggable="true" ...>
模拟器 / 已 Root 机用 mprop 临时开启全局调试(不用改 APK)。
3. 安装并启动 APK
模拟器 / 真机安装目标 APK
记下包名(例如:
com.example.app)
二、JEB 加载 APK + 下断点
- 打开 JEB → 拖入 APK

- 展开 → 双击
Bytecode→ 找到目标类 / 方法
- Smali 或 Java 代码行按 Ctrl+B 下断点(比如会员判断、登录校验、支付逻辑)


三、调试模式启动 APP(关键!)
1. 查包名和 Activity
adb shell pm list packages -f | findstr 目标关键词
com.example.app2. 调试模式启动
adb shell am start -D -S -n com.example.app/.MainActivity
-D:debug 模式手机 / 模拟器会弹出 “等待调试器” 界面jeb.io
四、JEB 附加调试
- JEB 菜单:Debugger → Start...(或虫子图标)

- 弹出窗口:
选择设备(模拟器 / 真机)
筛选进程(输入包名)
勾选 Suspend all threads(建议)
点 Attach


- 附加成功:底部 VM 变绿,断点生效

五、开始动态调试(常用操作)
窗口说明
VM/Locals:看寄存器、局部变量(关键!)
Threads:线程
Breakpoints:断点列表
常用快捷键
F6:单步跳过(不进函数)
F7:单步进入(进函数)
F8:运行到下一个断点
Ctrl+B:开关断点
Q:Smali ↔ Java 伪代码切换
调试流程示例
断点停在会员判断处
看 Locals 里的变量:
isVip = 0手动改内存值:
isVip = 1F8 继续运行 → 成功绕过会员限制
六、常见问题 & 解决
1. 无法附加:process not debuggable
确认
android:debuggable="true"或用 mprop 全局开启调试
2. 附加后立即断开
应用有反调试检测(检测调试器、TracerPid 等)
解决:先绕过反调试(Frida 或修改判断)
3. 断点不触发
断点下在了未执行的代码路径
或 APP 加壳(DEX 被加密,JEB 看不到真正代码)→ 先脱壳
4. 看不到 Java 代码,只有 Smali
正常,直接在 Smali 下断点调试即可;用 Q 切换伪代码
七、建议学习路线
先拿自己写的小 APP 练手(无壳、可调试)
掌握:断点、单步、看变量、改内存
再尝试简单无壳商用 APP(仅限安全研究)







