SystemInformer:3 个文件定位 DLL 注入入口与内存监控链路

SystemInformer:3 个文件定位 DLL 注入入口与内存监控链路 SystemInformer3 个文件定位 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 后旧版熟悉的注入入口去哪了、内存监控能力落在哪些文件里本文直接对着仓库源码梳理协议、封装、驱动能力边界看 3 个文件就能理清。 能力版图速览从界面到驱动的 4 层进程调试与内存监控相关的能力在 SystemInformer 中不再集中在单个文件里而是分布在 GUI、封装、协议、内核四层。做内存监控或注入类操作前不需要通读整个仓库只需要看懂下面这张映射表层级关键文件职责GUI 层SystemInformer/memedit.c进程内存编辑器内存监控的直接操作入口GUI 层SystemInformer/heapinfo.c堆显示与分析残留早期远程线程代码的注释phlib 封装层phlib/kph.c组装并发送消息按需加载驱动服务phlib 封装层phlib/include/kphcomms.hALPC 私有端口收发与回调注册kphlib 协议层kphlib/include/kphmsg.h消息 ID 枚举与消息结构体定义kphlib 协议层kphlib/kphmsg.c消息初始化与版本校验内核驱动层KSystemInformer/Apc、WorkItem、Dpc 入队等内核原语 关键模块拆解三个文件各代表一层按从底到上的顺序看。从 ksidll.def 导出表看驱动能力边界.def 导出表是内核驱动最诚实的功能清单。LIBRARY ksi.dll EXPORTS KsiInitialize KsiInsertQueueApc KsiQueueWorkItem KsiInitializeDpc ...KsiInsertQueueApc、KsiQueueWorkItem这类函数就是向远程线程插入代码执行点的原语DLL 注入依赖的正是这一层能力。同时要注意导出表里没有KsiSendMessage之类的名字消息通道实际走的是 ALPC 私有端口所以在仓库里搜这个名字找不到实现。kphmsg.h 消息表协议到底能做什么用户态与内核共享的协议定义是理解整个通道的钥匙。typedef enum _KPH_MESSAGE_ID { // // PH - KPH // KphMsgGetInformerSettings, KphMsgOpenProcess, KphMsgReadVirtualMemory, KphMsgOpenThread, KphMsgTerminateProcess, ... } KPH_MESSAGE_ID, *PKPH_MESSAGE_ID;枚举里每一项对应一种可发给驱动的请求读写内存、打开进程线程句柄、取栈回溯、结束进程。KPH_MESSAGE结构体用固定头版本、消息 ID、时间戳加按方向划分的 union 组织并用C_ASSERT把 64 位下的大小锁死在 0x4000防止用户态与内核态两侧结构错位。phlib/kph.c把连接建立起来负责连得上这一步回答了一个常见困惑功能不可用时先查驱动。status KphCommsStart(portName, Config-Callback, Config-RingBufferLength); if (NT_SUCCESS(status) || (status STATUS_ALREADY_INITIALIZED)) return status; // Load the driver, and try again. if (Config-EnableNativeLoad || Config-EnableFilterLoad) { status KsiLoadUnloadService(Config, TRUE); ...先尝试连接已在运行的驱动失败且允许自动加载时才通过服务机制加载 KSystemInformer 驱动再重试。所以内核相关功能失灵时第一排查对象就是驱动服务是否驻留。⚙️ 从源码到操作的调用链以目前实际在用的内存监控为例一次操作依次经过四个站点GUI 层在进程列表选中进程右键打开内存编辑器界面逻辑在 SystemInformer/memedit.c封装层调用 phlib/kph.c 中的KphReadVirtualMemory()把目标地址、缓冲区填入KphMsgReadVirtualMemory消息通信层KphCommsSendMessage()声明于 phlib/include/kphcomms.h把消息经 ALPC 端口发出驱动层KSystemInformer 在内核态接收并处理处理逻辑集中在 KSystemInformer/comms_handlers.c注入侧则不同ksidll.def已提供代码插入点原语但当前版本的主界面没有现成的注入对话框。搜CreateRemoteThread只能命中 SystemInformer/heapinfo.c 第 1225 行附近的注释残片——早期用户态远程线程路线已被搁置能力下沉到了驱动。升级后快速定位入口的排查路径先查驱动服务所有内核功能以 KSystemInformer 服务驻留为前提。功能无响应时先在服务管理器确认驱动状态源码中可用KphCommsIsConnected()对照判断按函数名追链路搜KphMsgReadVirtualMemory协议定义→KphReadVirtualMemory封装→KphCommsSendMessage发送→comms_handlers.c驱动端处理换个函数名即可套用快速摸清任意功能的完整链路用导出表判边界驱动实际暴露的内核能力以 KSystemInformer/ksidll.def 清单为准。听到的名字若不在表中说明当前版本没有不必花时间找入口想基于 SystemInformer 自建监控或注入工具时最快路径是先读 kphlib/include/kphmsg.h 吃透协议再对照ksidll.def确认内核侧实际提供什么避免在已不存在的入口上空耗。参与代码改进的规范见 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),仅供参考