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

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

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

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

工具目录

分类

查看所有分类
Loading categories
DarkWidow — 间接动态系统调用,通过改进的TartarusGate方法进行SSN + Syscall地址排序 + 通过APC Early Bird进行远程进程注入 + 生成一个牺牲进程作为目标进程 + 在生成的进程上实施(ACG+BlockDll)缓解策略 + PPID欺骗 + 从TIB解析API + API哈希 | Kitploit
工具/GitHubGitHub/reveng007/darkwidow
权限提升漏洞利用IDS/IPS规避后渗透利用恶意软件分析二进制分析学习与教育红队Payload 开发
GitHubreveng007/darkwidow

DarkWidow

间接动态系统调用,通过改进的TartarusGate方法进行SSN + Syscall地址排序 + 通过APC Early Bird进行远程进程注入 + 生成一个牺牲进程作为目标进程 + 在生成的进程上实施(ACG+BlockDll)缓解策略 + PPID欺骗 + 从TIB解析API + API哈希

807104198个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

DarkWidow

一款面向 Windows 的可定制投递工具。


特别鸣谢:

  1. BlackHat Asia, 2024 - 工具征集
  2. BlackHat USA, 2024 - 工具征集
  3. BlackHat SecTor, 2024 - 工具征集
  4. BlackHat Europe, 2024 - 工具征集
  5. Wild West Hacking Fest 2024 - Arsenal
  • 非常感谢 Soumyadeep Da 即 @SoumyadeepBas12 鼓励我申请这些会议,否则我不会这么做 :)
  • 非常感谢 Faran 即 @Chrollo_l33t 帮助我制作此工具的演讲幻灯片和 PPT :)

功能:

  1. 间接动态系统调用。(MITRE ATT&CK TTP:T1106)
  2. 通过修改版 TartarusGate 方法对 SSN + 系统调用地址进行排序
  3. 通过 APC Early Bird 进行远程进程注入,以切断 EDR 的遥测捕获。(MITRE ATT&CK TTP:T1055.004)
  4. 生成一个牺牲进程作为目标进程,不干扰环境中已打开的进程。
  5. 对生成的牺牲进程启用 ACG(任意代码保护)/BlockDll 缓解策略。
  6. PPID 欺骗(MITRE ATT&CK TTP:T1134.004)
  7. 从 TIB 解析 API 和 DLL(直接通过偏移(从 TIB)-> TEB -> PEB -> 解析 Nt API)(MITRE ATT&CK TTP:T1106)
  8. 受诅咒的 Nt API 哈希(MITRE ATT&CK ID:S0574)

额外福利:如果拥有管理员权限 =>

  1. 通过 杀死 EventLog 服务线程来禁用事件日志(MITRE ATT&CK TTP:T1562.002)

缺点:如果线程恢复,事件日志挂起期间发生的所有事件会再次被记录!

所以,决定直接杀死它们!

“这比挂起更具侵入性,但决定权始终在操作者手中。此外,杀死线程会在内核层面被记录。” - @SEKTOR7net

在间接系统调用植入中仅杀死这些线程时,遇到了一个错误。我无法获取 “eventlog” 的 SubProcessTag 值。所以决定杀死所有线程,即杀死整个进程(负责的 svchost.exe)。是的,这产生了 一个 IOC!。

=

1. EDR/Ring-3/用户态钩子绕过

2. 系统调用和返回语句从 ntdll.dll 的内存中执行

3. 基于调用栈中返回地址检查的 EDR 检测可以被绕过。

编译:

直接通过 VS 编译器:

image

还要添加 /MT 编译器标志!=> 将 CRT 函数静态链接到二进制文件中(是的,你猜对了,这会使植入体臃肿)

image

  1. 也可以通过 compile.bat(推荐选项 1)
./compile.bat

使用方法:

PS C:> .\x64\Release\indirect.exe
[!] 错误!
[->] 语法:.\x64\Release\indirect.exe <要欺骗的PPID>

运行效果:

https://github.com/reveng007/DarkWidow/assets/61424547/62a90c5b-84af-4389-8ddc-9f7926debdcf

在 Sofos XDR 端点上成功执行且未产生告警:

SofosXDREvade


进一步改进:

  1. PPID 欺骗(Emotet 方法)
  2. 更隐蔽 的事件日志禁用使用场景!

部分代码及提供帮助的链接:

  1. TIB:

    • https://en.wikipedia.org/wiki/Win32_Thread_Information_Block
    • https://www.wikiwand.com/en/Win32_Thread_Information_Block
  2. GS 和 FS 寄存器:

    • https://stackoverflow.com/questions/39137043/what-is-the-gs-register-used-for-on-windows
    • https://stackoverflow.com/questions/10810203/what-is-the-fs-gs-register-intended-for#:~:text=The%20registers%20FS%20and%20GS,to%20access%20thread%2Dspecific%20memory.
  3. PEB LDR 结构:

    • BlackHat - 恶意软件作者不想让你知道的事 - 隐避的空进程注入 作者 @monnappa22

    • 来自上述链接的进程内存图片:
      alt text

    • 来自 labs.cognisys.group,作者 @D1rkMtr 的博客:
      alt text

  4. TIB -> TEB -> PEB -> 解析 Nt API 和 API 哈希

    • https://stackoverflow.com/questions/41277888/iterating-over-peb-dllname-shows-only-exe-name

    • https://doxygen.reactos.org/d7/d55/ldrapi_8c_source.html#l01124

    • labs.cognisys.group,作者 @D1rkMtr 的博客

    • 来自上述链接的代码片段图片,我用于动态解析 API 而无需硬编码偏移:
      alt text

    • 我应用的 API 哈希代码:


#include <stdint.h>
#include <stdio.h>
#include <Windows.h>

DWORD64 djb2(const char* str)
{
	DWORD64 dwHash = 0x7734773477347734;
	int c;

	while (c = *str++)
		dwHash = ((dwHash << 0x5) + dwHash) + c;


	return dwHash;
}

int main(int argc, char** argv)
{
	if (argc < 2)
	{
		printf("[!] Wrong!\n");
		printf("[->] Syntax: .\\%s <NTFuncName>\n\n", argv[0]);
		return 1;
	}

	const char* string = argv[1];

	DWORD64 hashvalue = djb2(string);

	printf("Hash Value: 0x%llX\n", hashvalue);

	return 0;
}

  1. ACG(任意代码保护)/BlockDll 缓解策略:

    • 链接:
    • 保护你的恶意软件 作者 @xpn
    • Wraith 作者 @winterknife
    • spawn 和 HOLLOW 作者 @0xBoku alt text
  2. PPID 欺骗检测:

    • PPID 欺骗检测 作者 @spotheplanet
    • 如果有时间,我会在此部分添加检测内容!-> [剩余..............................................!]
  3. Moneta 检测和 PESieve 检测:\

    • Moneta:
      alt text

    • PESieve:
      alt text

  4. Capa 扫描:
    alt text

  5. 植入进程的线程栈外观:

植入进程合法 Cmd 进程
alt textalt text

由此可知,通过在间接系统调用 POC 的 ntdll.dll 内存中执行返回指令,可以成功欺骗返回地址,使 ntdll.dll 位于调用栈顶部,EDR 会认为其合法性更高。 - @VirtualAllocEx 来自 DirectSyscall Vs Indirect Syscall
同时感谢 @peterwintrsmith!

  1. 指令回调规避:使用了这个 POC - syscall-detect 作者 winternl_t

image

  1. 我使用的事件日志配置:

alt text alt text

  1. 设置 SeDebugPrivilege:
    从 这里: alt text 到 这里: alt text
下载工具