青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

旅途

如果想飛得高,就該把地平線忘掉

Win2K下的Api函數的攔截

Api攔截并不是一 個新的技術,很多商業軟件都采用這種技術。對windows的Api函數的攔截,不外乎兩種方法,第一種是Mr. Jeffrey Richter 的修改exe文件的模塊輸入節,種方法,很安全,但很復雜,而且有些exe文件,沒有Dll的輸入符號的列表,有可能出現攔截不到的情況。第二種方法就是 常用的JMP XXX的方法,雖然很古老,卻很簡單實用。
  本文一介紹第二種方法在Win2k下的使用。第二種方法,Win98/me 下因為進入Ring0級的方法很多,有LDT,IDT,Vxd等方法,很容易在內存中動態修改代碼,但在Win2k下,這些方法都不能用,寫WDM太過復雜,表面上看來很難實現,
其實不然。Win2k為我們提供了一個強大的內存Api操作函數---VirtualProtectEx,WriteProcessMemeory,ReadProcessMemeory,有了它們我們就能在內存中動態修改代碼了,其原型為:
     BOOL VirtualProtectEx(
                HANDLE hProcess,   // 要修改內存的進程句柄
                LPVOID lpAddress,  // 要修改內存的起始地址
                DWORD dwSize,    // 修改內存的字節
                DWORD flNewProtect, // 修改后的內存屬性
                PDWORD lpflOldProtect // 修改前的內存屬性的地址
                );
    BOOL WriteProcessMemory(
                HANDLE hProcess, // 要寫進程的句柄
                LPVOID lpBaseAddress, // 寫內存的起始地址
                LPVOID lpBuffer, // 寫入數據的地址
                DWORD nSize,   // 要寫的字節數
                LPDWORD lpNumberOfBytesWritten // 實際寫入的子節數
                );
    BOOL ReadProcessMemory(
                HANDLE hProcess, // 要讀進程的句柄
                LPCVOID lpBaseAddress,  // 讀內存的起始地址
                LPVOID lpBuffer, // 讀入數據的地址
                DWORD nSize,   // 要讀入的字節數
                LPDWORD lpNumberOfBytesRead  // 實際讀入的子節數
                );
具體的參數請參看MSDN幫助。在Win2k下因為Dll和所屬進程在同一地址空間,這點又和Win9x/me存在所有進程存在共享的地址空間不同,
因此,必須通過鉤子函數和遠程注入進程的方法,現以一個簡單采用鉤子函數對MessageBoxA進行攔截例子來說明:
其中Dll文件為:
     HHOOK g_hHook;
     HINSTANCE g_hinstDll;
     FARPROC pfMessageBoxA;
     int WINAPI MyMessageBoxA(HWND hWnd, LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
     BYTE OldMessageBoxACode[5],NewMessageBoxACode[5];
     HMODULE hModule ;
     DWORD dwIdOld,dwIdNew;
     BOOL bHook=false;
     void HookOn();
     void HookOff();
     BOOL init();
LRESULT WINAPI MousHook(int nCode,WPARAM wParam,LPARAM lParam);
BOOL APIENTRY DllMain( HANDLE hModule,
            DWORD ul_reason_for_call,
            LPVOID lpReserved
           )
{
  switch (ul_reason_for_call)
  {
    case DLL_PROCESS_ATTACH:
      if(!init())
      {
             MessageBoxA(NULL,"Init","ERROR",MB_OK);
             return(false);
      }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
           if(bHook) UnintallHook(); 
          break;
  }
  return TRUE;
}
LRESULT WINAPI Hook(int nCode,WPARAM wParam,LPARAM lParam)//空的鉤子函數
{
  
  return(CallNextHookEx(g_hHook,nCode,wParam,lParam));
}
HOOKAPI2_API BOOL InstallHook()//輸出安裝空的鉤子函數
{ 
  g_hinstDll=LoadLibrary("HookApi2.dll");
  g_hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)Hook,g_hinstDll,0);
 if (!g_hHook)
 {
    MessageBoxA(NULL,"SET ERROR","ERROR",MB_OK);
    return(false);
  }
 
     
  return(true);
}
HOOKAPI2_API BOOL UninstallHook()//輸出御在鉤子函數
{
 
  return(UnhookWindowsHookEx(g_hHook));
}

BOOL init()//初始化得到MessageBoxA的地址,并生成Jmp XXX(MyMessageBoxA)的跳轉指令
{
  hModule=LoadLibrary("user32.dll");
  pfMessageBoxA=GetProcAddress(hModule,"MessageBoxA");
  if(pfMessageBoxA==NULL)
   return false;
  _asm
  {
    lea edi,OldMessageBoxACode
    mov esi,pfMessageBoxA
    cld
    movsd
    movsb
  }
  NewMessageBoxACode[0]=0xe9;//jmp MyMessageBoxA的相對地址的指令
  _asm
  {
    lea eax,MyMessageBoxA
    mov ebx,pfMessageBoxA
    sub eax,ebx
    sub eax,5
    mov dword ptr [NewMessageBoxACode+1],eax
  }
  dwIdNew=GetCurrentProcessId(); //得到所屬進程的ID
  dwIdOld=dwIdNew;
  HookOn();//開始攔截
  return(true);
}

int WINAPI MyMessageBoxA(HWND hWnd, LPCTSTR lpText,LPCTSTR lpCaption, UINT uType )//首先關閉攔截,然后才能調用被攔截的Api 函數
{ 
  int nReturn=0;
  HookOff();
  nReturn=MessageBoxA(hWnd,"Hook",lpCaption,uType);
  HookOn();
  return(nReturn);
}
void HookOn()
{
  HANDLE hProc;
  dwIdOld=dwIdNew;
  hProc=OpenProcess(PROCESS_ALL_ACCESS,0,dwIdOld);//得到所屬進程的句柄
  VirtualProtectEx(hProc,pfMessageBoxA,5,PAGE_READWRITE,&dwIdOld);//修改所屬進程中MessageBoxA的前5個字節的屬性為可寫
  WriteProcessMemory(hProc,pfMessageBoxA,NewMessageBoxACode,5,0);//將所屬進程中MessageBoxA的前5個字節改為JMP 到MyMessageBoxA
  VirtualProtectEx(hProc,pfMessageBoxA,5,dwIdOld,&dwIdOld);//修改所屬進程中MessageBoxA的前5個字節的屬性為原來的屬性
  bHook=true;
}
void HookOff()//將所屬進程中JMP MyMessageBoxA的代碼改為Jmp MessageBoxA
{
  HANDLE hProc;
  dwIdOld=dwIdNew;
  hProc=OpenProcess(PROCESS_ALL_ACCESS,0,dwIdOld);
  VirtualProtectEx(hProc,pfMessageBoxA,5,PAGE_READWRITE,&dwIdOld);
  WriteProcessMemory(hProc,pfMessageBoxA,OldMessageBoxACode,5,0);
  VirtualProtectEx(hProc,pfMessageBoxA,5,dwIdOld,&dwIdOld);
  bHook=false;
}
//測試文件:
int APIENTRY WinMain(HINSTANCE hInstance,
           HINSTANCE hPrevInstance,
           LPSTR   lpCmdLine,
           int    nCmdShow)
{
  
  if(!InstallHook())
  {
    MessageBoxA(NULL,"Hook Error!","Hook",MB_OK);
    return 1;
  }
   MessageBoxA(NULL,"TEST","TEST",MB_OK);//可以看見Test變成了Hook,也可以在其他進程中看見
  if(!UninstallHook())
  {
    MessageBoxA(NULL,"Uninstall Error!","Hook",MB_OK);
    return 1;
  }
  return 0;
}



posted on 2007-07-29 11:26 旅途 閱讀(476) 評論(0)  編輯 收藏 引用 所屬分類: 深入windows

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线一区亚洲| 欧美激情麻豆| 亚洲国产精品www| 国产日韩欧美在线一区| 99在线精品视频在线观看| 久久久一二三| 久久久久女教师免费一区| 亚洲精品国产精品久久清纯直播| 国产精品jvid在线观看蜜臀 | 免费成人你懂的| 久久久久成人网| 久久久在线视频| 久久亚洲一区二区| 免播放器亚洲一区| 欧美韩日亚洲| 欧美性久久久| 国产日韩在线看片| 亚洲国产欧美另类丝袜| 在线视频欧美日韩| 久久xxxx| 亚洲大黄网站| 制服丝袜激情欧洲亚洲| 欧美与黑人午夜性猛交久久久| 久久国产精品黑丝| 欧美成人午夜激情在线| 国产精品乱码一区二三区小蝌蚪| 国产毛片一区二区| 亚洲国产精品久久久久秋霞蜜臀| 在线亚洲美日韩| 久久久久久精| 最新亚洲一区| 午夜视频精品| 欧美日韩一区二区在线视频| 国产综合香蕉五月婷在线| 亚洲激情视频网| 欧美一二三区在线观看| 欧美高清视频一区| 午夜精品久久久久久99热| 欧美国产日韩精品| 黑人巨大精品欧美黑白配亚洲 | 亚洲一区二区三区四区五区黄| 久久久高清一区二区三区| 国产综合亚洲精品一区二| 99国产一区| 久久亚洲视频| 午夜精品国产| 国产精品v一区二区三区| 亚洲国产综合在线| 久久久久国产精品www| 99视频一区二区| 另类亚洲自拍| 国产一区二区三区直播精品电影 | 亚洲国产另类精品专区| 亚洲香蕉在线观看| 欧美裸体一区二区三区| 亚洲黄色免费| 欧美成人一区二区| 欧美一区二区三区婷婷月色 | 欧美日韩一区二区在线观看视频| 国产精品国产a级| 亚洲三级毛片| 裸体歌舞表演一区二区| 欧美一区二区三区在线观看| 国产精品久久久久久久第一福利| 日韩午夜激情| 亚洲精品网址在线观看| 欧美大片在线看| 亚洲日本欧美| 亚洲欧洲精品一区二区| 欧美精品在线免费播放| 一区二区久久| 亚洲午夜伦理| 国产伦精品一区二区三区在线观看| 日韩一区二区精品| 亚洲婷婷在线| 日韩午夜免费视频| 欧美精品首页| 午夜欧美视频| 欧美一级黄色录像| 影音先锋亚洲电影| 亚洲国产日韩欧美在线动漫| 欧美日韩1080p| 午夜激情一区| 欧美一区视频| 亚洲国产日韩在线一区模特| 亚洲三级色网| 国产精品亚发布| 欧美1区2区| 欧美日韩国产片| 久久精品国产免费观看| 久久久久久久性| 欧美日韩成人一区| 欧美一区影院| 久久亚洲综合色一区二区三区| 亚洲精品激情| 一区二区三区精品国产| 国一区二区在线观看| 亚洲国产精品激情在线观看| 欧美午夜视频网站| 免费在线看一区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 亚洲宅男天堂在线观看无病毒| 国产欧美日韩在线播放| 欧美电影资源| 国产精品午夜在线| 亚洲欧洲精品一区| 国产一区二区三区直播精品电影 | 午夜在线精品| 激情久久婷婷| 欧美成人日韩| 午夜在线播放视频欧美| 久久成人亚洲| 国产精品电影在线观看| 午夜精品av| 在线午夜精品自拍| 久久久中精品2020中文| 在线精品观看| 免费观看亚洲视频大全| 日韩香蕉视频| 亚洲国产va精品久久久不卡综合| 亚洲欧美精品| 亚洲视频axxx| 欧美日韩一区免费| 欧美一区中文字幕| 亚洲国产另类久久精品| 在线一区亚洲| 加勒比av一区二区| 国产精品久久久久久妇女6080| 亚洲欧美视频在线观看| 蜜桃精品久久久久久久免费影院| 亚洲三级影院| 在线综合亚洲欧美在线视频| 一区二区三区日韩| 午夜宅男欧美| 午夜精品国产更新| 一区二区福利| 欧美一区二区视频在线| 最新中文字幕一区二区三区| 国产精品久久久久国产精品日日| 亚洲欧美韩国| 最新国产の精品合集bt伙计| 欧美韩日视频| 欧美在线精品一区| 欧美三区视频| 在线综合亚洲欧美在线视频| 中国成人在线视频| 欧美日韩久久不卡| 午夜精品久久久久久久99热浪潮| 久久视频国产精品免费视频在线| 国产亚洲激情| 国产欧美日韩一区二区三区在线观看| 欧美福利一区二区三区| 亚洲另类视频| 一区二区三区欧美激情| 亚洲桃花岛网站| 亚洲欧美国产精品专区久久| 免费h精品视频在线播放| 国产精品色婷婷久久58| 中文精品一区二区三区| 午夜精品视频在线观看一区二区| 国产精品二区三区四区| 午夜欧美大片免费观看| 久久免费高清| 在线精品国精品国产尤物884a| 久久天堂精品| 91久久香蕉国产日韩欧美9色 | 99re6这里只有精品视频在线观看| 亚洲色图自拍| 国产在线观看91精品一区| 久久久精品国产免大香伊| 亚洲国产精品精华液2区45| 亚洲一区二区欧美| 韩国成人福利片在线播放| 欧美福利一区二区三区| 午夜精品久久久久久久男人的天堂| 另类天堂视频在线观看| 一区二区三区精密机械公司| 国产日韩亚洲欧美综合| 欧美日韩dvd在线观看| 性欧美大战久久久久久久免费观看| 亚洲成色777777在线观看影院| 亚洲综合电影一区二区三区| 在线观看欧美黄色| 国产精品裸体一区二区三区| 久久一日本道色综合久久| 一区二区三区久久久| 欧美xart系列高清| 久久经典综合| 午夜一区二区三区在线观看| 亚洲精品一区二区在线| 国产视频一区在线观看一区免费| 老妇喷水一区二区三区| 亚洲一区制服诱惑| 亚洲国产一区二区三区高清| 久久精品人人做人人爽| 亚洲一区二区三区在线播放| 亚洲精品国产日韩| 在线观看国产成人av片| 国产色产综合色产在线视频| 欧美日本一区二区三区|