ScyllaX 是基于原版 Scylla 的 PE dump / imports reconstruction 工具改造版。当前仓库将 Scylla 的 WTL 图形界面保留下来,并新增
ScyllaXBridgePlugin,让 ScyllaX 通过 x64dbg/x32dbg 插件桥接当前正在调试的进程,而不是由 ScyllaX 自己枚举进程并OpenProcess读取目标内存。
- 支持 x86 / x64 PE 目标。
- 保留原 Scylla 的经典 UI 和主要工作流:
- Dump 当前目标映像;
- IAT Autosearch;
- Get Imports;
- Fix Dump;
- PE Rebuild;
- import tree 保存 / 加载;
- invalid / suspect imports 检查;
- direct imports 扫描与修复选项。
- 新增 x64dbg / x32dbg Bridge 模式:
ScyllaX.exe不再直接打开目标进程;- 目标进程、模块列表、内存读写、内存区域查询均通过命名管道转发到 debugger 插件;
- 插件侧使用 x64dbg SDK / Script API 访问当前 debuggee;
- OEP 默认使用 debugger 当前
cip。
- 支持 x64dbg 插件菜单一键启动:
Plugins -> ScyllaXBridge -> Open ScyllaX UI
- 提供 GitHub Actions 构建配置,可自动补依赖、下载 x64dbg pluginsdk 并构建 x86/x64 artifact。
ScyllaX.exe UI
-> named pipe
-> ScyllaXBridgePlugin.dp64 / ScyllaXBridgePlugin.dp32
-> x64dbg / x32dbg SDK
-> current debuggeeScyllaX 启动后会解析命令行参数:
--xdbg-pipe "\\.\pipe\ScyllaXBridge_xxx_xxx"如果没有这个参数,程序会直接退出并提示必须从 x64dbg/x32dbg 插件启动。
Bridge 当前实现的命令:
| 命令 | 作用 |
|---|---|
XDBG_CMD_HELLO |
握手测试 |
XDBG_CMD_GET_PROCESS |
获取当前 debuggee 信息 |
XDBG_CMD_GET_MODULES |
获取模块列表 |
XDBG_CMD_READ_MEMORY |
从当前 debuggee 读取内存 |
XDBG_CMD_WRITE_MEMORY |
向当前 debuggee 写内存 |
XDBG_CMD_QUERY_MEMORY |
查询地址所属内存区域 |
ScyllaX-master/
├─ Scylla.sln Visual Studio solution
├─ Scylla/ Scylla UI 与 PE/IAT 核心逻辑
│ ├─ main.cpp GUI 入口,当前为 bridge-only 启动
│ ├─ MainGui.cpp/.h 主窗口逻辑
│ ├─ XDbgBridge.cpp/.h ScyllaX 侧命名管道 client
│ ├─ ProcessAccessHelp.cpp/.h 进程/内存访问封装,bridge 模式下转发到 xdbg
│ ├─ ProcessLister.cpp/.h 进程列表封装,bridge 模式下只返回当前 debuggee
│ ├─ IATSearch.cpp/.h IAT 自动搜索
│ ├─ ImportsHandling.cpp/.h imports tree 解析与处理
│ ├─ ImportRebuilder.cpp/.h import table 重建
│ ├─ PeParser.cpp/.h PE 解析
│ └─ PeRebuild.cpp/.h PE rebuild
├─ ScyllaXBridgePlugin/ x64dbg/x32dbg 插件 bridge server
│ ├─ ScyllaXBridgePlugin.cpp 插件入口、菜单、pipe server、xdbg API 调用
│ ├─ plugin.h
│ ├─ pluginmain.h
│ └─ ScyllaXBridgePlugin.vcxproj
├─ diStorm/ diStorm 反汇编库工程
├─ tinyxml/ TinyXML 工程;源码需补齐
├─ WTL/ WTL 目录;当前仓库中通常需作为 submodule/依赖补齐
├─ Plugins/ 原 Scylla 插件与 ImpREC wrapper 示例
├─ .github/workflows/build.yml GitHub Actions 构建流程
├─ deploy_example.bat 部署示例脚本
├─ ScyllaX.ini 默认配置示例
├─ README_BRIDGE_ONLY.md bridge-only 行为说明
├─ README_ScyllaX.md ScyllaX MVP 说明
├─ COMPILING 原版 Scylla 编译说明
└─ LICENSE GPL-3.0 license- Windows 10 / Windows 11, Windows 7 可用, 但是不建议.
- 有x96dbg
- Windows 10 / Windows 11,Windows 7 理论上也可能可用,但建议使用较新的 Windows。
- x64dbg / x32dbg。
- Visual Studio 2022,或可用的 MSBuild + MSVC toolchain。
- Windows SDK。
- WTL。
- TinyXML legacy 版本。
- x64dbg pluginsdk。
| 目标程序 | Debugger | Bridge 插件 | ScyllaX |
|---|---|---|---|
| x64 PE | x64dbg | ScyllaXBridgePlugin.dp64 |
x64 ScyllaX.exe |
| x86 PE | x32dbg | ScyllaXBridgePlugin.dp32 |
x86 ScyllaX.exe |
不要混用架构。x64dbg 只能配 .dp64,x32dbg 只能配 .dp32。
仓库里有 .gitmodules:
[submodule "WTL"]
path = WTL
url = https://github.com/Win32-WTL/WTL.git使用:
git submodule update --init --recursive最终至少需要存在:
WTL\Include\atlapp.h原 Scylla 使用的是 legacy TinyXML,不是 tinyxml2。当前仓库的 tinyxml/ 里可能只有工程文件,源码需要补齐。
可以这样处理:
git clone --depth 1 https://github.com/lucasg/tinyxml.git _deps\tinyxml
copy _deps\tinyxml\tiny*.cpp tinyxml\
copy _deps\tinyxml\tiny*.h tinyxml\最终建议至少有:
tinyxml\tinyxml.cpp
tinyxml\tinyxml.h
tinyxml\tinystr.cpp
tinyxml\tinystr.h
tinyxml\tinyxmlerror.cpp
tinyxml\tinyxmlparser.cppScyllaXBridgePlugin 需要 x64dbg 官方 plugin SDK。放置结构如下:
ScyllaXBridgePlugin\
├─ pluginsdk\
│ ├─ bridgemain.h
│ ├─ _plugins.h
│ ├─ _scriptapi_module.h
│ ├─ _scriptapi_memory.h
│ ├─ x64dbg.lib
│ ├─ x64bridge.lib
│ ├─ x32dbg.lib
│ └─ x32bridge.lib
├─ ScyllaXBridgePlugin.cpp
├─ plugin.h
└─ pluginmain.hx64dbg snapshot 或 x64dbg-pluginsdk.zip 一般都包含这些文件。
- 补齐
WTL、tinyxml、ScyllaXBridgePlugin/pluginsdk。 - 打开:
Scylla.sln- 如果 Visual Studio 提示 retarget,选择当前机器安装的 Windows SDK 和
v143toolset。 - 构建:
Release | x64
Release | Win32通常会生成:
x64\Release\ScyllaX.exe
Win32\Release\ScyllaX.exe
bin\x64\ScyllaXBridgePlugin.dp64
bin\x32\ScyllaXBridgePlugin.dp32注意:原 Scylla 工程比较老,Win32 配置里可能写着
v90。没有 VS2008 时,直接 retarget 到v143即可。
x64:
msbuild Scylla.sln /m /restore /p:Configuration=Release /p:Platform=x64 /p:PlatformToolset=v143x86:
msbuild Scylla.sln /m /restore /p:Configuration=Release /p:Platform=Win32 /p:PlatformToolset=v143Debug 构建:
msbuild Scylla.sln /m /restore /p:Configuration=Debug /p:Platform=x64 /p:PlatformToolset=v143
msbuild Scylla.sln /m /restore /p:Configuration=Debug /p:Platform=Win32 /p:PlatformToolset=v143仓库内置 .github/workflows/build.yml。它会:
- checkout 仓库与 submodule;
- 设置 VS2022 MSBuild;
- 检查并补齐 WTL;
- 检查并补齐 TinyXML;
- 下载 x64dbg pluginsdk;
- 将旧工程 retarget 到
v143; - 分别构建
x64与Win32; - 上传
ScyllaX-x64和ScyllaX-x86artifacts。
手动触发路径:
GitHub -> Actions -> Build ScyllaX -> Run workflow把 64 位插件和 64 位 ScyllaX 放到 x64dbg 插件目录:
x64dbg\release\x64\plugins\ScyllaXBridgePlugin.dp64
x64dbg\release\x64\plugins\ScyllaX.exe也可以把 ScyllaX.exe 放到 x64dbg.exe 同级目录。插件会先找自身目录,再 fallback 到父目录。
把 32 位插件和 32 位 ScyllaX 放到 x32dbg 插件目录:
x64dbg\release\x32\plugins\ScyllaXBridgePlugin.dp32
x64dbg\release\x32\plugins\ScyllaX.exe也可以把 ScyllaX.exe 放到 x32dbg.exe 同级目录。
仓库提供 deploy_example.bat:
deploy_example.bat C:\Tools\x64dbg\release\x64 x64
deploy_example.bat C:\Tools\x64dbg\release\x32 x32脚本会复制:
bin\x64\ScyllaXBridgePlugin.dp64 -> x64dbg\release\x64\plugins\
bin\x32\ScyllaXBridgePlugin.dp32 -> x64dbg\release\x32\plugins\并尝试复制对应架构的 ScyllaX.exe。如果你的 ScyllaX.exe 输出在 x64\Release\ 或 Win32\Release\,请按实际输出目录调整脚本。
- 打开 x64dbg 或 x32dbg。
- 载入你有权限分析的目标程序。
- 运行或单步到你认为合适的 OEP / unpacked code 附近。
- 点击菜单:
Plugins -> ScyllaXBridge -> Open ScyllaX UI- ScyllaX 窗口启动后会自动连接当前 debuggee。
- 进程下拉框会显示当前 debuggee,但 bridge-only 版不允许自由选择其他进程。
- OEP 默认填入 x64dbg/x32dbg 当前
cip。 - 根据需要执行:
IAT Autosearch -> Get Imports -> Dump -> Fix Dump或:
Dump -> PE Rebuild- 在 debugger 中停在 OEP 或接近 OEP 的位置。
- 打开 ScyllaX UI。
- 确认 OEP 值是否正确。
- 点击
IAT Autosearch自动搜索 IAT 起始地址和大小。 - 点击
Get Imports解析导入表。 - 查看 imports tree:
Show Invalid:显示解析失败项;Show Suspect:显示可疑项;- 右键可编辑、删除或手动选择 API。
- 点击
Dump导出当前映像。 - 点击
Fix Dump将重建后的 import table 写入 dump 文件。 - 用 PE 工具或 debugger 验证修复后的文件是否能正常装载。
PE Rebuild 用于对已有 dump 文件做 PE 结构修复。适合在 dump 后进一步清理 header、section、checksum 等信息。
Scylla 原有的内存区域 dump 和 PE section dump 界面仍保留。bridge 模式下,底层读取会通过 x64dbg/x32dbg 完成。
仓库提供 ScyllaX.ini 示例。常见配置项:
[SCYLLA_CONFIG]
USE_PE_HEADER_FROM_DISK=1
DEBUG_PRIVILEGE=1
CREATE_BACKUP=1
DLL_INJECTION_AUTO_UNLOAD=0
IAT_SECTION_NAME=.SCY
UPDATE_HEADER_CHECKSUM=1
REMOVE_DOS_HEADER_STUB=0
IAT_FIX_AND_OEP_FIX=1
SUSPEND_PROCESS_FOR_DUMPING=0
OriginalFirstThunk_SUPPORT=1
USE_ADVANCED_IAT_SEARCH=1
SCAN_DIRECT_IMPORTS=1
FIX_DIRECT_IMPORTS_NORMAL=0
FIX_DIRECT_IMPORTS_UNIVERSAL=1
CREATE_NEW_IAT_IN_SECTION=0
DONT_CREATE_NEW_SECTION=0
APIS_ALWAYS_FROM_DISK=1建议 bridge-only 版保持:
SUSPEND_PROCESS_FOR_DUMPING=0
APIS_ALWAYS_FROM_DISK=1
USE_ADVANCED_IAT_SEARCH=1说明:
| 配置项 | 说明 |
|---|---|
USE_PE_HEADER_FROM_DISK |
优先使用磁盘 PE header。目标内存 header 被改写时有用。 |
CREATE_BACKUP |
修改文件前创建备份。 |
IAT_SECTION_NAME |
新建 IAT section 的名称。 |
UPDATE_HEADER_CHECKSUM |
修复后更新 PE checksum。 |
IAT_FIX_AND_OEP_FIX |
Fix Dump 时同时修复 IAT 与 OEP。 |
OriginalFirstThunk_SUPPORT |
启用 OriginalFirstThunk 支持。 |
USE_ADVANCED_IAT_SEARCH |
使用高级 IAT 搜索算法。 |
SCAN_DIRECT_IMPORTS |
扫描 direct imports。 |
FIX_DIRECT_IMPORTS_UNIVERSAL |
使用 universal 方式修复 direct imports。 |
APIS_ALWAYS_FROM_DISK |
API 解析时始终从磁盘模块读取导出信息。 |
| 快捷键 | 功能 |
|---|---|
Ctrl + D |
Dump |
Ctrl + F |
Fix Dump |
Ctrl + R |
PE Rebuild |
Ctrl + O |
Load Tree |
Ctrl + S |
Save Tree |
Ctrl + T |
Autotrace |
Ctrl + G |
Get Imports |
Ctrl + I |
IAT Autosearch |
仓库保留原 Scylla 插件目录:
Plugins\
├─ PECompact.dll
├─ PESpin_x64_v1.dll
├─ Include_Headers\ScyllaPlugin.h
├─ ImpRec_Plugins\Imprec_Wrapper_DLL.dll
├─ ImpRec_Plugins\PECompact 2.7.x.dll
└─ Sources\原 Scylla 支持:
- Scylla native plugin;
- 部分 ImpREC plugin wrapper。
Bridge-only 版仍会扫描插件目录,但涉及远程线程、DLL 注入或原生进程句柄的旧插件逻辑可能并未完全适配 xdbg bridge。若插件行为异常,请优先确认该插件是否依赖原版 OpenProcess / CreateRemoteThread 流程。
- 不支持在 ScyllaX UI 内自由选择系统进程。
Pick DLL无法使用Suspend / Resume / Terminate类操作应交给 x64dbg/x32dbg 控制。QUERY_MEMORY当前主要通过DbgMemFindBaseAddr得到 base / size,Protect/Type信息不完整。- 插件一次只处理一个 ScyllaX UI 连接。
- 一些 legacy Scylla 功能保留在代码里,但当前工程主要目标是 xdbg bridge workflow。
检查文件是否放对:
x64dbg\release\x64\plugins\ScyllaXBridgePlugin.dp64或:
x64dbg\release\x32\plugins\ScyllaXBridgePlugin.dp32然后重启 x64dbg/x32dbg。
把 ScyllaX.exe 放到以下任一位置:
x64dbg\release\x64\plugins\ScyllaX.exe
x64dbg\release\x64\ScyllaX.exex32dbg 同理:
x64dbg\release\x32\plugins\ScyllaX.exe
x64dbg\release\x32\ScyllaX.exe可以尝试:
- 确认 debugger 停在解包后的 OEP 附近;
- 手动填写更合适的 OEP;
- 开启
USE_ADVANCED_IAT_SEARCH=1; - 确认目标模块列表是否正常;
- 对可疑 imports 使用手动 Pick API 修正。
这在壳、混淆或跳板导入场景里很常见。处理方式:
- 用
Show Invalid/Show Suspect过滤; - 删除明显错误项;
- 对无法自动识别的 thunk 手动选择 DLL/API;
- 必要时扩大或缩小 IAT 范围后重新
Get Imports。
核心文件:
Scylla\XDbgBridge.h
Scylla\XDbgBridge.cpp主要职责:
- 解析
--xdbg-pipe参数; - 连接命名管道;
- 发送 request packet;
- 接收 response payload;
- 封装 process / module / memory API;
- 将大块读写按
0x100000分块。
ProcessAccessHelp.cpp 中的关键改造:
- bridge 模式下
openProcessHandle使用 sentinel handle; readMemoryFromProcess转发到XDBG_CMD_READ_MEMORY;writeMemoryToProcess转发到XDBG_CMD_WRITE_MEMORY;getProcessModules转发到XDBG_CMD_GET_MODULES;getMemoryRegionFromAddress转发到XDBG_CMD_QUERY_MEMORY。
核心文件:
ScyllaXBridgePlugin\ScyllaXBridgePlugin.cpp主要职责:
- 注册 x64dbg 插件;
- 添加菜单项
Open ScyllaX UI; - 创建命名管道;
- 启动
ScyllaX.exe --xdbg-pipe ...; - 接收 ScyllaX 请求;
- 调用 x64dbg SDK / Script API;
- 返回二进制 payload。
插件入口:
pluginit
plugstop
plugsetup
CBMENUENTRY
DllMain当前主要使用的 xdbg API:
DbgIsDebugging()
DbgGetProcessId()
DbgValFromString("cip")
DbgMemRead()
DbgMemFindBaseAddr()
Script::Memory::Write()
Script::Module::GetMainModuleInfo()
Script::Module::GetList()客户端和插件端共用结构:
#define SCYLLAX_PIPE_MAGIC 0x58594353u /* SCYX */
#define SCYLLAX_PIPE_VERSION 1u
struct XDbgPacket
{
DWORD magic;
DWORD version;
DWORD command;
DWORD status;
unsigned long long a;
unsigned long long b;
unsigned long long c;
unsigned long long d;
DWORD size;
};payload 紧跟在 packet 后面。reply 的 status = 1 表示成功,status = 0 表示失败。
- 保持 C++ 代码与原 Scylla 风格一致,尽量少引入大型新依赖。
- 新增 bridge 命令时,需要同时修改:
Scylla/XDbgBridge.hScylla/XDbgBridge.cppScyllaXBridgePlugin/ScyllaXBridgePlugin.cpp
- 修改 wire struct 时注意 x86/x64 ABI、字段大小和对齐。
- pipe payload 尽量使用固定大小结构,避免 STL 对象跨进程传输。
- 涉及目标进程控制的操作优先交给 x64dbg/x32dbg,不要恢复原生
OpenProcessfallback。
ScyllaX 是调试和 PE 修复工具。请只用于:
- 自己开发的软件;
- CTF / crackme / unpackme;
- 已获授权的逆向分析;
- 恶意样本的隔离研究环境;
- PE 文件格式学习。
不要将本工具用于未授权的软件修改、绕过授权、破坏系统、窃取数据或其他违法行为。
本项目继承原 Scylla 许可,使用 GNU General Public License v3.0。详见:
LICENSE- Original Scylla project:x86/x64 imports reconstruction tool。
- diStorm:反汇编引擎。
- TinyXML:XML 配置解析。
- WTL:Windows Template Library UI。
- x64dbg / x32dbg:debugger 与插件 SDK。
- ChatGPT 5.5: 太好用了(
- BennettNotFound: ScyllaX作者(Project HashCat)
- 以及屏幕前的你~