VC 積累 之五 程序注入技術

2021-06-10 01:07:51 字數 3377 閱讀 5691

注入:就是把我的**,

新增到已經遠行的遠端程序的方法;

如 :   

存的東西完全不一樣,或者說不可預料。

所以說如果程序a想要看看或者修改程序b位址空間中的內容,就必須深入到其位址空間中,因為dll是可以被載入到任何程序當中的,所以在程序注入中,dll應該是主角,也就是說一些核心的**都應該放在dll中編寫。

來看一下步驟:

1、找到遠端程序的processid

2、全權開啟它

3、在遠端程序中申請一塊記憶體,大小為你要寫入的東東的大小

4、在這個申請好的記憶體裡面寫入你要注入的東西

5、建立乙個遠端執行緒來執行這個記憶體

6、關閉程序

主要用到的api函式:

openprocess(...) //獲取已知程序的控制代碼;

handle openprocess(

dword dwdesiredaccess, //渴望得到的訪問許可權(標誌)

bool binherithandle, // 是否繼承控制代碼

dword dwprocessid// 程序標示符

);

virtualallocex(...) //在程序中申請空間;
lpvoid virtualallocex(

handle hprocess,//申請記憶體所在的程序控制代碼

lpvoid lpaddress,//保留頁面的記憶體位址

size_t dwsize,//想分配的記憶體的大小,位元組為單位, 實際分配的記憶體的大小是頁記憶體大小的整數倍

dword flallocationtype,//

dword flprotect//

);

writeprocessmemory(...) //向程序中寫入東西;
bool writeprocessmemory(

handle hprocess,

lpvoid lpbaseaddress,//要寫的記憶體首位址,寫之前需檢查目標位址是否可用

lpvoid lpbuffer,//指向要寫的資料的指標

dword nsize,//要寫入的位元組數

lpdword lpnumberofbyteswritten//

);

getprocaddress(...) //取得函式在dll中的位址;
farproc getprocaddress(

hmodule hmodule, // dll模組控制代碼

lpcstr lpprocname // 函式名

);

createremotethread(...) //在其他程序中建立新執行緒;
handle winapi createremotethread( 

__in handle hprocess,

__in lpsecurity_attributes lpthreadattributes, //指定了執行緒的安全屬性

__in size_t dwstacksize, //執行緒初始大小,以位元組為單位,如果該值設為0,那麼使用系統預設大小

__in lpthread_start_routine lpstartaddress, //在遠端程序的位址空間中,該執行緒的執行緒函式的起始位址.

__in lpvoid lpparameter, //  傳給執行緒函式的引數

__in dword dwcreationflags,// 執行緒建立的標誌

__out lpdword lpthreadid //id

);

closehandle(...) //關閉控制代碼;

下面看一下封裝好的函式:

//szmodule是dll的位址,  dwid是程序的id

bool insertdll(lpctstr szmodule, dword dwid)

有的時候你沒有足夠的許可權是不能對程序進行注入的,你必須提權,這裡要用到這幾個api函式:

openprocesstoken  獲得程序訪問令牌控制代碼

bool openprocesstoken(

__in handle processhandle, //要修改訪問許可權的程序控制代碼

__in dword desiredaccess, //指定你要進行的操作型別

__out phandle tokenhandle //返回的訪問令牌指標

);

adjusttokenprivileges對這個訪問令牌進行修改

bool adjusttokenprivileges(

handle tokenhandle, // handle to token訪問令牌的控制代碼

bool disableallprivileges, // disabling option 決定所有權

ptoken_privileges newstate, // privilege information指明要修改的許可權

dword bufferlength, // size of buffer 結構的長度

ptoken_privileges previousstate, // original state buffer 存放修改前訪問許可權的資訊

pdword returnlength // required buffer size

);

lookupprivilegevalue

獲取本地唯一的標識

bool lookupprivilegevalue(

lpctstr lpsystemname, // system name

lpctstr lpname, // privilege name

pluid lpluid // locally unique identifier

);

看一下封裝好的函式:

bool enableprivilege(lpctstr lpszprivilegename, bool benable)

本文講的是利用遠端程序來注入dll,  

dll注入技術還有: 用登錄檔來注入dll,      用windows鉤子來注入dll,     用木馬dll來注入dll,   

用createproces來注入**    用木馬dll 來注入dll

這些在後續的文章中還會講到。

2012/10/8

jofranks 於南昌

Dll注入技術之依賴可信程序注入

黑客反病毒 dll注入技術之依賴可信程序注入 依賴可信程序注入原理是利用windows 系統中services.exe這個許可權較高的程序,首先將a.dll遠執行緒注入到services.exe中,再利用a.dll將b.dll遠執行緒注入到待注入程序中。具體過程如下圖所示 這裡提供乙個小技巧,當注入...

DLL注入技術之依賴可信程序注入

dll注入技術之依賴可信程序注入 依賴可信程序注入原理是利用windows 系統中services.exe這個許可權較高的程序,首先將a.dll遠執行緒注入到services.exe中,再利用a.dll將b.dll遠執行緒注入到待注入程序中。具體過程如下圖所示 這裡提供乙個小技巧,當注入到servi...

DLL注入技術之依賴可信程序注入

dll注入技術之依賴可信程序注入 依賴可信程序注入原理是利用windows 系統中services.exe這個許可權較高的程序,首先將a.dll遠執行緒注入到services.exe中,再利用a.dll將b.dll遠執行緒注入到待注入程序中。具體過程如下圖所示 這裡提供乙個小技巧,當注入到servi...