Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
ScareCrow — ScareCrow - 围绕EDR绕过设计的载荷创建框架。 | Kitploit
工具/GitHubGitHub/optiv/scarecrow
漏洞利用框架Payload生成Shellcode渗透测试红队Payload 开发Archived
GitHuboptiv/scarecrow

ScareCrow

ScareCrow - 围绕EDR绕过设计的载荷创建框架。

查看仓库
2.9k529213年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

此仓库已归档

要查看最新版本的 ScareCrow 或提交问题,请参考 https://github.com/Tylous/ScareCrow。



ScareCrow

更多信息

如果你想了解本框架所用技术的更多细节,请查看第1部分和第2部分

描述

ScareCrow 是一个载荷生成框架,用于侧加载(而非注入)到合法的 Windows 进程中(绕过应用程序白名单控制)。一旦 DLL 加载器被加载到内存中,它就会利用一种技术清除进程内存中运行的系统 DLL 上的 EDR 钩子。这之所以有效,是因为我们知道 EDR 的钩子是在进程生成时放置的。

ScareCrow 可以针对这些 DLL,通过使用 API 函数 VirtualProtect 在内存中操作它们。VirtualProtect 可以将进程内存的某个区域权限更改为不同的值,具体来说是从“执行-读取”改为“读取-写入-执行”。

ScareCrow 使用以下两种方法之一来解除钩子:

磁盘方法

执行时,ScareCrow 会复制存储在 C:\Windows\System32\ 磁盘上的系统 DLL 的字节。这些磁盘上的 DLL 是“干净”的,没有 EDR 钩子,因为系统会使用它们在生成新进程时加载未修改的副本。由于 EDR 只在内存中钩住这些进程,它们保持不变。ScareCrow 不会复制整个 DLL 文件,而是只关注 DLL 的 .text 段。该段包含可执行汇编代码,通过这样做,ScareCrow 有助于降低检测的可能性,因为重新读取整个文件可能导致 EDR 检测到系统资源被修改。然后,数据通过每个函数的偏移量被复制到内存的正确区域。每个函数都有一个偏移量,表示从基地址开始的确切字节数,从而确定函数在堆栈上的位置。

为此,ScareCrow 使用 VirtualProtect 更改 .text 内存区域的权限。尽管这是系统 DLL,但由于它已被加载到我们的进程(由我们控制)中,我们可以在不需要提升权限的情况下更改内存权限。

间接系统调用

ScareCrow 将 shellcode 加载到内存中,首先解密 shellcode(通过三种加密方法之一加密,如下所述)。解密并加载后,shellcode 被执行。根据指定的加载器选项,ScareCrow 会为 DLL 设置不同的导出函数。加载的 DLL 也不包含所有 DLL 通常需要的标准 DLLMain 函数。DLL 仍然可以毫无问题地执行,因为我们加载到的进程会寻找那些导出函数,而不会关心 DLLMain 是否存在。

二进制示例

之后

KnownDLLs

KnownDLLs 是 Windows 系统启动过程中加载的一组 DLL。由于这些 DLL 被认为是操作系统运行所必需的,它们会被缓存以帮助减少加载时间并提高应用程序启动时的性能。KnownDLLs 包括 kernel32.dll、kernelbase.dll 和 ntdll.dll 等 DLL。

利用这些 KnownDLLs,ScareCrow 通过结合使用 NtOpenSection 和 NtMapViewOfSection,从 \KnownDlls\<dllname> 映射一份 DLL 副本加载到进程内存中。ScareCrow 不会加载整个 DLL,而只加载 DLL 的 .text 段(因为它在包含所有系统调用)。然后,ScareCrow 使用间接系统调用来调用 NtProtectVirtualMemory,更改 DLL 的 .text 内存段的权限,以允许 ScareCrow 覆盖 EDR 的钩子,最后恢复权限。

有关更多信息,你可以阅读 modexp 的详细文章

一旦这些钩子被移除,ScareCrow 随后使用自定义系统调用将 shellcode 加载到内存并执行。即使在移除 EDR 钩子之后,ScareCrow 这样做是为了帮助避免被基于非用户态的钩子遥测收集工具(如 Windows 事件跟踪 (ETW) 或其他事件日志记录机制)检测到。这些自定义系统调用也用于执行上述的 VirtualProtect 调用来移除 EDR 放置的钩子,以避免被任何 EDR 的反篡改控制检测到。这是通过调用自定义版本的 VirtualProtect 系统调用 NtProtectVirtualMemory 来完成的。ScareCrow 利用 Go 语言生成这些加载器,然后使用汇编语言编写这些自定义系统调用函数。

在加载器的创建过程中,ScareCrow 利用一个库来在信标回连后融入后台。该库做两件事:

使用代码签名证书签名的文件通常受到较少的审查,使得它们更容易被执行而不被质疑,因为由受信任名称签名的文件通常比其他文件更不容易引起怀疑。大多数反恶意软件产品没有时间验证这些证书(现在有些产品会验证,但常见的供应商名称通常包含在白名单中)。ScareCrow 通过使用工具 limelighter 的 Go 包版本创建一个 pfx12 文件来生成这些证书。该包接受用户输入的域名,为该域名创建代码签名证书。如果需要,你也可以使用自己的代码签名证书,通过 valid 命令行选项。

  • ScareCrow 还能够从文件中获取合法代码签名证书的完整链和所有属性,并将其复制到另一个文件上。这包括签名日期、计数器签名和其他可度量的属性。此选项可以使用 DLL 或 .exe 文件进行复制,通过 clone 命令行选项以及要复制证书的文件的路径。

操作安全考虑:

  当使用 microsoft.com 对加载器进行签名时,针对 WINDOWS DEFENDER ATP 产品效果可能不佳,因为它们可以验证该证书是否属于自己。如果你在针对 Windows 产品使用加载器,可能应该使用不同的域名。
  • 伪造加载器的属性: 这是通过使用 syso 文件实现的。syso 文件是一种嵌入式资源文件,当与我们的加载器一起编译时,会修改已编译代码的属性部分。在生成 syso 文件之前,ScareCrow 会生成一个随机文件名(基于加载器类型)以供使用。一旦选定,该文件名将映射到与该文件名关联的属性,从而确保分配正确的值。

文件属性示例

通过这些文件和 Go 代码,ScareCrow 使用 c-shared 库选项将它们交叉编译为 DLL。DLL 编译完成后,会被混淆成一个断裂的 base64 字符串,并嵌入到一个文件中。这样,该文件可以被远程拉取、访问并以编程方式执行。

自定义属性文件

虽然 ScareCrow 有大量的文件属性列表,但在某些情况下,需要自定义(可能是特定环境)的属性集。为适应这种情况,ScareCrow 允许输入包含属性的 JSON 文件。使用 -configfile 命令行选项,ScareCrow 将使用这些属性和文件名,而不是 ScareCrow 中预先存在的属性。文件 main.json 包含一个示例模板,展示了 JSON 结构应该如何才能正常工作。请注意,你用作 "InternalName" 的值将成为文件名。

要求

ScareCrow 现在需要 golang 1.19.1 或更高版本来编译加载器。如果你运行的是旧版本,请使用 1.19.1 或更高版本。

新版本请参见:https://golang.org/dl/。

安装

第一步总是克隆仓库。在编译 ScareCrow 之前,你需要安装依赖项。

要安装它们,请运行以下命令:``` go get github.com/fatih/color go get github.com/yeka/zip go get github.com/josephspurrier/goversioninfo go get github.com/Binject/debug/pe go get github.com/awgh/rawreader

确保你的操作系统上已安装以下内容:```
openssl
osslsigncode
mingw-w64

然后构建它``` go build ScareCrow.go

此外,ScareCrow 利用 [Garble](https://github.com/burrowers/garble) 来混淆所有加载器。

注意:部分依赖在 Windows 上编译时可能不兼容,因此建议在 OSX 或 Linux 上编译您的加载器。

## 帮助```

./ScareCrow -h

  _________                           _________                       
 /   _____/ ____ _____ _______   ____ \_   ___ \_______  ______  _  __
 \_____  \_/ ___\\__  \\_  __ \_/ __ \/    \  \/\_  __ \/  _ \ \/ \/ /
 /        \  \___ / __ \|  | \/\  ___/\     \____|  | \(  <_> )     / 
/_______  /\___  >____  /__|    \___  >\______  /|__|   \____/ \/\_/  
        \/     \/     \/            \/        \/                      
                                                        (@Tyl0us)
        “Fear, you must understand is more than a mere obstacle. 
        Fear is a TEACHER. the first one you ever had.”
下载工具