DLL劫持注入技術分析、過各種遊戲保護!讓你做你愛做的事情!
劫持DLL就是要製作一個“假”的DLL,但是功能又不能失真。
可執行檔案在呼叫某函式時,要載入該函式所在的DLL。如果我們偽造一個DLL,讓它包含所有被劫持DLL的匯出函式。可執行檔案會執行載入偽造的DLL,在偽造DLL裡面做我們自己想做的事情。
DLL注入與DLL劫持的比較:
DLL劫持相當於一個定時的炸彈,只等待可執行檔案雙擊執行,拔出導火線,而DLL注入,目標必須處於執行狀態,而且DLL注入很容易被攔截。
DLL注入需要一個跳板,也就是發射導彈的發射器,讓其注入到目標程序,
而DLL劫持不需要,只需要埋地雷一樣,埋在目標檔案目錄下,可以埋一堆雷。
偽造的DLL需要構造與真實DLL一樣的匯出函式表,注入的DLL不需要。
利用AheadLib幫助您構造匯出函式表
很多可利用的DLL都包含有很多匯出函式,手工新增相當累。AheadLib可以自動生成匯出函式。
現在假設你要劫持ABCD.DLL。他會生產一個CPP檔案。這CPP檔案中包含了,該DLL的所有匯出函式。其形式如下:
ALCDECL AheadLib_FuncName(void)
{
GetAddress("FuncName"); //獲得真實的DLL中FuncName函式地址
__asm JMP EAX; //跳到真實DLL中FuncName函式地址執行}
然後,構建一個DLL工程,工程名就取名為ABCD,然後直接拿那個CPP去編譯執行。要加功能的話,就直接在DLLMAIN中新增你想做的事情。
// 入口函式
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
//////////////////////////////////////////
// do what you want to do
/////////////////////////////////////////
Load();//這個函式主要是載入真實DLL,為獲取匯出函式地址嘛~
}
else if (dwReason == DLL_PROCESS_DETACH)
{
Free();
}
return TRUE;
}
做完後,你就把它生成DLL,拷貝到你想要蹂躪的程序的安裝目錄中,它一執行就自動載入你的DLL了。
最後你也可以用程式設計寫一個DLL自動替換工具、先替換。然後運行遊戲、退出遊戲的時候自動替換回來。相信這很容易實現的。
希望大家一起交流。