[!CAUTION] 此仓库已不再维护,请访问 https://github.com/sadreck/Spartacus 获取最新版本。
如果你看过1960年的电影《斯巴达克斯》,你会记得罗马人要求斯巴达克斯自首的场景。当真正的斯巴达克斯站起来时,其他人也纷纷站起来,用“我是斯巴达克斯”这句话声称自己就是他。
当一个容易受到DLL劫持攻击的进程要求加载一个DLL时,它就像在问“谁是 version.dll?”然后随机目录开始声称“我是 version.dll”和“不,我是 version.dll”。这就是 Spartacus。
DllMain 运行所有内容。该技术受 https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain 上的演练启发并由 Shantanu Khandelwal 实现。[防御] 监控模式,试图识别正在代理调用的运行中应用程序,即“正在进行 DLL 劫持”。这仅用于捕获低 hanging fruit,不应依赖于此。在 Releases 下找到并下载最新版本的 Spartacus。或者直接克隆此仓库并从源代码构建。
以下是 Spartacus 支持的每种模式的描述。
注意:与 v1 相比,v2 的命令行参数发生了显著变化。
Spartacus 的原始功能仅仅是查找 DLL 劫持漏洞。其工作方式如下:
CreateFile。.dll 结尾。procmon.exe 或 procmon64.exe。ENTER。ENTER 后终止 Process Monitor。收集所有事件并保存到 C:\Data\logs.pml。所有易受攻击的 DLL 将保存为 C:\Data\VulnerableDLLFiles.csv,所有代理 DLL 解决方案保存在 C:\Data\Solutions。
--mode dll --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose
解析现有的 PML 事件日志输出,将输出保存到 CSV,并生成代理 Visual Studio 解决方案。
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose


Spartacus 的新功能之一是识别本地 COM 劫持漏洞。其工作方式如下:
RegOpenKey。procmon.exe 或 procmon64.exe。ENTER。ENTER 后终止 Process Monitor。InprocServer32 结尾且结果为 NAME_NOT_FOUND 的缺失注册表项。HKEY_CURRENT_USER 下,则在 HKEY_CLASSES_ROOT 下搜索其 GUID,并将详细信息包含在导出的 CSV 中(如果找到)。proxy 模式。对于 COM 劫持,Spartacus 还支持扫描本地系统中配置错误的 COM 条目:
HKEY_CLASSES_ROOT、HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE。InProcServer、InProcServer32、LocalServer 或 LocalServer32 的注册表项。收集所有事件并保存到 C:\Data\logs.pml。所有易受攻击的 COM 信息将保存为 C:\Data\VulnerableCOM.csv。
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
处理现有的 PML 文件以识别易受攻击的 COM 条目。
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
枚举本地系统注册表以识别缺失/配置错误的 COM 库和可执行文件。
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose


Spartacus 支持通过为你想要利用的 DLL 创建骨架项目来生成 Visual Studio 解决方案。
DllMain 函数执行你的载荷。DllMain 之外的函数执行你的载荷。version.dll,如果易受攻击的应用程序调用了 GetFileVersionInfoExW,你可以从此函数运行你的植入程序。生成一个重定向所有导出(无函数代理)的解决方案。
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources
可以一次输入多个 DLL。
--mode proxy --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\userenv.dll --solution "C:\data\tmp\dll-collection" --overwrite --verbose --external-resources
为尽可能多的函数创建代理(基于 Ghidra 的输出)。
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose
与上面相同,但使用外部资源文件生成解决方案(如果你需要修改它们)。
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources
利用预生成的函数原型文件,针对 Ghidra 无法提取函数定义的函数。
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources --prototypes C:\data\prototypes.csv
仅生成函数 GetFileVersionInfoExW 和 GetFileVersionInfoExA 的代理。
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\version.dll --solution C:\Projects\spartacus-version --verbose --overwrite --external-resources --only "GetFileVersionInfoExW, GetFileVersionInfoExA"
从现有的 *.h 文件生成函数原型数据库,帮助为 Ghidra 无法提取函数定义的函数生成代理函数。
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose
列出 DLL 的导出函数,并检查每个函数是否有预生成的原型。
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv
Spartacus 现在支持生成自签名证书(同时从现有文件复制属性),并对 DLL 文件进行签名。
创建一个签名证书,使用来自 C:\Windows\System32\version.dll 的属性(必须是已签名的 DLL)。
--mode sign --action generate --pfx "C:\Output\certificate.pfx" --password "Welcome1" --not-before "2022-12-31 00:00:55" --not-after "2026-01-01 00:00:01" --copy-from C:\Windows\System32\version.dll --verbose
使用现有/生成的证书对 DLL 进行签名。
--mode sign --action sign --pfx "C:\Output\certificate.pfx" --password "Welcome1" --path "C:\Input\MyFakeVersion.dll" --algorithm SHA256 --verbose
Spartacus 还有一个 --detect 模式,试图识别活跃的 DLL 代理。其逻辑如下:
要使用此功能,只需运行带有 --detect 参数的 Spartacus。
Spartacus 支持 --sign 模式,允许你生成自签名证书,同时也用它们对编译的 DLL 进行签名。
生成一个自签名证书,从现有文件复制颁发者/使用者: