注入:就是把我的**,
新增到已經遠行的遠端程序的方法;
如 :
存的東西完全不一樣,或者說不可預料。
所以說如果程序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/8jofranks 於南昌
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...