🚩 这是 Inceptor 的公开仓库,如需最新版本和更新,请通过 https://porchetta.industries/ 支持我们。
如果您想赞助本项目并获取 Inceptor 的最新版本、已解决问题和最新功能,请通过 https://porchetta.industries/ 支持我们。
来 Discord 上聊聊吧!
NW:我们目前正致力于改进模板引擎!一旦发布下一版本,有关如何使用、定制和扩展该工具的说明将发布在 Wiki 中。
现代渗透测试和红队行动中,通常需要绕过常见的 AV/EDR 设备才能在目标上执行代码。随着时间的推移,防御体系变得越来越复杂,持续绕过也变得越来越困难。
Inceptor 是一款能够自动化大部分流程的工具,希望无需额外工作即可实现绕过。
Inceptor 是一款基于模板的 Windows PE 打包工具,旨在帮助渗透测试人员和红队成员绕过常见的 AV 和 EDR 解决方案。Inceptor 的设计注重易用性,并允许用户进行广泛的定制。
为了全面了解其实现原理和原因,建议阅读以下资源:
Inceptor 能够使用多种开源转换器将现有的 EXE/DLL 转换为 shellcode:
Inceptor 可以使用不同方式对 shellcode 进行编码、压缩或加密。在开发过程中,我开始区分所谓的加载器无关(LI)编码和加载器相关(LD)编码。
加载器无关编码是一种不由用户所选模板(加载器)管理的编码方式。这通常意味着解码存根不是模板的一部分,而是嵌入在 shellcode 本身中。Inceptor 通过开源工具 sgn 提供此类功能,该工具用于使载荷多态化,从而避免被常见签名检测发现。
尽管 Shikata-Ga-Nai 非常强大,但它并不完全适用于所有模板。因此,Inceptor 还实现了加载器相关编码器,这些编码器旨在让加载器负责解码。因此,LD 编码器会将解码存根直接安装到模板中。Inceptor 中实现的此类编码器也是“可链式”的,这意味着它们可以串联起来对载荷进行编码。
虽然使用编码器链有时可以改善载荷的混淆效果,但该技术也可能暴露多个解码例程,从而帮助防御者设计针对它们的签名。为此,Inceptor 提供了多种方式来混淆最终工件,以增强逆向工程(RE)的难度。
截至撰写本文时,公开版本的 Inceptor 提供了以下编码器/压缩器/加密器:
Inceptor 可以静态和动态验证编码链,静态检查解码器的输入/输出类型,并通过独立实现动态验证其正确性。
用户随时可以使用 chain-validate.py 工具轻松验证一个编码链。
Inceptor 还原生实现了 AV 绕过机制,并提供了以“模块”(插件)形式将 AV 绕过功能包含进载荷的能力。
可嵌入的插件包括:
Inceptor 还实现了 EDR 绕过机制,例如完全取消挂钩、直接系统调用调用和手动 DLL 映射。直接系统调用在 C# 中通过出色的 DInvoke 项目实现(再次感谢 TheWover)。在 C/C++ 中,系统调用通过 SysWhispers 和 SysWhispers2 项目实现(感谢 Jackson_T)。此外,Inceptor 还内置了对 x86 系统调用的支持。
与 AV 绕过功能类似,这些功能可以作为模块启用,但要求模板支持它们。目前已实现的技术包括:
Inceptor 通过使用外部工具(如 ConfuserEx 和 Chameleon)支持载荷混淆,并利用 LLVM-Obfuscator(一种基于 IR 的混淆器,基于 LLVM 编译平台)支持 C/C++ 混淆。
Inceptor 的另一项功能是能够通过使用 CarbonCopy 工具对生成的二进制文件/DLL 进行代码签名。通常,带有代码签名证书签名的文件受到的分析不那么严格。许多反恶意软件产品不验证/确认这些证书。
完整的工作流程可总结为以下高层次简化示意图:

Inceptor 设计用于 Windows 系统。update-config.py 工具可以定位所需的 Microsoft 二进制文件并相应地更新配置。可能需要安装 Microsoft Build Tools、Windows SDK 和 Visual Studio,update-config.py 将指导用户如何安装所需的依赖项。
git clone --recursive https://github.com/klezVirus/inceptor.git
cd inceptor
virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements.txt
cd inceptor
python update-config.py
当前版本的 Inceptor 通过简单的命名约定(不要更改模板名称)和用户提供的参数集来定位特定模板。在参数中,还有加载器(-t)选项。如果未指定,加载器将根据要打包的文件类型自动选择,按照以下简单模式:
$ python inceptor.py -hh
[*] Default Loaders
Input File Extension SpecialCondition Guessed Filetype Default Loader Default Template
0 .raw NaN Shellcode Simple Loader Classic
1 .exe .NET Dotnet Executable Donut Classic
2 .exe NaN Native Executable Pe2Shellcode PE Load
3 .dll NaN Native Library sRDI Classic
理解模板命名约定也非常重要,以避免误解工件行为。
$ usage: inceptor.py [-h] [-hh] [-Z] {native,dotnet,powershell} ...
inceptor: A Windows-based PE Packing framework designed to help
Red Team Operators to bypass common AV and EDR solutions
positional arguments:
{native,dotnet,powershell}
native Native Binaries Generator
dotnet .NET Binaries Generator
powershell PowerShell Wrapper Scripts Generator
optional arguments:
-h, --help show this help message and exit
-hh Show functional table
-Z, --check Check file against ThreatCheck