【Windows Internal】CallBack Function
一句話來看就是 留電話號碼給系統,時機到了系統回撥給你 的機制
這個函式主要是把函式 Pointer 交給 Windows,
約定好事件發生之後回頭呼叫你的 code,
因為保證會Callback,前一篇的 Hook 與 DLL 注入就是用這樣的方式把 code 送進別的 Process。
跟一般呼叫的差別
一般呼叫是我們主動叫 API 做事, CallBack 是反過來,
把 Function Pointer 傳給 API,約定事件發生時用 Calling Convention 呼叫他
Windows 裡有很多例子:
EnumWindows的列舉 CallBackSetWindowsHookEx的 Hook ProcedureDllMain也是一種 系統約定時機呼叫 的進入點- Malware 也會把 CallBack 當作執行的載具
CallBack 在哪個 Process、什麼權限下醒來取決於 誰觸發他
實作例子
這邊放一個比較經典的例子:EnumWindows 列舉所有視窗,每找到一個系統就 CallBack 一次
BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam) {
wchar_t title[256];
GetWindowTextW(hwnd, title, 256);
wprintf(L"%p %s\n", hwnd, title); // 系統每列舉一個視窗就打給你一次
return TRUE;
}
int main() { EnumWindows(EnumProc, 0); }
預期得到的輸出就會長這樣:
000102FA Obsidian
000205BC Program Manager