遠端注入DLL 詳細介紹

2021-04-09 01:21:53 字數 1842 閱讀 6477

c.    遠端注入dll

沒錯,現在討論的就是傳說中的遠端注入技術,目前一種非常流行的隱藏技術,因為它沒有程序,而前面討論的兩種方法都會有程序出現,因此,有經驗的管理員很容易發現,然後先殺程序,在找出後門檔案刪除。要實現遠端注入,我們要編寫兩個程式,乙個是後門檔案,這裡不是把它寫成.exe檔案,而是寫成.dll檔案,在這裡先說一下.dll檔案,.dll檔案,其實就是動態連線庫,它裡面裝封了提供.exe檔案呼叫的函式,一般情況下,雙擊它,是不能執行它的,它只能由.exe來呼叫,於是就有了遠端注入了,原理很簡單:我們把後門的主要功能寫成乙個函式,然後裝封到.dl檔案中,然後再另外寫乙個執行檔案來啟動它,這樣就不會有後門的程序了。那遠端注入又指什麼呢?這個問題問得好,一般情況下,每個程序都有自己的私有空間,理論上,別的程序是不允許對這個私人空間進行操作的,但是,我們可以利用一些方法進入這個空間並進行操作,將自己的**寫入正在執行的程序中,於是就有了遠端注入了。

對dll後門的編寫就不作過多的討論了,現在來看實現注入功能的可執行檔案的編寫:

用到的函式有:

openprocesstoken();

lookupprivilegevalue();

adjusttokenprivileges();

openprocess();

virtualallocex();

writeproces**emory();

getprocaddress();

createremotethread();

先簡單的介紹以下這些函式的作用,因為我們要操作的是系統中的其他程序,如果沒有足夠的系統許可權,我們是無法寫入甚至連讀取其它程序的記憶體位址的,所以我們就需要提公升自己的許可權,用到以下3個函式

openprocesstoken();  //開啟程序令牌

lookupprivilegevalue();//返回乙個本地系**一無二的id,用於系統許可權更改

adjusttokenprivileges();//從英文意思也能看出它是更改程序許可權用的吧?

進入宿主程序的記憶體空間

在擁有了進入宿主程序空間的許可權之後,我們就需要在其記憶體加入讓它載入我們後門的**了,用loadlibrarya()函式就可以載入我們的dll了,它只需要dll檔案的路徑就可以了,在這裡我們要把dll檔案的路徑寫入到宿主的記憶體空間裡,因為dll的檔案路徑並不存在於宿主程序記憶體空間了,用到的函式有:

openprocess();//用於修改宿主程序的一些屬性,詳細參看msdn

virtualallocex();//用於在宿主記憶體空間中申請記憶體空間以寫入dll的檔名

writeproces**emory();//往申請到的空間中寫入dll的檔名

在宿主中啟動新的執行緒

用的是loadlibrarya()函式來載入,但在使用loadlibrarya()之前必須知道它的入口位址,所以用getprocadress來獲得它的入口位址,有了它的位址以後,就可以用createremotethread()函式來啟動新的執行緒了,到次,整個注入過程完成,不過還不非常完善,這就留給聰明的你來完成了;)。

簡單的例子:

#include "stdafx.h"

int enabledebugpriv(const char * name)

bool injectdll(const char *dllfullpath, const dword dwremoteprocessid)

return true;

} int apientry winmain(hinstance hinstance,

hinstance hprevinstance,

lpstr     lpcmdline,

int       ncmdshow)

遠端注入DLL

ool cinject injectdll char m path,dword m id 如果開啟程序成功,則在該程序中開闢記憶體空間 this m baseaddress virtualallocex m handle,null,1024,mem commit,page execute readw...

遠端執行緒DLL注入

在其他程序中,建立乙個新的執行緒來loadlibrarya我們的dll。include include void main 給程序分配記憶體 lpvoid baseaddress char strdllname int len strlen strdllname 1 baseaddress virt...

遠端dll注入 C

using system using system.collections.generic using system.componentmodel using system.data using system.diagnostics using system.drawing using system...