dll注入系列 傀儡程序

2021-09-17 22:23:59 字數 1858 閱讀 1693

0x0 介紹

之前說過,要動態注入dll檔案,則需要執行程式中本身沒有的載入操作,必須改變控制流,除了建立執行緒外,還可以劫持控制流。這與二進位制漏洞利用比較類似,我們向程式寫入一段shellcode,然後改變執行緒上下文,讓其去執行shellcode,這段shellcode完成loadlibrary的操作,就完成了dll注入。

傀儡程序的本質是利用其他程序空間來執行我們的寫入**,它的實現並不困難,經常作為惡意程式的記憶體駐留手段,它可以將乙個正在執行的程序作為傀儡程序,也可以建立乙個新的程序作為傀儡程序,這裡是用dll注入來進行示例,所以利用的是正在執行的程序。

0x1 setthreadcontext

對於乙個正在執行的執行緒,我們可以通過suspendthread函式暫停該執行緒的執行,然後系統會將執行緒上下文儲存起來,它擁有cpu的執行狀態資訊,resumethread函式利用該執行緒上下文來恢復執行緒的執行。乙個想法是我們使用setthreadcontext直接修改儲存的上下文的eip,就可以劫持控制流。

具體操作過程:

typedef struct _inject_data         //結構體用於儲存shellcode執行所需資料

inject_data;

void shellcodefunc(void)

}

if (thread32first(hthreadsnap, &te32))  

}while (thread32next ( hthreadsnap, &te32 )) ;

}

while(...)

...}

inject_data data;

lpdata = (pbyte)virtualallocex(hprocess, null, 0x1000, mem_commit, page_execute_readwrite);

zeromemory(&data,sizeof(inject_data));

prepareshellcode(data.shellcode);

lstrcpy(data.szdllpath,szdllfullpath); //dll路徑

data.addrofloadlibrarya = uloadlibraryaddrintargetproc; //loadlibrarya的位址

data.originaleip = ueip; //原始的eip位址

data.lpdllpath = lpdata + field_offset(inject_data,szdllpath) ; //szdllpath在目標程序中的位置

//向目標程序寫入shellcode

writeprocessmemory(hprocess, lpdata, &data, sizeof(inject_data), &dwret)

setthreadcontext(hthread,&context)

resumethread(hthread);

0x2 writeprocessmemory

除了設定執行緒上下文,直接暴力的用writeprocessmemory修改指令也是可以的。我們對一些呼叫頻率較高的api入口進行修改,這類似inlinehook,使得程式一旦呼叫該api,控制流就跳轉到shellcode中,然後在shellcode中進行入口的修復以及dll的載入,也能達到dll注入的效果。

0x3 廢話

雖然這裡的目的是dll注入,但實際上這是一些通用的劫持程式控制流的方法,本質上是通過shellcode來完成我們的功能。

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...