我正在从流程中转储pe
文件,想知道它是如何在pe
中找到memory
文件的。
起初,我认为它正在寻找DOS
字符串,但是软件指出它可以找到根据文档未加载的pe
文件,因此这是不可能的。 / p>
答案 0 :(得分:0)
如果使用Windows OS加载程序或LoadLibrary以正常方式加载已加载的模块,则有很多方法可以在内存中查找已加载的模块,因为进程环境块或PEB包含指向名为'Ldr'的PEB_LDR_DATA结构的指针,该结构包含链接的所有已加载模块的列表。这是Windows操作系统在使用API ToolHelp32Snapshot时使用的已加载模块的列表。
如果将模块从此Ldr.InMemoryOrderList中移除或使用手动映射例程加载,则将无法执行此操作,在这种情况下,您可以通过扫描内存中可预测的PE标头来检测模块。
如果删除了PE标头,并且模块不在链接列表中,则这将变得更加困难。您将需要使用某种启发式方法来检测PE文件(例如DLL)的可预测性。
例如,您具有该过程的PE文件,因此您知道完成了哪些导入和重定位。您知道了加载了哪些模块以及在何处,因此,如果您发现这些位置之外的内存页面已将页面保护设置为可执行文件, ,那么您可以确信它们属于隐藏模块或至少未知模块。
这里有2个出色的回购协议,可以使您对主题Hollows Hunter和PE-Sieve
有所了解