<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ā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲狠狠婷婷综合久久久久 | 亚洲色图.com| 免费人成在线观看69式小视频| 亚洲欧洲日产专区| 免费一级国产生活片| 国内少妇偷人精品视频免费| 中文字幕 亚洲 有码 在线| 亚洲人成国产精品无码| 久久精品免费一区二区| 在线亚洲v日韩v| 亚洲电影在线播放| 免费播放春色aⅴ视频| 久久国产色AV免费看| 妇女自拍偷自拍亚洲精品| 亚洲一区二区三区首页| 免费日韩在线视频| 永久在线观看www免费视频| 九九九国产精品成人免费视频| 91亚洲精品第一综合不卡播放| 亚洲第一页日韩专区| 91免费资源网站入口| 少妇性饥渴无码A区免费| 亚洲国产精品美女久久久久| 亚洲天堂中文资源| 亚洲精品综合久久| 白白国产永久免费视频| 最近免费中文字幕大全高清大全1| 免费VA在线观看无码| 中文字幕在线观看亚洲日韩| 亚洲精品免费视频| 亚洲中文字幕久久精品无码APP | 亚洲色无码国产精品网站可下载| 国产亚洲综合成人91精品| 国产一级高清视频免费看| 久久99九九国产免费看小说| 久久er国产精品免费观看2| gogo免费在线观看| 免费国产黄网站在线看| 亚洲AV香蕉一区区二区三区| 亚洲制服丝袜精品久久| 77777_亚洲午夜久久多人|