剛剛調好的dll遠端程序注入** 備份一下
void cinjectprocessdlg::onbtninject()
::getwindowthreadprocessid(hwnd, &dwprocessid);
//開啟程序
hprocess = openprocess(process_all_access, false, dwprocessid);
if (!hprocess)
//在開啟的程序中開闢一塊記憶體區域
premotedllpath = virtualallocex(hprocess, null, sizeof(sdllpath), mem_commit, page_readwrite);
//將要注入的dll的完整路徑字串寫入到剛開闢的記憶體中(因為要在對方程序中讀取這個字串 所以必須把字串寫入到對方程序的位址空間)
writeprocessmemory(hprocess, premotedllpath, sdllpath, sizeof(sdllpath), &dwlen);
//建立遠端執行緒
//第三個引數說明一下 getmodulehandle取得kernel32模組控制代碼 getprocaddress取得kenrnel32下的loadlibrarya函式的位址 這兩個函式是本地函式
//獲取的是本地載入的模組及函式的位址 而這個位址是用在遠端 是因為kernel32的模組控制代碼和函式位址整個系統通用 除kernel32和user32外 其它模組不能這樣做
hthread = createremotethread(hprocess, null, 0, (lpthread_start_routine)getprocaddress(getmodulehandle("kernel32"), "loadlibrarya"), premotedllpath, 0, null);
waitforsingleobject(hthread, infinite);
//獲取執行緒的返回值 因為執行緒函式是loadlibrarya 所以這兒的值就是loadlibrarya的返回值 儲存以備freelibrary使用
getexitcodethread(hthread, &dwthreadret);
closehandle(hthread);
//釋放先前在遠端程序中開闢的記憶體
virtualfreeex(hprocess, premotedllpath, sizeof(sdllpath), mem_release);
//再建立個遠端執行緒 本次遠端執行緒的執行緒函式是freelibrary 以釋放對自定義dll的引用
hthread = createremotethread(hprocess, null, 0, (lpthread_start_routine)getprocaddress(getmodulehandle("kernel32"), "freelibrary"), (void*)dwthreadret, 0, null);
closehandle(hthread);
//關閉開啟的程序控制代碼 至此結束
closehandle(hprocess);
afxmessagebox("exe中注入執行緒執行結束!");
}注意一點,在mfc的dll中要載入對話方塊資源以顯示對話方塊的話要把類似這樣的**
c***dlg dlg;
dlg.domodal();
**:
VC DLL注入目標程式
向其他程式注入dll的原理比較簡單 就是呼叫幾個windowsapi,在目標程式中開啟乙個執行緒,在這個執行緒中載入動態庫,動態庫被載入時會執行初始化的函式,我們就可以在這個初始化函式中對目標程式做任何想做的事情。或者讓目標程式代替你的程式做一些事情。當目標程式注入dll後,這個負責注入的程式就可以...
遠端程序注入嘗試
漸漸的漸漸的,對於win32的程式設計有了一定的了解了,自己嘗試了一下遠端執行緒注入。雖然說最後的結果沒有在我的機器上面實現 可能是作業系統的問題,畢竟我的實現思路沒有什麼問題 首先了解一下什麼是遠端執行緒,這一切都由於win32提供了乙個函式,他叫createremotethread,它允許你在別...
注入系列 遠端執行緒注入
1.使用程序pid開啟程序,獲得控制代碼 2.使用程序控制代碼申請記憶體空間 3.把dll路徑寫入記憶體 4.建立遠端執行緒,呼叫loadlibrary 5.釋放收尾工作或者解除安裝dll 實現 bool cinjectdlg zwcreatethreadexinjectdll dword dwpr...