<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      什么是 IAT Hook?

      IAT(Import Address Table)Hook 是一種 通過修改導入表中的函數地址來實現 API 劫持 的技術,適合針對當前進程的 API 替換,不依賴于 DLL 注入或系統級鉤子。

      本例目標
      劫持 CreateFileW(或 CreateFileA)函數:

    3. 攔截調用
    4. 輸出或修改文件路徑
    5. 最終調用原函數
    6. > 示例代碼(靜態 IAT Hook 實現)

      ?? 步驟 1:聲明 CreateFile 函數指針

      點擊查看代碼
      #include <windows.h>
      #include <iostream>
      
      typedef HANDLE(WINAPI* PFN_CreateFileW)(
          LPCWSTR lpFileName,
          DWORD dwDesiredAccess,
          DWORD dwShareMode,
          LPSECURITY_ATTRIBUTES lpSecurityAttributes,
          DWORD dwCreationDisposition,
          DWORD dwFlagsAndAttributes,
          HANDLE hTemplateFile
      );
      
      PFN_CreateFileW OriginalCreateFileW = nullptr;
      
      ?? 步驟 2:定義我們的 Hook 函數
      點擊查看代碼
      HANDLE WINAPI HookedCreateFileW(
          LPCWSTR lpFileName,
          DWORD dwDesiredAccess,
          DWORD dwShareMode,
          LPSECURITY_ATTRIBUTES lpSecurityAttributes,
          DWORD dwCreationDisposition,
          DWORD dwFlagsAndAttributes,
          HANDLE hTemplateFile
      ) {
          std::wcout << L"[IAT-HOOK] 攔截到 CreateFileW:" << lpFileName << std::endl;
      
          // 可以替換文件路徑示例
          // lpFileName = L"C:\\Hooked.txt";
      
          return OriginalCreateFileW(
              lpFileName,
              dwDesiredAccess,
              dwShareMode,
              lpSecurityAttributes,
              dwCreationDisposition,
              dwFlagsAndAttributes,
              hTemplateFile
          );
      }
      
      ?? 步驟 3:修改 IAT,實現 Hook
      點擊查看代碼
      void HookIAT_CreateFileW() {
          // 獲取模塊基址(當前 exe)
          HMODULE hModule = GetModuleHandle(NULL);
          if (!hModule) return;
      
          // 獲取 DOS 和 PE 頭
          PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)hModule;
          PIMAGE_NT_HEADERS ntHeader = (PIMAGE_NT_HEADERS)((BYTE*)hModule + dosHeader->e_lfanew);
      
          // 獲取 Import Directory 表
          IMAGE_DATA_DIRECTORY importDir = ntHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
          if (!importDir.VirtualAddress) return;
      
          PIMAGE_IMPORT_DESCRIPTOR importDesc = (PIMAGE_IMPORT_DESCRIPTOR)((BYTE*)hModule + importDir.VirtualAddress);
      
          // 遍歷導入表
          for (; importDesc->Name != 0; importDesc++) {
              LPCSTR moduleName = (LPCSTR)((BYTE*)hModule + importDesc->Name);
              if (_stricmp(moduleName, "KERNEL32.dll") != 0)
                  continue;
      
              // 找到 FirstThunk(IAT 表)
              PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)((BYTE*)hModule + importDesc->FirstThunk);
      
              for (; pThunk->u1.Function != 0; pThunk++) {
                  FARPROC* ppFunc = (FARPROC*)&pThunk->u1.Function;
      
                  if (*ppFunc == (FARPROC)GetProcAddress(GetModuleHandleA("kernel32.dll"), "CreateFileW")) {
                      // 保存原始函數
                      OriginalCreateFileW = (PFN_CreateFileW)*ppFunc;
      
                      // 修改內存保護屬性為可寫
                      DWORD oldProtect;
                      VirtualProtect(ppFunc, sizeof(FARPROC), PAGE_EXECUTE_READWRITE, &oldProtect);
      
                      // 替換函數指針
                      *ppFunc = (FARPROC)HookedCreateFileW;
      
                      // 恢復保護
                      VirtualProtect(ppFunc, sizeof(FARPROC), oldProtect, &oldProtect);
      
                      std::cout << "[OK] CreateFileW IAT Hook 成功" << std::endl;
                      return;
                  }
              }
          }
      }
      
      
      ?? 步驟 4:測試調用 CreateFile
      點擊查看代碼
      void TestCreateFile() {
          HANDLE hFile = CreateFileW(
              L"C:\\Windows\\System32\\notepad.exe",
              GENERIC_READ,
              FILE_SHARE_READ,
              NULL,
              OPEN_EXISTING,
              0,
              NULL
          );
      
          if (hFile != INVALID_HANDLE_VALUE) {
              std::cout << "[Test] CreateFile 成功打開文件" << std::endl;
              CloseHandle(hFile);
          } else {
              std::cout << "[Test] CreateFile 打開失敗,錯誤碼: " << GetLastError() << std::endl;
          }
      }
      
      ?? 步驟 5:在 main() 中調用 Hook 和測試
      點擊查看代碼
      int main() {
          HookIAT_CreateFileW();   // 執行 Hook
          TestCreateFile();        // 測試調用
          return 0;
      }
      
      結尾:IAT Hook 有什么用?能干嘛?
      應用場景舉例說明
      ??? 安全防護 / 防作弊攔截游戲中的 CreateFileReadProcessMemory,防止外掛注入
      ?? 軟件注入 / 插件系統替換 LoadLibraryCreateFile,控制哪些 DLL/文件能被加載/訪問
      ?? 逆向分析 / 惡意軟件行為監控Hook CreateProcessWriteFile,觀察病毒行為
      ?? 動態調試 / 熱更新模塊把原本導入的函數指向你自己的函數,做動態替換
      ??? 日志審計 / 文件訪問記錄攔截 CreateFileW,打印訪問的文件名到日志中
      ?? 程序透明代理 / 沙箱隔離攔截網絡類 API(如 connectsend),做透明代理
      比如你做了一個程序,別人用你的 API 或庫時:
      原來調用系統 API:CreateFileW(L"c:\\secret.txt", ...); Hook 后:
      點擊查看代碼
      HookedCreateFileW() {
        std::wcout << "有人試圖訪問 secret.txt!攔截!" << std::endl;
        return INVALID_HANDLE_VALUE;
      }
      
      
      posted @ 2025-08-11 22:38  huh&uh  閱讀(66)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美日韩精品一区二区三区高清视频| 色欲aⅴ亚洲情无码av蜜桃| 亚洲av成人无码天堂| 中文字幕精品人妻丝袜| 国产精品久久久久影院老司| 色综合久久久久综合体桃花网| 亚洲国产中文字幕在线视频综合| 真实国产老熟女无套中出| 国产suv精品一区二区五| 免费吃奶摸下激烈视频| 国产日女人视频在线观看| 狠狠色狠狠综合久久| 日日碰狠狠添天天爽超碰97| 无码人妻黑人中文字幕| 无码综合天天久久综合网| 99er热精品视频| 午夜成人无码免费看网站| 亚洲综合激情五月色一区| 四虎精品视频永久免费| 国产又黄又湿又刺激网站| 国产精品无码a∨精品| 亚洲日韩一区二区| 真实国产老熟女无套中出 | 日韩一区国产二区欧美三区| 国产偷拍自拍视频在线观看| av色国产色拍| 40岁大乳的熟妇在线观看| 亚洲av色精品一区二区| 日韩精品国产二区三区| 亚洲欧洲日产国产 最新| 防城港市| 中文字幕乱码熟妇五十中出 | 狼色精品人妻在线视频| 日本一区二区三区免费播放视频站| 久久精品一区二区三区中文字幕| 久青草国产在视频在线观看| 国产亚洲精品自在久久| 亚洲高清有码中文字| 少妇熟女高潮流白浆| 熟女性饥渴一区二区三区| 福利网午夜视频一区二区|