
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),僅供參考