
Dexcalibur 是一个专注于自动化插桩的 Android 逆向工程平台。其特殊之处在于利用动态分析来改进静态分析启发式方法。旨在自动化与动态插桩相关的繁琐任务,例如:
想分享一些内容或需要帮助?加入我们的官方聊天群:
Telegram —— 获取回复最快的方式
官方文档可在此处获取:网站(正在建设中)
在此查看最新动态:http://docs.dexcalibur.org/News.html
观看 Dexcalibur 演示视频:演示:不到 1 分钟钩取 61 个方法?没问题。(youtube)
贡献力量!
不要犹豫!有几种方式可以贡献力量:
前往 安装文档
替代方案:使用 Docker
adb(以及合适的 Android 模拟器)docker-compose build android-dexcaliburdocker run --rm -it --net=host -v /tmp/dexcalibur:/shared -p 8000:8000 dexcalibur:2023.01 /bin/bash对于 Linux 和 MacOS
NPM 安装:如果 Dexcalibur 已通过 NPM(-g 选项)全局安装,则在终端运行 $ dexcalibur 即可启动;否则,可在终端中运行 $ node $(node root -g dexcalibur)/dexcalibur/dexcalibur.js。
从源码安装:在 dexcalibur 文件夹中,运行 $ dexcalibur 或 $ node dexcalibur.js。
对于 Windows
NPM 安装:即使 Dexcalibur 已通过 NPM(-g 选项)全局安装,也必须在终端中运行以下命令来启动:node <NPM_ROOT>/dexcalibur/dexcalibur.js。
从源码安装:在 dexcalibur 文件夹中,在终端内运行命令 node dexcalibur.js。
你正在使用 Dexcalibur 的旧版本?
按照全新安装的步骤操作,当需要输入工作空间路径时,输入当前工作空间位置即可。
只需执行:
$ npm install -g dexcalibur
现有配置和工作空间将自动检测。
以下截图展示了运行时 xrefs 的自动更新。


实际上,最大的限制是 Dexcalibur 无法生成针对本地函数(在 JNI 库中)的钩子源代码。不过,你可以通过编辑钩子手动声明一个 Frida 的 Interceptor。
鉴于 Dexcalibur 目前(暂时)不提供分析本地部分(如 JNI 库或 JNA)的功能,以下仅详细说明与 Java 部分相关的功能与限制。
分析精度取决于分析早期阶段所使用的 Android API 镜像的完整程度。这意味着,如果你使用从 Android SDK 的 android.jar 生成的 DEX 文件,某些对 Android Java API 内部方法、字段或类的引用可能会缺失。如果从实际运行目标 Android 版本的实体设备中提取的 "boot.oat" 文件开始分析,会获得更好的结果。
TODO:编写文字
TODO:编写文字
被跟踪的行为
参与“运行 smali (VM)”操作的静态分析器能够发现并接受,但会跟踪以下行为:
实际上,目前不支持此类无效指令的处理程序/监听器,但会跟踪并呈现事件。
Dexcalibur IR
该虚拟机产生一种自定义的简化中间表示(IR),仅用于帮助分析人员进行分析。
根据调用栈深度和配置的值,IR 可以包含或不包含被调用函数中执行的指令。如果执行进入 try 块并继续返回,但从未执行 catch,则不会呈现 catch 块。实际上,Dexcalibur IR 的目的是仅呈现 VM 上下文中“已执行的内容”或“根据某些符号的值可能被执行的内容”。
Dexcalibur IR 通过移除无用的 goto 和不透明谓词,帮助读取清理后的字节码版本。Dexcalibur IR 可以通过虚拟机在 2 个简化级别生成:
第一级 IR,如果你不信任第二级 IR,可以使用它:
第二级:
Android API 模拟
TODO
详细说明
Smali 虚拟机遵循以下步骤:
虚拟机如何处理 invoke-* 指令?
清单分析(有限)
在首次运行之前,会解析应用程序的 Android 清单。实际上,在此阶段会检测到清单中的异常,例如不安全的配置。
Android 清单解析的唯一目的是为其他类型的分析器提供数据。
权限分析
从清单中提取的每个权限都会被列出、识别,并与目标 Android API 版本的 Android 规范进行比较。
Dexcalibur 仅在部分情况下提供权限用途描述、最低 Android API 版本等信息。
Activity 分析
Provider 分析
Service 分析
Receiver 分析
网络监控
Intent 监控
文件访问监控
找不到多用户菜单?没问题,虽然没有菜单,但可以实现最基本的协作工作。
Dexcalibur 运行一个 Web 服务器。因此,如果多个人位于此 Web 服务器的同一网络,并且主机防火墙配置正确,你们就可以多人同时处理同一个 Dexcalibur 实例。
当前限制包括:
特别感谢贡献者:
深入排查之前:
dexcalibur --reinstall 命令重新安装?如果没有,请尝试。首先,检查全局设置是否已保存到 <用户目录>/.dexcalibur/
$ ls -la ~/.dexcalibur
total 8
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x+ 87 test_user staff 2784 29 avr 11:47 ..
-rw-r--r-- 1 test_user staff 204 29 avr 11:41 config.json
$ cat ~/.dexcalibur/config.json
{
"workspace":"/Users/test_user/dexcaliburWS3",
"registry":"https://github.com/FrenchYeti/dexcalibur-registry/raw/master/",
"registryAPI":"https://api.github.com/repos/FrenchYeti/dexcalibur-registry/contents/"
}
接下来,检查 Dexcalibur 工作空间的结构是否如下(/api 文件夹的内容可能有所不同)。
$ ls -la ~/dexcaliburWS/.dxc/*
/Users/test_user/dexcaliburWS/.dxc/api:
total 0
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
drwxr-xr-x 8 test_user staff 256 29 avr 11:41 sdk_androidapi_29_google
/Users/test_user/dexcaliburWS/.dxc/bin:
total 34824
drwxr-xr-x 4 test_user staff 128 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
-rwxr-xr-x 1 test_user staff 17661172 29 avr 11:41 apktool.jar
drwxr-xr-x 18 test_user staff 576 29 avr 11:41 platform-tools
/Users/test_user/dexcaliburWS/.dxc/cfg:
total 8
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
-rw-r--r-- 1 test_user staff 314 29 avr 11:41 config.json
/Users/test_user/dexcaliburWS/.dxc/dev:
total 0
drwxr-xr-x 2 test_user staff 64 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
/Users/test_user/dexcaliburWS/.dxc/tmp:
total 0
drwxr-xr-x 2 test_user staff 64 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
如果你使用通过 USB 连接的物理设备,请确保已启用开发者模式和USB 调试。
如果你使用虚拟设备,请前往 /splash.html,选择 Device Manager,点击 Connect over TCP ... 并按照说明操作。如果你不知道设备的 IP 地址,请勾选 automatic configuration 复选框,让 Dexcalibur 自动检测。
你需要先注册目标设备,才能使用它。 注册过程中,Dexcalibur 会收集设备元数据并推送兼容版本的 Frida 服务器。
这些元数据用于选择合适的 frida-server 和 frida-gadget 目标。
如果设备列表中某行出现红色感叹号 !,则表示你的桌面未获得设备授权。你可能需要确认授权。
如果你的设备已列在 DeviceManager 中,并且 online 列已勾选,则点击 enroll。
如果你的设备已列在 DeviceManager 中,并且 online 列已勾选,则点击 enroll。
版本 < v0.7 的 Dexcalibur 由于 ADB 输出解析不完整,无法自动检测并使用模拟设备。
从版本 >= v0.7 开始,一旦你的虚拟设备运行起来,请前往 /splash.html 或点击导航栏中的 DEXCALIBUR。
点击左侧菜单中的 Device Manager 按钮,然后点击表格顶部的 Refresh 按钮。
你应该会看到一行以你的虚拟设备 ADB ID 开头的行。
首先,与任何目标设备一样,你应该注册它。
点击 Connect over TCP ... 添加新的 TCP 设备,或通过 TCP 连接已注册的设备。
如果设备从未注册过,则通过 TCP 进行注册。 在某些情况下,通过 TCP 连接比通过 USB 慢。因此注册可能需要额外时间。
如果设备已通过 USB 注册,则该设备的新首选传输类型变为 TCP。
在此仓库创建拉取请求或创建 issue。
在 dexcalibur-doc 仓库创建拉取请求。
![]() |
|---|
| 他们提供了 All Products 许可证 <3 |
目前关于 Dexcalibur 的文档和培训资源很少。如果你成功使用 Dexcalibur 赢得了 CTF 挑战或发现了漏洞,我强烈鼓励你分享经验。