PEB伪装

简介

PEB伪装技术是一种安全测试和系统渗透技术,用于绕过某些基于进程属性检查的安全措施。它通过修改当前进程的进程环境块(PEB)中的信息来实现:

  • 获取当前进程的 PEB:通过系统调用或内联汇编获取 PEB 指针。

  • 修改 PEB 中的数据:更改 PEB 中的关键信息,如进程名称、命令行参数等,使其看起来像是另一个受信任的进程(如 explorer.exe)。

  • 伪装模块列表:修改 PEB 的模块链表中的条目,改变模块的名称和路径。

代码实现1

实现思路

1.获取当前进程PEB

// 获取PEB的地址
PPEB NtGetPEB() {
#ifdef _M_X64
    return (PPEB)__readgsqword(0x60);
#elif _M_IX86
    return (PPEB)__readfsdword(0x30);
#else
#error "This architecture is currently unsupported"
#endif
}

2.定义PEB相关结构体

代码中定义了 _PEB, _PEB_LDR_DATA, _RTL_USER_PROCESS_PARAMETERS, 和 _LDR_DATA_TABLE_ENTRY 等结构体,用于操作 PEB 和相关数据, 以下代码演示其中一部分

3.构造系统进程的路径

4.通过临界区修改PEB

使用 RtlEnterCriticalSection 函数进入PEB的临界区,将PEB 中的 ImagePathNameCommandLine 修改为系统进程的路径

随后遍历LDR链表,查找到当前可执行程序所在模块,并将其FullDllNameBaseDllName 修改为系统进程的路径

最后使用RtlLeaveCriticalSection函数离开临界区

完整代码

测试效果

使用ProcessExplorer查看Image选项,可发现其pathCommand Line的值都被修改成系统进程路径了

image-20231123195720885

代码实现2

完整代码

除了上述方法可获取PEB地址之外,还可以通过NtQueryInformationProcess函数获取PROCESS_BASIC_INFORMATION 结构,此结构包含PEB的地址

最后更新于