Hue-Jhan/Ntdll-Early-Bird-Injection-Trojans
GitHub: Hue-Jhan/Ntdll-Early-Bird-Injection-Trojans
使用Windows原生API实现Early Bird APC注入的shellcode加载器集合,用于研究低层级隐蔽代码注入技术。
Stars: 3 | Forks: 0
# Native Api Early Bird 注入木马
收集了使用 Early Bird APC 注入、Windows native api、底层实用程序和隐蔽技术的远程 shellcode 加载器。此代码仅用于教育目的,请勿将其用于任何恶意或未经授权的活动。
# 🖥️ 代码
此仓库是 [这个仓库](https://github.com/Hue-Jhan/Early-Bird-Process-and-Dll-injection/) 的一个更高级版本,它包含 3 个具有相同基本结构并共享大部分代码的项目,它们分别是:Nt Early bird APC 注入、DLL 版本以及一个 DLL 注入器(使用 APC 的 LoadLibrary),shellcode 是一个 Windows 消息框。每段代码都包含 2 个版本,一个是使用 NtCreateUserProcess(更隐蔽、更底层),另一个是使用 RtlCreateUserProcess(层级较高但更易于管理)。
顺便说一下,我忘记从 Native api 相关部分中移除一些无用的函数,如 `NtCreateThreadEx` 或 `NtGetThreadContext`,因为我大部分的 `apc.h` 是取自 `injection.h`,也就是我之前仓库的一部分,所以你应该移除它们以减少从 ntdll 解析的函数数量,从而提高隐蔽性。正如你所见,在每个代码旁边,我都标注了其原始可执行文件的 Virus Total 检出率。
### Native Api 解析
我们不使用简单的 ```Windows.h``` api 函数,而是使用 ntdll 函数,这些函数在用户层被 EDR hook 的可能性有时较低。它们是暴露给用户模式的最低级别的 Win API 调用,也是最接近 Windows 内核的接口,在它们之下只有系统调用(未来我将发布一个 Syscall 版本)。一旦我们获得了 ntdll 的句柄,我们就会在运行时动态解析其函数,并像使用经典的 Windows api 函数一样使用它们:
- 为了使用 Ntdll,我们为每个函数创建了自定义的 typedef 结构体,并定义了它们所需的所有内部结构和对象,有时结构体可能是嵌套的,甚至需要更多的内部对象;
- 接着,我们使用 ```GetNtFunctionAddress``` 函数,通过 ```GetProcAddress``` 从 ntdll 动态检索 NT 函数的地址。
- 一旦我们在 `InitNtFunctions()` 中检索到这些地址,就可以直接调用这些原生 NT 函数并将其用于注入。
### 1) Early Bird 简单进程注入
生成一个进程并将 shellcode 排入其中:
1. 首先解密 shellcode,有关加密机制的更好视图,请查看[这里](https://github.com/Hue-Jhan/Simple-shellcode-crypter);
2. 其次,我们创建必要的结构体并以挂起状态生成一个进程;
3. 我们获取该进程及其主线程的句柄;
4. 然后我们在其中执行经典的 Allocate(分配) -> Write/Copy(写入/复制) -> Protect RWX(设置为读写执行权限);
5. 最后,我们将 shellcode 排入主线程并恢复进程,从而触发执行。
### 2) DLL 版本
Dll 版本在其被注入的进程中执行完全相同的操作,loader lock 之外的新线程对于避免死锁至关重要。你可能还需要禁用预编译头文件以移除 pch 文件和 Visual Studio 错误。
如果该 Dll 是通过其 dll 注入器版本注入的,则可能无法正常工作,不要问我为什么。
### 3) DLL 注入
生成一个进程,并通过将 LoadLibraryA 排入队列来加载一个恶意的 Dll,在构建 exe 之前,请将 Dll 放在其他文件旁边:
1. 首先将 dll(被视为资源)从 exe 中提取出来,写入磁盘,并计算其路径/大小/名称长度/其他信息;
2. 其次,我们生成一个挂起状态的进程并获取该进程及其主线程的句柄;
3. 然后我们在其中分配与 dll 路径大小相同的内存,将路径写入进程,并将其设置为 RWX 权限;
4. 接着我们获取 kernel32 dll 的基地址,以获取将加载该恶意库的函数指针;
5. 最后,我们使用 loadlibrary 将该 Dll 的基地址排入进程队列并恢复它。
如前所述,如果插入的 dll 是另一个 Early Bird 程序,可能会失败。
# 🛡️ AV 检测
会被 BitDefender Advanced Thread Defense 拦截,但能绕过 Windows Defender 和 BitDefender 杀毒软件,下面是带有混淆元数据的 dll 注入器的 Virus Total 检测结果,更不用说经典的注入器和 dll 在进行混淆后检出率均为 0。
收集了使用 Early Bird APC 注入、Windows native api、底层实用程序和隐蔽技术的远程 shellcode 加载器。此代码仅用于教育目的,请勿将其用于任何恶意或未经授权的活动。
# 🖥️ 代码
此仓库是 [这个仓库](https://github.com/Hue-Jhan/Early-Bird-Process-and-Dll-injection/) 的一个更高级版本,它包含 3 个具有相同基本结构并共享大部分代码的项目,它们分别是:Nt Early bird APC 注入、DLL 版本以及一个 DLL 注入器(使用 APC 的 LoadLibrary),shellcode 是一个 Windows 消息框。每段代码都包含 2 个版本,一个是使用 NtCreateUserProcess(更隐蔽、更底层),另一个是使用 RtlCreateUserProcess(层级较高但更易于管理)。
顺便说一下,我忘记从 Native api 相关部分中移除一些无用的函数,如 `NtCreateThreadEx` 或 `NtGetThreadContext`,因为我大部分的 `apc.h` 是取自 `injection.h`,也就是我之前仓库的一部分,所以你应该移除它们以减少从 ntdll 解析的函数数量,从而提高隐蔽性。正如你所见,在每个代码旁边,我都标注了其原始可执行文件的 Virus Total 检出率。
### Native Api 解析
我们不使用简单的 ```Windows.h``` api 函数,而是使用 ntdll 函数,这些函数在用户层被 EDR hook 的可能性有时较低。它们是暴露给用户模式的最低级别的 Win API 调用,也是最接近 Windows 内核的接口,在它们之下只有系统调用(未来我将发布一个 Syscall 版本)。一旦我们获得了 ntdll 的句柄,我们就会在运行时动态解析其函数,并像使用经典的 Windows api 函数一样使用它们:
- 为了使用 Ntdll,我们为每个函数创建了自定义的 typedef 结构体,并定义了它们所需的所有内部结构和对象,有时结构体可能是嵌套的,甚至需要更多的内部对象;
- 接着,我们使用 ```GetNtFunctionAddress``` 函数,通过 ```GetProcAddress``` 从 ntdll 动态检索 NT 函数的地址。
- 一旦我们在 `InitNtFunctions()` 中检索到这些地址,就可以直接调用这些原生 NT 函数并将其用于注入。
### 1) Early Bird 简单进程注入
生成一个进程并将 shellcode 排入其中:
1. 首先解密 shellcode,有关加密机制的更好视图,请查看[这里](https://github.com/Hue-Jhan/Simple-shellcode-crypter);
2. 其次,我们创建必要的结构体并以挂起状态生成一个进程;
3. 我们获取该进程及其主线程的句柄;
4. 然后我们在其中执行经典的 Allocate(分配) -> Write/Copy(写入/复制) -> Protect RWX(设置为读写执行权限);
5. 最后,我们将 shellcode 排入主线程并恢复进程,从而触发执行。
### 2) DLL 版本
Dll 版本在其被注入的进程中执行完全相同的操作,loader lock 之外的新线程对于避免死锁至关重要。你可能还需要禁用预编译头文件以移除 pch 文件和 Visual Studio 错误。
如果该 Dll 是通过其 dll 注入器版本注入的,则可能无法正常工作,不要问我为什么。
### 3) DLL 注入
生成一个进程,并通过将 LoadLibraryA 排入队列来加载一个恶意的 Dll,在构建 exe 之前,请将 Dll 放在其他文件旁边:
1. 首先将 dll(被视为资源)从 exe 中提取出来,写入磁盘,并计算其路径/大小/名称长度/其他信息;
2. 其次,我们生成一个挂起状态的进程并获取该进程及其主线程的句柄;
3. 然后我们在其中分配与 dll 路径大小相同的内存,将路径写入进程,并将其设置为 RWX 权限;
4. 接着我们获取 kernel32 dll 的基地址,以获取将加载该恶意库的函数指针;
5. 最后,我们使用 loadlibrary 将该 Dll 的基地址排入进程队列并恢复它。
如前所述,如果插入的 dll 是另一个 Early Bird 程序,可能会失败。
# 🛡️ AV 检测
会被 BitDefender Advanced Thread Defense 拦截,但能绕过 Windows Defender 和 BitDefender 杀毒软件,下面是带有混淆元数据的 dll 注入器的 Virus Total 检测结果,更不用说经典的注入器和 dll 在进行混淆后检出率均为 0。标签:APC注入, Awesome列表, C/C++, DLL注入, DNS 反向解析, Early Bird注入, EDR绕过, Linux, ntdll, UML, Windows Native API, 事务性I/O, 云资产清单, 协议分析, 安全防御绕过, 客户端加密, 异步过程调用, 恶意软件, 数据展示, 权限提升, 流量审计, 私有化部署, 红队, 网络安全, 逆向工程, 防御规避, 隐匿技术, 隐私保护, 高交互蜜罐