注入方式,劫持dll注入的實現

基礎的東西不想多講,簡單的提一句,具體請問度娘。

Windows的PE加載器會從執行文件目錄下尋找DLL,若是找不到再去其餘地方找。

把咱們特定的DLL假裝成系統DLL,而後放在執行文件目錄下,就能實現DLL劫持。

劫持來幹嗎? 確定是要在被幹程序體內有一席之地,而後想幹什麼就幹什麼。好比劫持ws2_32.dll能夠實現抓包,改包,轉向等。

如何僞造?
  
固然是僞造導出表啦,導出表是一個DLL最總要的部分。

LPK.dll。 網絡

#pragma comment(linker, "/EXPORT:LpkInitialize=_gamehacker_LpkInitialize,@1")
#pragma comment(linker, "/EXPORT:LpkTabbedTextOut=_gamehacker_LpkTabbedTextOut,@2")
#pragma comment(linker, "/EXPORT:LpkDllInitialize=_gamehacker_LpkDllInitialize,@3")
#pragma comment(linker, "/EXPORT:LpkDrawTextEx=_gamehacker_LpkDrawTextEx,@4")
#pragma comment(linker, "/EXPORT:LpkExtTextOut=_gamehacker_LpkExtTextOut,@6")
#pragma comment(linker, "/EXPORT:LpkGetCharacterPlacement=
_gamehacker_LpkGetCharacterPlacement,@7")
#pragma comment(linker, "/EXPORT:LpkGetTextExtentExPoint=_gamehacker_LpkGetTextExtentExPoint,@8")
#pragma comment(linker, "/EXPORT:LpkPSMTextOut=_gamehacker_LpkPSMTextOut,@9")
#pragma comment(linker, "/EXPORT:LpkUseGDIWidthCache=_gamehacker_LpkUseGDIWidthCache,@10")
#pragma comment(linker, "/EXPORT:ftsWordBreak=_gamehacker_ftsWordBreak,@11")

 

複製代碼



是的,純手寫僞造很麻煩,一下子還得寫轉發代碼~~~。 若是某DLL的導出函數比較多,那真是一個累人的活兒。

在這裏我介紹一款比較好用的自動生成工具:

aheadlib

功能:根據輸入DLL的導出表生成劫持源碼。

把生成的源碼載入vc編譯器是能夠正常編譯的。  

選項很簡單,本身摸索,通常默認便可。

在生成的代碼中,你能找到:

AheadLib_ + 原始DLL導出函數名 ()

這樣的函數

好比:函數

ALCDECL AheadLib_gethostbyname(void)
{
                  
        GetAddress("gethostbyname");
        __asm JMP EAX;
}

 


你能夠在這個函數中添加你本身的響應代碼。 攔截就直接retn +參數長度。孩子,知道抓包工具該怎麼寫了吧?

下面介紹一個好玩的攔截例子。能夠注入到大部分的企鵝網絡遊戲客戶端。

在system32目錄下有一個 rasadhlp.dll。

企鵝遊戲在啓動的時候會加載rasadhlp.dll,並且仍是在保護機制開啓以前。

因此劫持rasadhlp.dll就能過保護輕鬆注入騰訊遊戲。【今天的LOL至少還能注入 2015.7.12】

使用工具,生成一份rasadhlp.dll的劫持代碼。

而後在DllMain中添加一些代碼。

<ignore_js_op> 

添加的代碼:

注意Load() 函數時工具生成的。這個函數用來加載原始DLL。

工具

HMODULE hLoad;
                char *v;
                hLoad=LoadLibrary("zr.dll");
                if (hLoad==NULL)
                {
                        MessageBoxA(NULL,"沒法載入 zr.dll",NULL,MB_OK);
                        goto loading;
                }
                v=(char *)GetProcAddress(hModule,"TxEntry");
                if(!v)
                {
                                MessageBoxA(NULL,"沒法找到 TXEntry 函數",NULL,MB_OK);
                                goto loading;
                }
                CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)v,0,0,NULL);
loading:
                return Load();

 



這段代碼的目的是加載zr.dll而後調用TxEntry函數。

注入進去後就能夠爲所欲爲的幹一些不和諧的事情。 好比搜索內存/修改內存。

到了如今,就能夠去易語言論壇找一些最新的 無限視距DLL 注入進去試試啦。

<ignore_js_op> 

當按下確認按鈕後 TP保護纔開始加載。

相關工具已經打包。spa

相關文章
相關標籤/搜索