如何在过滤器驱动程序中读取当前进程的PE头

How read PE header of current process in filter driver

本文关键字:进程 PE 读取 过滤器 驱动程序      更新时间:2023-10-16

我调用PsGetCurrentProcess以获得PEPROCESS结构,我如何在内核模式下读取我的进程的PE头,类似于在用户模式下这样做的代码?我的目标是从PE头获取版本信息。

我建议在创建流程时获取此信息。您可以使用PsSetCreateProcessNotifyRoutine(Ex)来在创建新进程时收到通知。当PE文件(包括进程的主可执行文件)映射到虚拟地址空间时,PsSetLoadImageNotifyRoutine会通知您。

当进程完全初始化并运行时,从进程内存中读取版本信息是一个坏主意。进程完全控制它的PE文件映射,所以它可以伪造版本信息。更重要的是,您只能以低IRQL (PASSIVE_LEVEL)访问用户模式内存。也可以在APC_LEVEL/DISPATCH_LEVEL调用Minifilter回调