SystemInformer DLL注入实现位置、原理与验证完整指南

发布时间:2026/9/11 5:22:11
SystemInformer DLL注入实现位置、原理与验证完整指南 SystemInformer DLL注入实现位置、原理与验证完整指南【免费下载链接】systeminformerA free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you by Winsider Seminars Solutions, Inc. https://windows-internals.com项目地址: https://gitcode.com/GitHub_Trending/sy/systeminformer升级后右键菜单里找不到的那个注入入口其实还在只是不再叫这个名字。来自 Process Hacker 时代的 SystemInformer 把 DLL注入这类操作拆进了四层代码内核驱动、内核消息层、用户态封装层和界面插件。这份指南直接给出每层的文件位置、请求如何跨边界传递以及一套可执行的验证流程帮你在十五分钟内确认注入链路是否完整。快速定位先看结论四个模块、一条通道职责边界如下。功能入口所在文件/模块一句话职责注入相关消息类型定义kphlib/include/kphmsg.h枚举内核通道支持的消息如KphMsgReadVirtualMemory内核驱动消息处理KSystemInformer/内核侧收消息、执行跨进程内存读写与线程相关操作用户态通道收发phlib/kphcomms.c校验消息头后经 minifilter 端口用户态与内核的命名通信端口收发用户态 API 封装phlib/kph.c提供KphReadVirtualMemory等 NTSTATUS 风格接口界面菜单注册plugins/ExtendedTools/main.c向主程序菜单插入工具 → System子菜单用户可见入口分层拆解内核通信层一条消息如何被定义kphlib 是内核与用户态共用的消息定义库同一份代码分别编进驱动和主程序保证两端对消息布局的理解一致。消息类型的枚举在kphlib/include/kphmsg.h中跨进程内存操作和线程生命周期钩子都在这里// kphlib/include/kphmsg.h KphMsgReadVirtualMemory, ... KphMsgHandlePreCreateThread, KphMsgHandlePostCreateThread,驱动侧的入口清单同样可查。KSystemInformer/ksidll.def列出 ksi.dll 的导出符号包括KsiInitialize、KsiQueueWorkItem、KsiSystemProcess等。值得注意的是这里没有独立的注入导出——内核侧只暴露基础设施具体动作全部走消息这比按动作逐个导出的老式设计更容易审计。用户态封装层谁负责把消息送进内核答案在 phlib 的两个文件里。phlib/kphcomms.c的KphCommsSendMessage是唯一的发送点先做消息头校验再交给PhFilterSendMessage// phlib/kphcomms.c if (!KphpCommsFltPortHandle) return STATUS_FLT_NOT_INITIALIZED; if (!NT_SUCCESS(status KphMsgValidate(Message))) return status; status PhFilterSendMessage( KphpCommsFltPortHandle, Message, ...上层应用则面向phlib/kph.c里的函数编程如KphReadVirtualMemory、KphOpenProcess它们把消息构造和端口调用都藏起来。这条路线替代了早期的用户态组合在SystemInformer/heapinfo.c中还能看到被整体注释掉的CreateRemoteThread调用目标进程里起远程线程、以RtlDestroyHeap为入口这正是旧做法的遗迹。用户态远程线程依赖目标进程状态良好且行为模式容易被现代防护软件识别迁到内核通道后由驱动统一执行行为特征也更收敛。// SystemInformer/heapinfo.c已注释的历史实现 // if (!(threadHandle CreateRemoteThread( // processHandle, // NULL, // 0, // PhGetModuleProcAddress(Lntdll.dll, RtlDestroyHeap), // HeapHandle,插件层用户在界面上摸到的入口ExtendedTools 插件在plugins/ExtendedTools/main.c中注册了四个菜单回调其中ProcessMenuInitializingCallback负责进程右键菜单MainMenuInitializingCallback则向主菜单的工具页插入System子菜单。当前版本没有独立的注入 DLL菜单项能力以远程内存读写 线程操作消息的零件形式存在界面层的动作由插件按需组合。动手验证按下面四步走一遍链路是否完好就清楚了。用 Windows 驱动签名流程构建并加载内核驱动签名清单见KSystemInformer/KSystemInformer.inf。启动 SystemInformer确认顶部工具菜单下出现System子菜单——这是 ExtendedTools 插件加载成功的直接证据。在进程列表选中目标进程右键打开进程菜单确认内存相关的查询与编辑项可用。调用远程内存读取接口读目标进程一个已知模块的头部比对返回内容与磁盘 PE 一致。预期结果第 4 步返回的字节序列与本地文件比对无差异说明消息从用户态经 minifilter 端口进入驱动、再原路返回的闭环是通的。失败情形若任意接口返回STATUS_FLT_NOT_INITIALIZED说明KphpCommsFltPortHandle为空即驱动未加载或端口未建立。先检查驱动服务状态再看phlib/kphcomms.c中KphCommsStart的返回码端口建立成功后用KphCommsIsConnected复测。常见问题为什么右键菜单里找不到注入 DLL这一版本没有该独立菜单项能力被拆成内存读写和线程操作两类消息界面入口是工具菜单下由 ExtendedTools 插件注册的 System 子菜单。ksidll.def 里为什么没有 KsiSendMessage 之类的导出导出的Ksi符号只是内核基础设施APC、DPC、工作项等。真正的用户态→驱动请求不走这些导出而是由KphCommsSendMessage经 minifilter 端口发送两者是不同通道。CreateRemoteThread 的实现彻底删了吗没有SystemInformer/heapinfo.c保留了整段注释代码作为历史痕迹但当前构建不再执行。相关逻辑已迁移到内核通道由驱动侧统一完成。如何确认通信通道已建立调用KphCommsIsConnectedphlib/kphcomms.c返回 TRUE 即端口就绪返回 FALSE 时按动手验证一节排查驱动服务。远程内存读取的接口签名在哪看KphReadVirtualMemory的实现在phlib/kph.c对应的消息布局在kphlib/include/kphmsg.h的KPHM_READ_VIRTUAL_MEMORY联合体中两处对照阅读最清楚。延伸阅读KSystemInformer/内核驱动源码与签名清单kphlib/内核/用户态共用消息定义库phlib/用户态支持库含通道收发与 API 封装plugins/ExtendedTools/提供工具菜单界面的插件HACKING.md构建与开发环境说明CONTRIBUTING.md贡献流程与规范【免费下载链接】systeminformerA free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you by Winsider Seminars Solutions, Inc. https://windows-internals.com项目地址: https://gitcode.com/GitHub_Trending/sy/systeminformer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考