如何通过模块枚举和特征比对识别程序非法注入DLL行为?
- 内容介绍
- 文章标签
- 相关推荐
本文共计943个文字,预计阅读时间需要4分钟。
直接提出结论,不涉及图形解释、冗余和超过100字:
用 EnumProcessModules 获取当前进程所有已加载模块
Windows 不保证 EnumProcessModules 返回顺序,且可能跳过某些特殊映射(如反射式注入的内存 DLL)。必须配合 GetModuleFileNameEx 和 GetModuleInformation 获取基址、大小、路径三要素。
- 若
GetModuleFileNameEx返回空字符串或路径为"\??\C:\Windows\System32\ntdll.dll"类似格式,需进一步查证——某些注入会伪造路径但实际未映射磁盘文件 - 64 位进程调用时,
HMODULE是 8 字节指针,传给GetModuleInformation的lpmodinfo必须指向MODULEINFO结构体,不能误用 32 位偏移计算 - 常见错误:未检查
EnumProcessModules返回值是否为 0,导致后续读取越界或崩溃
识别无文件模块(fileless module)的关键判断点
合法系统 DLL 几乎都映射自磁盘,而反射式注入、直接内存加载的 DLL 往往不关联真实路径。但注意:GetModuleFileNameEx 失败 ≠ 一定非法——.NET Core 的原生 AOT 模块也可能无路径。
本文共计943个文字,预计阅读时间需要4分钟。
直接提出结论,不涉及图形解释、冗余和超过100字:
用 EnumProcessModules 获取当前进程所有已加载模块
Windows 不保证 EnumProcessModules 返回顺序,且可能跳过某些特殊映射(如反射式注入的内存 DLL)。必须配合 GetModuleFileNameEx 和 GetModuleInformation 获取基址、大小、路径三要素。
- 若
GetModuleFileNameEx返回空字符串或路径为"\??\C:\Windows\System32\ntdll.dll"类似格式,需进一步查证——某些注入会伪造路径但实际未映射磁盘文件 - 64 位进程调用时,
HMODULE是 8 字节指针,传给GetModuleInformation的lpmodinfo必须指向MODULEINFO结构体,不能误用 32 位偏移计算 - 常见错误:未检查
EnumProcessModules返回值是否为 0,导致后续读取越界或崩溃
识别无文件模块(fileless module)的关键判断点
合法系统 DLL 几乎都映射自磁盘,而反射式注入、直接内存加载的 DLL 往往不关联真实路径。但注意:GetModuleFileNameEx 失败 ≠ 一定非法——.NET Core 的原生 AOT 模块也可能无路径。

