news 2026/9/11 2:50:05

如何找到SystemInformer的DLL注入入口:一份源码功能定位指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何找到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

在 SystemInformer 的源码中做 DLL 注入相关功能的源码定位时,最常被卡住的是:早期代码被注释、内核接口换了名字、插件目录里也找不到注入文件。本文带你按"界面入口→用户态接口→内核通信→驱动导出"的链路,用 20 分钟定位到内核模式下每一层的职责与文件路径,并给出误判排查清单。

你会得到什么:

  • 一条可复现的定位链路:从 UI 操作一路追到KSystemInformer/ksidll.def的驱动导出表
  • 三层架构的职责拆解:谁负责界面、谁封装调用、谁执行内核操作
  • 一份常见误判排查清单,避免把通信库、消息结构体当成注入本体的实现

一、为什么你找不到旧的注入入口

老版本 Process Hacker / SystemInformer 的部分功能直接用 Win32 API 在目标进程里开线程。这一痕迹现在只剩注释:SystemInformer/heapinfo.c约 1225 行处保留了一段被注释掉的CreateRemoteThread调用,它对应的是早期"在目标进程远程执行 ntdll 函数"的技术路线,如今仅作考古参考。

你找不到功能入口,通常是因为两件事同时发生了:其一,旧的远程线程逻辑被整体注释停用;其二,同类能力被搬进了内核模式组件。也就是说,当前版本的"入口"不再是一段可搜索的注入函数名,而是一条分层链路:

图中每个节点都对应一个真实文件:phlib/kph.c封装与内核的通信,kphlib/include/kphmsg.h定义消息结构,ksidll.def声明驱动对外导出的符号,SystemInformer/phsvc/目录下的svcmain.c负责服务与驱动的连接管理。

二、三层架构:谁负责、在哪里、为什么

第一层:界面与插件(做什么的壳)。主程序的进程树、右键菜单等交互集中在SystemInformer/mainwnd.cproctree.c。需要说明一个边界:原文常说的plugins/ExtendedTools/inject.c在当前仓库中并不存在,以当前仓库实现为准,注入类操作并不以独立"注入器"文件形态出现,而是通过下面的通用内核接口组合实现。

第二层:用户态接口库(把复杂调用变简单)。phlib/kph.c是一组面向内核功能的门面函数,每个都只干一件事:

  • KphOpenProcess:以指定权限打开目标进程句柄
  • KphReadVirtualMemory:读取目标进程虚拟内存
  • KphOpenThreadProcess:定位进程内的线程
  • KphOpenThread:打开线程对象

这层存在的意义是:上层代码不必关心 ALPC 端口、消息序列化、状态回读这些细节。

第三层:内核通信与驱动(真正执行的地方)。消息协议在kphlib/include/kphmsg.h(核心结构KPH_MESSAGE)和kphlib/kphmsg.c中定义,驱动侧的导出清单在KSystemInformer/ksidll.def中。这里有一个值得注意的事实:该导出表包含的是KsiInitializeKsiQueueWorkItemKsiInsertQueueApc一类符号,而不是某些资料里写的KsiLoadDriverKsiSendMessage——核对导出表时应以仓库文件为准。

三、常见误判与排查清单

定位过程中,以下模块最容易被误认成"最终实现":

你看到的东西容易的误判实际职责
kphlib/kphmsg.c以为是注入算法所在只是消息序列化与协议定义
phlib/kph.c以为是全部逻辑它只是调用门面,执行方在内核
ksidll.def里的符号名以为符号名=功能名它只决定哪些函数对外可见
heapinfo.c的注释代码以为功能还在用该段已被停用,仅作历史参考

排查时的检查清单:

  • Kph前缀函数名,确认用户态调用了哪些门面
  • 打开ksidll.def对照导出表,确认驱动实际暴露的能力
  • 确认SystemInformer/phsvc/服务是否在跑——没有服务连接,所有内核调用都不会到达驱动
  • 涉及插件的行为,去对应插件的main.c注册入口看它挂到了哪个菜单项

四、安全与合规边界

这套链路的能力(跨进程内存读写、远程线程执行)是把双刃剑,适合的使用场景是:系统维护时的受控操作、安全审计中对可疑进程的取证分析、内核模式编程的学习与架构研究。

需要明确的边界:本文只讨论"功能在哪里、如何分层",不提供针对受保护进程的绕过技巧,也不描述如何对抗安全软件的检测。在他人系统上使用任何跨进程写入能力前,请确认你拥有明确授权;这既是法律要求,也是这类工具的设计初衷——它是监控与调试工具,不是攻击工具。

相关文件与资源

  • 用户态门面函数:phlib/kph.c,负责与内核通信的封装
  • 消息协议结构:kphlib/include/kphmsg.h,定义KPH_MESSAGE等核心结构
  • 驱动导出表:KSystemInformer/ksidll.def,声明驱动对外符号
  • 本地服务组件:SystemInformer/phsvc/,管理服务与驱动的连接
  • 历史实现参考:SystemInformer/heapinfo.c,含已停用的旧远程线程代码
  • 构建说明:README.md 与 HACKING.md,环境要求与编译步骤
  • 内核模式公共配置:Common.Kernel.props,WDK 相关构建属性

下一步建议:ksidll.def的导出表入手,逐个符号反查到KSystemInformer/中的实现文件,画一张"导出符号→驱动函数→处理程序"的映射图,你得到的就是当前版本最准确的能力清单(以当前仓库实现为准)。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 2:49:53

AI驱动的云自动化巡检:从告警风暴到智能根因定位

我们团队在维护一套跨多个可用区的云上业务系统时,被一个问题反复折磨了快半年——云自动化巡检这五个字,听起来是省心,可真正落地起来,体感却是“配置了一堆告警规则,反而被告警淹没了”。白天还好,一到凌…

作者头像 李华
网站建设 2026/9/11 2:48:26

PostgreSQL UPSERT实战:ON CONFLICT用法与踩坑

最近在处理一批历史遗留ETL脚本时,"先查再插"和"删了再插"的逻辑几乎成了标配,代码冗长不说,高并发下还经常出幺蛾子。后来我把它们统一改成了INSERT ... ON CONFLICT ... DO (UPDATE SET ...)/(NOTHING)的写法&#xff…

作者头像 李华
网站建设 2026/9/11 2:47:12

轻量级运维时序分析工具链:异常检测、预测与根因定位

简介:本资源是一套面向运维工程师、AI算法工程师及高校相关专业学生的AIOPS核心算法实践代码包,聚焦异常检测、系统预测与根因分析三大关键能力,解决IT智能运维中指标监控、故障预判与问题定位等实际痛点。压缩包共15个文件,含10个…

作者头像 李华