
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右键菜单里那个熟悉的注入DLL选项升级之后找不到了你不是一个人。SystemInformer 的 DLL注入能力一直在代码库里挪窝翻旧教程只会越看越晕。这篇不讲故事直接把整条链路拆成三层——入口、通信、内核——看完你在任何版本里都能顺着文件路径快速定位。入口找不到了先把链路拆开先说结论SystemInformer 的 DLL注入主体活在用户态它只是把把路径搬进对方内存、借对方的 LoadLibraryW 跑起来这套活编排好真正需要内核出手的是操作受保护进程时的特权内存读写。把这件事按谁动手分成三层你就不会迷路。SystemInformer DLL注入三层架构全景下面这张图是全文地图后文按层展开每个节点对应一个具体文件。三层职责一句话讲清入口层负责发起注入通信层负责把普通 API 变成特权操作内核驱动负责替你在受保护进程里动内存。三者是串联关系不是并列。逐层拆解注入链路界面层——你点的那一下到底调了什么入口就在 phlib/nativethread.c 的PhLoadDllProcess远程线程版和PhLoadDllProcessApcThreadAPC 版。你点的那一下最终落到这两个函数。核心三步如下// 解析目标进程自己 kernel32 的 LoadLibraryW 地址 PhGetProcedureAddressRemote(ProcessHandle, kernel32, LoadLibraryW, loadLibraryW, NULL); // 把 DLL 路径(宽字符)写进目标进程内存 PhWriteVirtualMemory(ProcessHandle, fileNameBaseAddress, FileName-Buffer, len, NULL); // 以 LoadLibraryW 为入口、路径为参数远程拉起一个线程 PhCreateUserThread(ProcessHandle, NULL, THREAD_ALL_ACCESS, 0,0,0,0, loadLibraryW, fileNameBaseAddress, threadHandle, NULL);说白了就是经典 LoadLibraryW 远程线程套路地址、路径、线程一个不少APC 版则把拉线程换成往对方线程队列塞 APC更不易被察觉。旧版CreateRemoteThread的痕迹还躺在 SystemInformer/heapinfo.c已注释仅供对照。界面层只负责把参数打包传下去真正的活是下一层干的。通信层——用户态和内核之间怎么传话别被一堆 KPH 缩写吓到这层其实就干一件事把一次系统调用封装成结构体走命名端口发给驱动。发送逻辑在 phlib/kph.cKphSendMessageKPH_PORT_NAME报文结构在 kphlib/include/kphmsgdefs.h。以内存读为例typedef struct _KPHM_READ_VIRTUAL_MEMORY { NTSTATUS Status; // 返回码, 调用方据此判断成败 HANDLE ProcessHandle; // 操作哪个进程 PVOID BaseAddress; // 读哪段地址 PVOID Buffer; // 结果落到哪 SIZE_T BufferSize; // 读多少 PSIZE_T NumberOfBytesRead;// 实际读到多少 } KPHM_READ_VIRTUAL_MEMORY, *PKPHM_READ_VIRTUAL_MEMORY;这个结构体本质上就是个消息头参数写内存版KPHM_WRITE_VIRTUAL_MEMORY字段同理。普通进程走系统自带 API 就够一旦目标是受保护进程PhWriteVirtualMemory会自动改走这条端口把活转给内核。消息打包好了但谁来执行看内核层。内核层——驱动里真正动手的地方内核侧是 KSystemInformer/ 驱动它调用 KSystemInformer/ksidll.c 提供的特权原语安全卸载 APC、工作项、DPC、最小系统进程。ksidll.def 的导出表就是这层的手LIBRARY ksi.dll EXPORTS KsiInitialize KsiInitializeApc KsiInsertQueueApc KsiInitializeWorkItem KsiQueueWorkItem KsiInitializeDpc KsiInitializeSystemProcess这些导出不是注入 API 本身而是让驱动能安全地在系统里动手的底层积木比如保证驱动卸载时未完成的 APC 仍能收尾。注入时受保护进程的内存读写就是由这一层代为执行。功能点文件位置速查表功能点所在模块关键文件备注注入入口远程线程/APC用户态 phlibphlib/nativethread.cPhLoadDllProcess / ApcThread端口消息发送用户态 phlibphlib/kph.cKphSendMessage、KPH_PORT_NAME消息结构体定义kphlibkphlib/include/kphmsgdefs.hKPHM_READ/WRITE_VIRTUAL_MEMORY特权内存/进程操作内核驱动KSystemInformer/驱动内处理 KPH 消息内核原语APC/DPC/工作项内核驱动KSystemInformer/ksidll.c见 ksidll.def 导出表旧版 CreateRemoteThread 痕迹主程序SystemInformer/heapinfo.c已注释仅供对照找不到入口先查这张表比翻代码快。动手跑一遍注入启动 SystemInformer在进程列表里选中目标进程。打开该进程的操作入口上下文菜单/动作选择 DLL 注入。选中要注入的 .dll 文件并确认。触发后走PhLoadDllProcess解析地址 → 写路径 → 拉远程线程 → 等待返回。若目标受保护内存读写会自动改走 KPH 端口到内核驱动执行。如果界面和文中对不上回到第四节查表。边界与坑主要面向现代 Windowsx64/x86操作受保护进程需要管理员/提升权限。最常见的坑目标 32/64 位或运行时库地址不匹配导致 LoadLibraryW 解析失败或注入线程等待超时卡住。要动手改的话先看 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),仅供参考