遠程線程注入代碼
05-01
其他話暫且不說,直接新建個基於對話框的MFC項目出來。它長這樣的:
推薦閱讀:
一般情況下,操作系統會為我們每個進程分配一定的內存空間,兩個獨立的進程是不能相互訪問對方的內存空間的。那我們又想在對方進程中添加一些有意思的代碼去訪問它自己的數據,難道我們就沒啥辦法了么?看了龍哥的《如此HOOK》這篇文章,受到了啟發,採用遠程線程注入的方法,可以通過調用系統API在對方進程中申請一塊內存,代碼如下:
這段代碼第一行就是申請成功返回的內存地址(對方進程的地址),hProcess是我們通過系統調用打開的對方進程的句柄(對方進程就是上面那個MFCApplication1.exe)。注意申請的這一段內存一定要是可讀可寫可執行。為了證明這塊內存空間申請成功,下面上windbg這個調試器對MFCApplication1.exe進行調試,先attach上這個進程吧:
再反彙編這段內存:
看到那個問號沒有,分明就不是代碼卅,異常很正常,但我們注入的都是代碼,彈出對話框之後應該結束的。咋會運行到一段奇怪的非代碼的代碼上去呢?
重啟項目,附上調試器。
那我們就在這裡下個斷點,等它執行到此處。
我們發現後面還有個call,怎麼回事,不是只調用了一個MessageBoxA么。在VS裡面反彙編我們那個要注入的函數看看
選擇默認就行,就不會加這個__RTC_Check_Esp了,重啟項目看看我們注入的那一段代碼被再次反彙編成啥了:
推薦閱讀: