1. 程式人生 > >DLL劫持注入技術分析、過各種遊戲保護!讓你做你愛做的事情!

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自動替換工具、先替換。然後運行遊戲、退出遊戲的時候自動替換回來。相信這很容易實現的。

希望大家一起交流。