我调用PsGetCurrentProcess
来获取PEPROCESS
结构,如何在内核模式下读取我的进程的PE头,类似this代码在用户模式下执行此操作?
我的目标是从PE头获取版本信息。
答案 0 :(得分:1)
我建议在创建流程时获取此信息。您可以使用PsSetCreateProcessNotifyRoutine(Ex)
在创建新进程时收到通知。当PE文件(包括进程'主可执行文件)映射到虚拟地址空间时,PsSetLoadImageNotifyRoutine
会通知您。
当进程完全初始化并运行时,从进程的内存中读取版本信息是一个坏主意。该进程可以完全控制其PE文件映射,因此可以伪造版本信息。更重要的是,您只能在低IRQL(PASSIVE_LEVEL)下访问用户模式内存。可以在APC_LEVEL / DISPATCH_LEVEL调用Minifilter回调。