Dexcalibur是一个针对仪器自动化的Android反向工程平台。它的特殊性是使用动态分析来改善静态分析启发式方法。它旨在自动化与动态仪器有关的无聊任务,例如:
您想分享一些东西还是需要一些帮助?加入我们的官方聊天:
电报 - 最快的回复方法
可以在此处提供官方文档(网站 - 正在进行的工作)。
请参阅此处的最新消息: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安装:如果使用npm( -g选项)安装了全球核心,则可以通过进行$ dexcalibur ,否则它可以通过$ node $(node root -g dexcalibur)/dexcalibur/dexcalibur.js启动。
从来源安装:从dexcalibur文件夹,运行$ dexcalibur或$ node dexcalibur.js 。
对于Windows
NPM安装:如果使用npm( -g选项)安装了dexcalibur,则必须通过从终端启动dexcalibur,通过从终端node <NPM_ROOT>/dexcalibur/dexcalibur.js启动以下命令。
从源:从dexcalibur文件夹到终端,运行命令node dexcalibur.js 。
您正在使用以前的dexcalibur版本吗?
按照相同的步骤进行操作,而不是新安装,当您应该输入工作区路径时,请输入当前的工作区位置。
只是这样做:
$ npm install -g dexcalibur
将自动检测现有的配置和工作区。
屏幕截图说明在运行时自动更新XREF 。
实际上,最大的限制是Dexcalibur无法生成挂钩定位本机函数的源代码(进入JNI库)。但是,您可以通过编辑钩子来手动声明弗里达的拦截器。
假设Dexcalibur(暂时)不提供分析天然部分(例如JNI库或JNA)的特征,则仅确定了与Java部分相关的特征和局限性。
分析精度取决于分析早期步骤中使用的Android API图像的完整性。这意味着,如果您使用Android SDK从Android.jar文件生成的DEX文件,则可能会丢失对内部方法,字段或类的一些引用。当分析从直接从运行预期Android版本的真实设备提取的“ boot.oat”文件启动时,将获得更好的结果。
托多:写文字
托多:写文字
追踪行为
涉及“运行Smali(VM)”动作的静态分析仪能够发现和接受,但跟踪以下行为:
实际上,不支持此类无效指令的处理程序/听众,但会跟踪和渲染事件。
Dexcalibur ir
VM产生了自定义和简化的中间表示(IR),仅显示该表示,以帮助分析师执行其分析。
根据Callstack深度和配置的值,IR可以包含或不包括或不执行的指令。如果执行进入试验块并继续返回,但从未兑现捕获,则不会呈现捕获块。实际上,Dexcalibur ir的目的是仅渲染“执行的内容”或“可以根据某些符号的值执行的内容”到VM上下文中。
Dexcalibur IR通过删除无用的goto和不透明的谓词来帮助阅读清洁版本的字节码。可以通过2个简化级别的VM生成Dexcalibur IR:
第一级IR,如果您不信任第二级IR,则可以使用:
第2级:
Android API模拟
托多
细节
Smali VM遵循步骤:
VM如何处理Invoke-*指令?
清单分析(有限)
在第一次运行之前,应用程序的Android清单进行解析。实际上,在此级别上确实检测到了清单中这种不安全配置的异常。
Android明显解析的唯一目的是填充其他类型的分析仪。
许可分析
从清单中提取的所有权限均列出和识别,并将其与目标Android API版本的Android规范进行了比较。
dexcalibur提供 - 仅在某些情况下提供了权限目的的描述,即最小Android API版本,...
活动分析
提供者分析
服务分析
接收器分析
网络监控
意图监视
文件访问监视
您找不到多用户菜单?没有问题,没有菜单,但是可以实现简约的协作工作。
Dexcalibur运行Web服务器。因此,如果几个人在该Web服务器的同一网络上,并且配置了主机防火墙,则可以在同一Dexcalibur实例上使用几个。
实际限制是:
特别感谢贡献者:
在更深入之前:
dexcalibur --reinstall命令来重新安装它?如果没有,请尝试。首先,检查全局设置是否已保存到<user_directory>/.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收集设备元数据并推动兼容版本的Frida Server。
这样的元数据用于选择右Frida-Server和Frida-gadget目标。
如果红色感叹号!出现在设备列表中的线上,然后设备不允许您的桌面。您可能需要确认
如果您的设备已列为DeviceManager并检查了online ,请单击enroll
如果您的设备已列为DeviceManager并检查了online ,请单击enroll
Dexcalibur版本<v0.7无法检测到自动模拟设备,并由于ADB输出不完整而使用它。
由于版本> = V0.7,一旦您的虚拟设备运行,请访问/splash.html或单击DEXCALIBUR进入导航栏。单击Device Manager按钮进入左菜单,然后单击数组顶部的Refresh按钮。
您应该有一个由虚拟设备的ADB ID开始的行。
首先,作为任何目标设备,您应该注册它。
单击Connect over TCP ...以通过TCP添加新设备或通过TCP连接注册的设备。
如果设备从未被注册过,则将通过TCP进行注册。在某些情况下,TCP上的连接比USB上的连接慢。因此,注册可能需要额外的时间。
如果该设备已在USB上注册,则该设备的新型运输类型将成为TCP。
在此存储库上创建拉动请求或创建问题。
在Dexcalibur-Doc存储库上创建拉动请求。
文档可在此处(文档网站)和此处(Wiki)提供
![]() |
|---|
| 他们为所有产品提供许可证<3 |
实际上,关于Dexcalibur的文档和培训资源很少。如果您成功使用Dexcalibur来赢得CTF挑战或发现脆弱性,我强烈建议您分享自己的经验。