Process Hollowing 的另一种用法 - Process Overwriting
项目地址:https://github.com/hasherezade/process_overwritingProcess Overwriting 是一个 PE 注入技术,与 Process Hollowing 和 Module Overloading 密切相关。
Process Hollowing 又名 RunPE,是一个出现比较早且受欢迎的 PE 注入技术,虽然有几种不同的变体玩法,但都存在着以下共同点:
[*]以挂起的方式创建一个进程;
[*]将 PE 模块写入到本身内存当中;
[*]重定向到新模块;
[*]恢复线程;
Process Hollowing 不需要手动加载 payload 的 imports,在上面步骤 3 中,windows 加载器会将我们要植入的 PE 作为进程的主要模块,并在其恢复执行时自动加载 imports。
为了让植入的 PE 被 windows 加载器识别,其 Module Base 必须在 PEB 中设置,通常为以下列两种方式之一:
[*]在最经典的变体玩法中,原始 PE 未从内存映射,而新的 PE 映射到它相同地址上的位置;
[*]在另一个常见玩法中,旧模块保持原样,另一个 PE 映射到新的内存区域,然后手动将新模块的基地址写入到 PEB (链接);
作为这些经典实现,我们得到了一个作为主模块运行的 payload,但它被映射为 MEM_PRIVATE (而不是像通常加载的 PE 那样的 MEM_IMAGE)。为了获得映射为 MEM_IMAGE 的 payload,可以使用一些密切相关的技术,例如 Transacted Hollowing 或 Ghostly Hollowing。
Process Overwriting 是解决这个问题的另一种方法。
与经典的 Process Hollowing 相比,我们不是没映射原始 PE,而是重新写入它,没有分配新内存:我们正在使用最初为进程的主模块分配的内存。
优点:
植入的 PE 看起来像是由 windows 加载器加载的
[*]映射的标志为 MEM_IMAGE;
[*]分为具有特定访问权限的部分;
[*]image 被命名;
方便加载
[*]无需在注入之前手动重新定位被植入的 PE,windows 加载器将会处理此问题 (而在经典的 Process Hollowing 中,必须重定位模块);
[*]无需填写 imports (就像在 Process Hollowing 的每个变体玩法一样);
[*]无需在进程中分配新内存;
缺点:
[*]如果目标启用了 GFG (控制流保护),则它不起作用 (但可以在进程创建禁用它);
[*]目标的 ImageSize 不得小于 payload 的 ImageSize (请记住,我们仅使用已分配的内存) - 此限制不会出现在 Process Hollowing 的变体玩法上;
[*]可以通过将内存的模块与相应文件进行比较来检测 (PE-sive 检测) - 就像 Process Hollowing 的每个变体玩法;
Demo
Demo (demo.bin) payload 被注入到 windows 计算器中 (默认):
在内存中表现的形式 (Process Hacker):
{:5_150:} 优质内容 666
页:
[1]