一般情況下,每個程序都有自己的私有空間,理論上,别的程序是不允許對這個私人空間進行操作的,但是,我們可以利用一些方法進入這個空間并進行操作,将自己的代碼寫入正在運作的程序中,于是就有了遠端注入了。
對dll後門的編寫就不作過多的讨論了,現在來看實作注入功能的可執行檔案的編寫:
用到的函數有:


先簡單的介紹以下這些函數的作用,因為我們要操作的是系統中的其他程序,如果沒有足夠的系統權限,我們是無法寫入甚至連讀取其它程序的記憶體位址的,是以我們就需要提升自己的權限,用到以下3個函數
進入宿主程序的記憶體空間
在擁有了進入宿主程序空間的權限之後,我們就需要在其記憶體加入讓它加載我們後門的代碼了,用 LoadLibraryA()函數就可以加載我們的DLL了,它隻需要DLL檔案的路徑就可以了,在這裡我們要把DLL檔案的路徑寫入到宿主的記憶體空間裡,因為DLL的檔案路徑并不存在于宿主程序記憶體空間了,用到的函數有:
在宿主中啟動新的線程
用的是LoadLibraryA()函數來加載,但在使用LoadLibraryA()之前必須知道它的入口位址,是以用GetProcAdress來獲得它的入口位址,有了它的位址以後,就可以用CreateRemoteThread()函數來啟動新的線程了,到次,整個注入過程完成,不過還不非常完善,這就留給聰明的你來完成了;)。
簡單的例子:


在NT系列作業系統中,EnableDebugPriv函數實作的部分可以去掉的。要研究木馬這個技術可是基礎。