新闻详情

新闻详情

首页 / 资讯中心 / 详情

SystemInformer 的 DLL 注入在哪:3 分钟走完从菜单到核心函数的完整调用链

发布时间:2026/9/11 22:46:14来源:尧图网络
SystemInformer 的 DLL 注入在哪:3 分钟走完从菜单到核心函数的完整调用链
SystemInformer 的 DLL 注入在哪3 分钟走完从菜单到核心函数的完整调用链【免费下载链接】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 注入功能当前落在三层——界面入口在 SystemInformer/prpgmod.c参数准备在 SystemInformer/actions.c真正执行注入的PhLoadDllProcess在 phlib/nativethread.c线程最终由 phlib/basesup.c 的NtCreateThreadEx系统调用落到内核。功能去哪儿了为什么找不到旧版 DLL 注入入口老版本 Process Hacker 的资料里注入常被描述成右键进程 → 注入 DLL很多教程还指向CreateRemoteThread那套写法。升级后的 SystemInformer 里这个入口搬到了进程属性的模块标签页函数名也变成了PhLoadDllProcess按旧教程搜函数名自然一无所获。本文带你从菜单一路走到系统调用共 3 站每站都给出文件路径和关键代码看完你就能在仓库里自己复现这条链路。沿着路径走从界面到内核第一站模块标签页里的Load module菜单项结论注入的触发点藏在进程属性对话框的模块页中由 SystemInformer/prpgmod.c 里的事件菜单构建。菜单项命中后调用PhUiLoadDllProcess// SystemInformer/prpgmod.c if (selectedItem-Id PH_MODULE_FLAGS_LOAD_MODULE_OPTION) { if (PhGetIntegerSetting(SETTING_ENABLE_WARNINGS) !PhShowConfirmMessage( hwndDlg, Lload, La module, LSome programs may restrict access or ban your account when loading modules into the process., FALSE)) break; PhUiLoadDllProcess(hwndDlg, processItem); }大白话它还会先弹一个风险提示确认后才继续——入口在模块页不在进程右键菜单。第二站UI 层选好文件、开好权限再交接结论PhUiLoadDllProcess在 SystemInformer/actions.c 中完成三件事弹出选 DLL 的对话框、按系统版本调整进程句柄权限、然后调核心函数// SystemInformer/actions.c: PhUiLoadDllProcess fileDialog PhCreateOpenFileDialog(); // 只给 *.dll 过滤器 ... status PhOpenProcess( processHandle, PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | SYNCHRONIZE, Process-ProcessId ); ... status PhLoadDllProcess(processHandle, fileName-sr, 5000); // 5 秒超时大白话这一层不碰目标进程内存只负责把文件路径 权限够用的句柄这两个参数备好5000 毫秒是注入等待的超时上限。最后一站PhLoadDllProcess 的三步注入结论真正的注入实现在 phlib/nativethread.c 的PhLoadDllProcess里标准远程线程三步曲// phlib/nativethread.c: PhLoadDllProcess status PhGetProcedureAddressRemote( // ① 找到目标进程里的 LoadLibraryW ProcessHandle, runtimeLibrary-Kernel32FileName, LoadLibraryW, loadLibraryW, NULL); status PhAllocateVirtualMemory(ProcessHandle, fileNameBaseAddress, ...); // ② 分配内存 status PhWriteVirtualMemory(ProcessHandle, fileNameBaseAddress, FileName-Buffer, ...); // ③ 写入 DLL 路径 status PhCreateUserThread( // ④ 创建远程线程入口是 LoadLibraryW ProcessHandle, NULL, THREAD_ALL_ACCESS, 0, 0, 0, 0, loadLibraryW, fileNameBaseAddress, threadHandle, NULL);线程创建函数PhCreateUserThread在 phlib/basesup.c 中最终落到NtCreateThreadEx系统调用由内核在目标进程里把线程跑起来。另外该函数开头还有一句KphProcessLevel(ProcessHandle) KphLevelMed的完整性检查目标进程比驱动本身等级高时直接拒绝内核通信库 是这条防线的来源。同文件下方还有个PhLoadDllProcessApcThread变体改用 APC异步过程调用线程等待时被动执行的回调方式投递适合不便新建线程的场景。证据档案历史留下的痕迹证据一被整段注释掉的旧代码。SystemInformer/heapinfo.c 保留了早年PhpDestroyHeap的实现里面先试RtlCreateUserThread失败则回退//if (!(threadHandle CreateRemoteThread( // processHandle, NULL, 0, // PhGetModuleProcAddress(Lntdll.dll, RtlDestroyHeap), // HeapHandle, 0, NULL)))说明项目早期依赖 Win32 的CreateRemoteThread后来统一换成 nt 级接口现在的PhCreateUserThread就是这条路线的产物。证据二CHANGELOG 里的命令行注入。CHANGELOG.txt 第 232 行记载Added ability to specify processes by their names and inject and unload DLLs in command line。说明注入能力最早是命令行参数形态图形入口是后来才长出来的。证据三内核侧的导出表。KSystemInformer/ksidll.def 导出的不是LoadDll这类现成函数而是一组更底层的原语KsiInsertQueueApc、KsiQueueWorkItem、KsiInitializeDpc。这意味着内核驱动只提供挂 APC、排队工作项这样的积木具体怎么注入由用户态代码拼装——这也是PhLoadDllProcessApcThread能与内核 APC 机制打通的原因。一图看懂调用链路动手实操如何真正用起来在 SystemInformer 主窗口打开进程列表选中目标进程此步对应processItem参数见第一站代码。双击进程或右键选属性切到**模块Modules**标签页该页对应 SystemInformer/prpgmod.c 的对话框。点模块列表列标题旁的齿轮事件菜单按钮选Load module...对应PH_MODULE_FLAGS_LOAD_MODULE_OPTION分支。若启用了警告设置会先弹确认框确认后按第二站代码弹出文件对话框选择要注入的.dll文件——句柄权限在这一步自动开好。等 5 秒超时窗口结束对应PhLoadDllProcess的第三个参数回到模块页刷新新 DLL 出现在模块列表即注入成功。收尾SystemInformer 的 DLL 注入没有神秘的内核魔咒就是一条清晰的链prpgmod.c的菜单 →actions.c备参 →nativethread.c的PhLoadDllProcess三步注入外加内核驱动等级检查做安全闸。随着 Windows 对进程完整性等级的收紧这条链路上的权限分支Win8/Win10 不同的句柄权限会持续演化。如果你在自己的场景里跑通了 APC 变体或有更稳的注入姿势欢迎参考 CONTRIBUTING.md 给项目提一个 PR。延伸阅读phlib/nativethread.cPhLoadDllProcess与PhLoadDllProcessApcThread的完整实现SystemInformer/actions.cUI 层动作函数集合kphlib/内核通信库消息与环形缓冲区定义KSystemInformer/ksidll.def内核组件导出表SystemInformer/heapinfo.c被注释的旧版远程线程代码【免费下载链接】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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于TCN的轴承故障诊断:从原理到Matlab实现与调参实战 2026/9/11 23:25:19

基于TCN的轴承故障诊断:从原理到Matlab实现与调参实战

简介:基于TCN时间卷积神经网络的故障诊断Matlab实现方案,主要面向计算机、电子信息、数学等专业的大学生及需要开展时序分类研究的工程师。资源将TCN的因果卷积与扩张卷积机制封装为可直接调用的模型,配套真实故障数据集,替换数据…

阅读更多 →
低代码平台如何革新供应商管理系统 2026/9/11 23:25:19

低代码平台如何革新供应商管理系统

1. 为什么供应商管理需要低代码破局?去年我接手过一个跨国制造企业的供应链优化项目,他们的采购部门每天要处理来自37个国家的200多家供应商的订单,却还在用Excel表格手工核对交货日期和质量报告。最夸张的一次,因为版本混乱导致漏…

阅读更多 →
G-Helper 完整指南:用一个 10MB 常驻的 EXE 替代 Armoury Crate 2026/9/11 23:25:19

G-Helper 完整指南:用一个 10MB 常驻的 EXE 替代 Armoury Crate

G-Helper 完整指南:用一个 10MB 常驻的 EXE 替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Ze…

阅读更多 →
企业信息资源系统架构设计与数据治理实践 2026/9/11 23:25:19

企业信息资源系统架构设计与数据治理实践

1. 项目概述:信息资源系统的核心定位"信息资源系统"这个看似简单的概念,实际上是企业数字化转型中的中枢神经系统。我经手过三个不同行业的同类项目,发现这套系统本质上是在解决"数据烟囱"和"资源孤岛"的问题。…

阅读更多 →
Reflex 实战教程:用纯 Python 从零构建一个流式 AI 聊天机器人(Chat App) 2026/9/11 23:25:19

Reflex 实战教程:用纯 Python 从零构建一个流式 AI 聊天机器人(Chat App)

Reflex 实战教程:用纯 Python 从零构建一个流式 AI 聊天机器人(Chat App) 【免费下载链接】reflex 🕸️ Web apps in pure Python 🐍 项目地址: https://gitcode.com/GitHub_Trending/re/reflex 本篇教程将基于…

阅读更多 →
ABP框架入门:ASP.NET Core企业级开发实战 2026/9/11 23:22:19

ABP框架入门:ASP.NET Core企业级开发实战

1. ABP框架概述与核心价值ABP(ASP.NET Boilerplate)是一个开源的应用程序框架,它基于ASP.NET Core平台,旨在为现代Web应用程序提供完整的解决方案。我第一次接触ABP是在2018年一个企业级项目选型时,当时团队需要快速构…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞