亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

實(shí)現(xiàn)HOOK其他進(jìn)程的Messagebox

  遠(yuǎn)程線程 注入

  注入有幾個(gè)核心的API函數(shù)、、

  OpenProcess –                   打開目標(biāo)進(jìn)程。

  VirtualAllocEx/VirtualFreeEx –     在目標(biāo)進(jìn)程中分配/釋放內(nèi)存空間。

  WriteProcessMemory –            在目標(biāo)進(jìn)程中寫入要加載的DLL路徑。

  CreateRemoteThread –            遠(yuǎn)程加載DLL的關(guān)鍵函數(shù),用于控制目標(biāo)進(jìn)程調(diào)用API函數(shù)。

  //在這里調(diào)LoadLibrary(地址不用傳因?yàn)橥粰C(jī)器加載它所在的Kerner32.dll是相同的、、)

  //且LoadLibrary正好只有一個(gè)參數(shù)符合遠(yuǎn)程線程規(guī)則、、

  LoadLibrary –                    目標(biāo)進(jìn)程通過調(diào)用此函數(shù)來加載我們自己編寫的DLL。

  思路已經(jīng)有了看細(xì)節(jié)實(shí)現(xiàn)吧、、

  實(shí)現(xiàn)HOOK其他進(jìn)程的Messagebox(2) DLL注入工具(2)

  void CMyDllInjectDlg::OnInject() //界面按鈕(向它注入本地DLL)

  {

  if (bMouseDown) //用于判斷是否有進(jìn)程選中的變量前邊已經(jīng)說過、、

  {

  enableDebugPriv(); //提權(quán) 此函數(shù)在后邊會(huì)記錄、有了它就可以O(shè)penProcess任何進(jìn)程、、

  //下邊是彈出查找對(duì)話框 使用MFC封裝的類:CFileDialog、

  CString filter;

  CString PathDll;

  filter=("(*.dll)|*.dll|All files (*.*)|*.*||"); //過濾這里只要顯示DLL文件就好、、

  CFileDialog FindDll(true,NULL,NULL,OFN_HIDEREADONLY,filter); //隱藏只讀復(fù)選框

  if(FindDll.DoModal()==IDOK)

  {

  PathDll = FindDll.GetPathName(); //獲取DLL完整路徑名字、、

  }

  char* Path = PathDll.GetBuffer(PathDll.GetLength());  //Cstring 轉(zhuǎn)char*

  GetBuffer  這個(gè)函數(shù)是為一個(gè)CString對(duì)象重新獲取其內(nèi)部字符緩沖區(qū)的指針、、返回非const故可以修改

  //現(xiàn)在得到了注入目標(biāo)進(jìn)程的  DLL的完整路徑名、、存放于Path、、

  //打開目標(biāo)進(jìn)程

  hkernel32=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,1,iID);

  原型 HANDLE OpenProcess(

  DWORD dwDesiredAccess, // access flag

  BOOL bInheritHandle, // handle inheritance option

  DWORD dwProcessId // process identifier ); 這里說一下第一個(gè)參數(shù)、、

  OpenProcess第一個(gè)參數(shù)指定了三種權(quán)限。在Win32系統(tǒng)下,每個(gè)進(jìn)程都擁有自己的4G虛擬地址空間,各個(gè)進(jìn)程之間都相互獨(dú)立。如果一個(gè)進(jìn)程需要完成跨進(jìn)程的工作的話,那么它必須擁有目標(biāo)進(jìn)程的相應(yīng)操作權(quán)限。

  PROCESS_CREATE_THREAD表示我可以通過返回的進(jìn)程句柄在該進(jìn)程中創(chuàng)建新的線程,也就是調(diào)用CreateRemoteThread的權(quán)限;

  同理,PROCESS_VM_OPERATION則表示在該進(jìn)程中分配/釋放內(nèi)存的權(quán)限,也就是調(diào)用VirtualAllocEx/VirtualFreeEx的權(quán)限;

  PROCESS_VM_WRITE表示可以向該進(jìn)程的地址空間寫入數(shù)據(jù),也就是調(diào)用WriteProcessMemory的權(quán)限。

  //申請(qǐng)空間將我們的DLL路徑寫到目標(biāo)進(jìn)程地址空間里、、(進(jìn)程是獨(dú)立的哦)、、

  //之前的IAT HOOK是更改內(nèi)存信息VirtualQuery  VirtualProtect、、現(xiàn)在是申請(qǐng)內(nèi)存空間、、VirtualAllocEx

  LPVOID pDllAddr=VirtualAllocEx(hkernel32,NULL,strlen(Path),MEM_COMMIT,PAGE_READWRITE);

  //將DLL路徑Path寫到申請(qǐng)的pDllAddr地址空間去、、、

  WriteProcessMemory(hkernel32, pDllAddr,LPVOID(Path),strlen(Path),NULL);

  //得到LoadLibraryA函數(shù)的地址因?yàn)閗ernel32.dll加載時(shí)候的基地址對(duì)于一個(gè)機(jī)器是固定的、、

  //如果是一個(gè)不固定需要將函數(shù)地址也向DLL路徑那樣寫到目標(biāo)進(jìn)程的地址空間中、、

  DWORD pLoadAddr=(DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");

  //通過CreateRemoteThread將LoadLibrary作為目標(biāo)進(jìn)程的一個(gè)線程來啟動(dòng)、、

  //這樣就可以可以做到使目標(biāo)進(jìn)程調(diào)用LoadLibrary加載咱得DLL文件了、、

  Handle hThread = CreateRemoteThread(hkernel32,NULL,0,(LPTHREAD_START_ROUTINE) pLoadAddr, pDllAddr,NULL,0);

  //等待LoadLibrary加載完畢即這個(gè)遠(yuǎn)程線程執(zhí)行完畢、、

  WaitForSingleObject( hThread, INFINITE ); //返回0核心對(duì)象已被激活

  //第二個(gè)參數(shù)dwMilliseconds有兩個(gè)具有特殊意義的值:0和INFINITE。

  //若為0,則該函數(shù)立即返回;

  //若為INFINITE,則線程一直被掛起,直到hHandle所指向的對(duì)象變?yōu)橛行盘?hào)狀態(tài)時(shí)為止。

  CloseHandle(hkernel32);

  CloseHandle(Thread);

  //釋放目標(biāo)進(jìn)程中申請(qǐng)的空間

  VirtualFreeEx(hThread , pDllAddr, strlen(Path), MEM_DECOMMIT );

  CloseHandle( hThread );

  CloseHandle( hProcess );  //關(guān)閉句柄釋放申請(qǐng)的內(nèi)存空間、、、

  }

  else

  {

  MessageBox("當(dāng)前沒有進(jìn)程被選中、無法操作!","進(jìn)程小軟!",MB_OK);

  }

  }

  //至此結(jié)束、、測(cè)試程序可以隨便寫一個(gè)調(diào)MessageBox的、、

  #include "stdio.h"

  #include "windows.h"

  int main()

  {

  Printf(“輸入一個(gè)字符 啟動(dòng) MessageBox 以便測(cè)試、、”);

  getchar(); //此時(shí)打開注入工具向此進(jìn)程注入DLL、、

  MessageBoxA(NULL, "HOOK失敗", "源程序的MessageBox", MB_OK);

  return 0;

 

上一篇:安卓防火墻 PS DroidWall

下一篇:51cto任意密碼修改(失效了)