亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

實現HOOK其他進程的Messagebox(2) DLL注入工具(2)

發布時間:2020-07-18 04:18:09 來源:網絡 閱讀:1513 作者:天晴V587 欄目:安全技術

遠程線程 注入、、

注入有幾個核心的API函數、、

OpenProcess -                   打開目標進程。

VirtualAllocEx/VirtualFreeEx -     在目標進程中分配/釋放內存空間。

WriteProcessMemory -            在目標進程中寫入要加載的DLL路徑。

CreateRemoteThread -            遠程加載DLL的關鍵函數,用于控制目標進程調用API函數。

                              //在這里調LoadLibrary(地址不用傳因為同一機器加載它所在的Kerner32.dll是相同的、、)

                              //且LoadLibrary正好只有一個參數符合遠程線程規則、、

LoadLibrary -                    目標進程通過調用此函數來加載我們自己編寫的DLL。


思路已經有了看細節實現吧、、

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

{

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

        {

                  enableDebugPriv(); //提權 此函數在后邊會記錄、有了它就可以OpenProcess任何進程、、

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

                  CString filter;  

                  CString PathDll;  

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

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

                  if(FindDll.DoModal()==IDOK)

                  {

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

                  }

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

GetBuffer  這個函數是為一個CString對象重新獲取其內部字符緩沖區的指針、、返回非const故可以修改

 //現在得到了注入目標進程的  DLL的完整路徑名、、存放于Path、、

//打開目標進程

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 ); 這里說一下第一個參數、、

OpenProcess第一個參數指定了三種權限。在Win32系統下,每個進程都擁有自己的4G虛擬地址空間,各個進程之間都相互獨立。如果一個進程需要完成跨進程的工作的話,那么它必須擁有目標進程的相應操作權限。

PROCESS_CREATE_THREAD表示我可以通過返回的進程句柄在該進程中創建新的線程,也就是調用CreateRemoteThread的權限;

同理,PROCESS_VM_OPERATION則表示在該進程中分配/釋放內存的權限,也就是調用VirtualAllocEx/VirtualFreeEx的權限;

PROCESS_VM_WRITE表示可以向該進程的地址空間寫入數據,也就是調用WriteProcessMemory的權限。

//申請空間將我們的DLL路徑寫到目標進程地址空間里、、(進程是獨立的哦)、、

//之前的IAT HOOK是更改內存信息VirtualQuery  VirtualProtect、、現在是申請內存空間、、VirtualAllocEx

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

//將DLL路徑Path寫到申請的pDllAddr地址空間去、、、

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

//得到LoadLibraryA函數的地址因為kernel32.dll加載時候的基地址對于一個機器是固定的、、

//如果是一個不固定需要將函數地址也向DLL路徑那樣寫到目標進程的地址空間中、、

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

//通過CreateRemoteThread將LoadLibrary作為目標進程的一個線程來啟動、、

//這樣就可以可以做到使目標進程調用LoadLibrary加載咱得DLL文件了、、

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

//等待LoadLibrary加載完畢即這個遠程線程執行完畢、、

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

//第二個參數dwMilliseconds有兩個具有特殊意義的值:0和INFINITE。

//若為0,則該函數立即返回;

//若為INFINITE,則線程一直被掛起,直到hHandle所指向的對象變為有信號狀態時為止。

CloseHandle(hkernel32);

CloseHandle(Thread);

//釋放目標進程中申請的空間

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

CloseHandle( hThread );

CloseHandle( hProcess );  //關閉句柄釋放申請的內存空間、、、

        }

        else

        {

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

        }

}

//至此結束、、測試程序可以隨便寫一個調MessageBox的、、

#include "stdio.h"

#include "windows.h"

int main()

{

Printf(“輸入一個字符 啟動 MessageBox 以便測試、、”);

getchar(); //此時打開注入工具向此進程注入DLL、、

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

return 0;


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

商都县| 石阡县| 若尔盖县| 房山区| 克什克腾旗| 卢龙县| 额济纳旗| 读书| 揭阳市| 白银市| 深圳市| 萍乡市| 水富县| 五家渠市| 乐清市| 陇川县| 河津市| 宽城| 阿拉善右旗| 富裕县| 垣曲县| 于田县| 旬邑县| 公主岭市| 怀安县| 长白| 泰安市| 观塘区| 六枝特区| 永丰县| 前郭尔| 确山县| 河北区| 赤水市| 兴海县| 政和县| 富平县| 巍山| 观塘区| 邮箱| 滦南县|