在windows下當乙個可執行檔案執行時,windows載入器將可執行模組對映到程序的位址空間中,載入器分析可執行模組的輸入表,並設法找出任何需要的dll,並將它們對映到程序的位址空間中。由於輸入表是根據dll名來進行查詢,首先是查詢當前目錄下有沒這檔案,沒有話在去查詢系統目錄c:\\windows\\system32有沒這檔案,所以我們可以完全趁這個機會去劫持dll,把他劫持下來後就可以在裡面進行我們要做的事情。
為了讓我們自己開發的補丁dll有匯出函式,我們可以用 #parma comment(..),如:
#pragma comment(linker, "/export:testadd=_testdlllib_testadd,@1")
1.補丁前dll。
補丁前
//by symanli
#include "stdafx.h"
#include "dll.h"
bool apientry dllmain( handle hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
)//原始函式
int testadd(int a,int b)
2.補丁後dll
//這是補丁**。by symanli
// 標頭檔案
#include // 巨集定義
#define externc extern "c"
#define naked __declspec(naked)
#define export __declspec(dllexport)
#define alcpp export naked
#define alstd externc export naked void __stdcall
#define alcfast externc export naked void __fastcall
#define alcdecl externc naked void __cdecl
// testdlllib 命名空間
namespace testdlllib
; // 原始函式返回位址
// 載入原始模組
inline bool winapi load()
return (m_hmodule != null);
}// 釋放原始模組
inline void winapi free()
}// 獲取原始函式位址
farproc winapi getaddress(pcstr pszprocname)
wsprintf(tztemp, text("無法找到函式 %hs,程式無法正常執行。"), pszprocname);
messagebox(null, tztemp, text("aheadlib"), mb_iconstop);
exitprocess(-2);
}return fpaddress;
}}using namespace testdlllib;
// 入口函式
bool winapi dllmain(hmodule hmodule, dword dwreason, pvoid pvreserved)
return load();
}else if (dwreason == dll_process_detach)
free();
}return true;
}// 匯出函式
alcdecl testdlllib_testadd(void)
#pragma comment(linker, "/export:testadd=_testdlllib_testadd,@1")
exe呼叫
//exe呼叫**
#pragma comment(lib,"tstdll.lib")//匯入先前dll的lib,就是最原始的lib
void ctstexedlg::onbutton1()
DLL補丁劫持製作
dll 由於輸入表中只包含 dll 名而沒有它的路徑名,因此引導程式必須在磁碟上搜尋 dll 檔案。首先會嘗試從當前程式所在的目錄載入 dll,如果沒找到,則在windows 系統目錄中查詢,最後是在環境變數中列出的各個目錄下查詢。利用這個特點,先偽造乙個系統同名的 dll,提供同樣的輸出表,每個輸...
DLL劫持原理
系統有一套標準的搜尋dll路徑的規則,這套規則又分為兩種搜尋模式,安全搜尋模式,非安全搜尋模式。預設情況下啟用安全dll搜尋模式。要禁用此功能,需建立hkey local machine system currentcontrolset control session manager safedll...
dll劫持破壞360
說起dll劫持技術,相信大家都不會陌生,因為這種技術的應用比較廣泛,比如 木馬後門的啟動 破解程式的記憶體補丁 外掛程式外掛程式的注入以及加密狗的模擬 等。之所以dll劫持技術深受黑客們的喜愛,主要是因為該技術可以有效的躲過大部分殺軟,並且實現起來技術難度不大。dll劫持技術也不是什麼新技術,記得在...