<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 67  文章 - 79  trackbacks - 0
    <2007年10月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    摘錄在windows core編程
    函數原形:
    HANDLE CreateRemoteThread(
    HANDLE hProcess,
    PSECURITY_ATTRIBUTES psa,
    DWORD dwStackSize,
    PTHREAD_STRART_ROUTINE pfnStartAddr,
    PVOID pvParam,
    DWORD fdwCreate,
    PDWORD pdwThreadId);
    范例:
    插入
    BOOL WINAPI InjectLib(DWORD dwProcessId, PCTSTR pszLibFile) {

       BOOL fOk = FALSE; // Assume that the function fails
       HANDLE hProcess = NULL, hThread = NULL;
       PTSTR pszLibFileRemote = NULL;

       __try {
          // Get a handle for the target process.
          hProcess = OpenProcess(
             PROCESS_QUERY_INFORMATION |   // Required by Alpha
             PROCESS_CREATE_THREAD     |   // For CreateRemoteThread
             PROCESS_VM_OPERATION      |   // For VirtualAllocEx/VirtualFreeEx
             PROCESS_VM_WRITE,             // For WriteProcessMemory
             FALSE, dwProcessId);
          if (hProcess == NULL) __leave;

          // Calculate the number of bytes needed for the DLL's pathname
          int cch = 1 + lstrlen(pszLibFile);
          int cb  = cch * sizeof(TCHAR);

          // Allocate space in the remote process for the pathname
          pszLibFileRemote = (PTSTR)
             VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);
          if (pszLibFileRemote == NULL) __leave;

          // Copy the DLL's pathname to the remote process's address space
          if (!WriteProcessMemory(hProcess, pszLibFileRemote,
             (PVOID) pszLibFile, cb, NULL)) __leave;

          // Get the real address of LoadLibraryW in Kernel32.dll
          PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
             GetProcAddress(GetModuleHandle(TEXT("Kernel32")),
    #ifdef UNICODE
             "LoadLibraryW");
    #else
             "LoadLibraryA");
    #endif
          if (pfnThreadRtn == NULL) __leave;

          // Create a remote thread that calls LoadLibraryW(DLLPathname)
          hThread = CreateRemoteThread(hProcess, NULL, 0,
             pfnThreadRtn, pszLibFileRemote, 0, NULL);
          if (hThread == NULL) __leave;

          // Wait for the remote thread to terminate
          WaitForSingleObject(hThread, INFINITE);

          fOk = TRUE; // Everything executed successfully
       }
       __finally { // Now, we can clean everthing up

          // Free the remote memory that contained the DLL's pathname
          if (pszLibFileRemote != NULL)
             VirtualFreeEx(hProcess, pszLibFileRemote, 0, MEM_RELEASE);

          if (hThread  != NULL)
             CloseHandle(hThread);

          if (hProcess != NULL)
             CloseHandle(hProcess);
       }

       return(fOk);
    }
    取消插入:
    BOOL WINAPI EjectLib(DWORD dwProcessId, PCTSTR pszLibFile) {

       BOOL fOk 
    = FALSE; // Assume that the function fails
       HANDLE hthSnapshot = NULL;
       HANDLE hProcess 
    = NULL, hThread = NULL;

       __try {
          
    // Grab a new snapshot of the process
          hthSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
          
    if (hthSnapshot == NULL) __leave;

          
    // Get the HMODULE of the desired library
          MODULEENTRY32 me = { sizeof(me) };
          BOOL fFound 
    = FALSE;
          BOOL fMoreMods 
    = Module32First(hthSnapshot, &me);
          
    for (; fMoreMods; fMoreMods = Module32Next(hthSnapshot, &me)) {
             fFound 
    = (lstrcmpi(me.szModule,  pszLibFile) == 0|| 
                      (lstrcmpi(me.szExePath, pszLibFile) 
    == 0);
             
    if (fFound) break;
          }
          
    if (!fFound) __leave;

          
    // Get a handle for the target process.
          hProcess = OpenProcess(
             PROCESS_QUERY_INFORMATION 
    |   // Required by Alpha
             PROCESS_CREATE_THREAD     | 
             PROCESS_VM_OPERATION,  
    // For CreateRemoteThread
             FALSE, dwProcessId);
          
    if (hProcess == NULL) __leave;

          
    // Get the real address of LoadLibraryW in Kernel32.dll
          PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
             GetProcAddress(GetModuleHandle(TEXT(
    "Kernel32")), "FreeLibrary");
          
    if (pfnThreadRtn == NULL) __leave;

          
    // Create a remote thread that calls LoadLibraryW(DLLPathname)
          hThread = CreateRemoteThread(hProcess, NULL, 0
             pfnThreadRtn, me.modBaseAddr, 
    0, NULL);
          
    if (hThread == NULL) __leave;

          
    // Wait for the remote thread to terminate
          WaitForSingleObject(hThread, INFINITE);

          fOk 
    = TRUE; // Everything executed successfully
       }
       __finally { 
    // Now we can clean everything up

          
    if (hthSnapshot != NULL) 
             CloseHandle(hthSnapshot);

          
    if (hThread     != NULL) 
             CloseHandle(hThread);

          
    if (hProcess    != NULL) 
             CloseHandle(hProcess);
       }

       
    return(fOk);
    }


    posted on 2007-10-19 09:00 zarra 閱讀(261) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 中国亚洲女人69内射少妇| 亚洲欧洲国产精品香蕉网| 免费福利在线观看| 亚洲国产精品成人久久| 免费v片在线观看视频网站| 久久精品国产亚洲AV| 亚洲精品中文字幕无码蜜桃| 国产精品成人观看视频免费| 特级毛片免费观看视频| 亚洲天堂男人天堂| 免费人成在线观看网站品爱网日本| 国产无遮挡又黄又爽免费网站| 亚洲国产高清视频在线观看| 水蜜桃亚洲一二三四在线| 国产免费丝袜调教视频| 免费一级毛片在线播放放视频| 亚洲人成在线播放网站岛国| 国产公开免费人成视频| 99久9在线|免费| 亚洲激情在线观看| 国产大片线上免费看| 亚洲一区二区三区免费视频| eeuss影院免费直达入口| 33333在线亚洲| 亚洲va无码专区国产乱码| 国产免费观看视频| 97视频免费在线| 成人无码a级毛片免费| 国产成人无码综合亚洲日韩| 韩国18福利视频免费观看| 91香蕉在线观看免费高清| 国产精品青草视频免费播放| 亚洲色偷偷偷综合网| 中文字幕亚洲综合精品一区| 自拍偷自拍亚洲精品被多人伦好爽| 成人免费在线观看网站| 2019中文字幕免费电影在线播放 | 亚洲国产婷婷六月丁香| 永久中文字幕免费视频网站| 在线观看免费视频资源| A片在线免费观看|