Detours 3.0 附帶的 Traceapi.dll 範例可 Attach 至任意 Win32 程序監控 API 呼叫。但原版需 Makefile 編譯、先啟動 syelogd 監聽、再用 withdll 注入,流程繁瑣、檔案多、難以整合。本文記錄將其重構為單一 EXE + DLL、支援命令列直接指定目標程式的過程。
traceapi.dll(編譯產出)作為注入載體。syelogd 主程式:整合命令列解析、Named Pipe 伺服器、DetourCreateProcessWithDll 注入啟動。<target_exe> 直接指定欲掛載程式,啟動即注入、監控、記錄。MyTraceapi.cpp)// 主要修改點在 main():
// 1. 解析命令列:/d (delta time) /o (exit after one) /q (quiet) /? (help)
// 新增:若參數以 .exe 結尾 → 視為目標程式路徑;.txt → 輸出日誌檔。
// 2. 初始化 IOCP + Worker Threads + Named Pipe (SYELOG_PIPE_NAME)。
// 3. 呼叫 DetourCreateProcessWithDll 啟動目標程式並注入 traceapi.dll。
// 4. 進入訊息循環,將管道接收的 API 呼叫記錄到螢幕/檔案。
DWORD main(int argc, char **argv) {
// ... 參數解析、初始化 IOCP、建立管道連線 ...
printf("SYELOGD: Target process:%s\n", lpAppName);
fResult = DetourCreateProcessWithDll((LPSTR)lpAppName, NULL, NULL, NULL,
FALSE, CREATE_DEFAULT_ERROR_MODE,
NULL, NULL, &si, &pi,
lpDllName, NULL); // lpDllName = "traceapi.dll"
if (!fResult) { /* 錯誤處理 */ }
while (argc) { Sleep(10000); } // 保持主執行緒存活
// ... 清理資源 ...
}
nmake 編譯出 traceapi.dll(放同目錄)。MyTraceapi.cpp 加入新專案編譯為 MyTraceapi.exe(需連結 detours.lib、ws2_32.lib 等)。MyTraceapi.exe [options] [log.txt] target.exe
MyTraceapi.exe log.txt calc.exe」單指令。本文出自「About:Blank H4cking」部落格,轉載請保留出處:原文連結