如何在过滤器 driver 中读取当前进程的 PE header
How read PE header of current process in filter driver
我调用 PsGetCurrentProcess
来获得一个 PEPROCESS
结构,我如何在内核模式下读取我的进程的 PE header,类似 this 的代码在用户模式下?
我的目标是从 PE header.
获取版本信息
我建议在创建进程时获取此信息。您可以使用 PsSetCreateProcessNotifyRoutine(Ex)
在创建新进程时收到通知。 PsSetLoadImageNotifyRoutine
当 PE 文件(包括进程的主要可执行文件)映射到虚拟地址 space 时通知您。
当进程完全初始化和运行时,从进程的内存中读取版本信息是个坏主意。该进程可以完全控制其 PE 文件映射,因此可以伪造版本信息。更重要的是,您只能在低 IRQL (PASSIVE_LEVEL) 下访问用户模式内存。 Minifilter 回调也可以在 APC_LEVEL/DISPATCH_LEVEL 调用。
我调用 PsGetCurrentProcess
来获得一个 PEPROCESS
结构,我如何在内核模式下读取我的进程的 PE header,类似 this 的代码在用户模式下?
我的目标是从 PE header.
我建议在创建进程时获取此信息。您可以使用 PsSetCreateProcessNotifyRoutine(Ex)
在创建新进程时收到通知。 PsSetLoadImageNotifyRoutine
当 PE 文件(包括进程的主要可执行文件)映射到虚拟地址 space 时通知您。
当进程完全初始化和运行时,从进程的内存中读取版本信息是个坏主意。该进程可以完全控制其 PE 文件映射,因此可以伪造版本信息。更重要的是,您只能在低 IRQL (PASSIVE_LEVEL) 下访问用户模式内存。 Minifilter 回调也可以在 APC_LEVEL/DISPATCH_LEVEL 调用。