Jektor:一款功能強大的Windows用戶模式Shellcode執行測試工具
關于Jektor
Jektor是一款功能強大的Windows用戶模式Shellcode執行測試工具,該工具可以幫助廣大研究人員了解和測試惡意軟件所使用的各種不同技術。
該工具主要針對的是Shellcode注入技術,可以演示惡意軟件在目標系統上執行Shellcode時所使用的技術方法,其中包括:
- 動態解析API函數以避免IAT包含
- 使用未記錄的NT Windows API函數
- 通過CreateThread執行本地Shellcode
- 通過CreateRemoteThread執行遠程Shellcode
- 通過QueueUserAPC支持本地Shellcode注入
- 通過EnumTimeFormatsEx支持本地Shellcode注入
- 通過CreateFiber進行本地Shellcode注入
反病毒檢測
在使用動態函數地址解析時,將一組NOP預掛起到Msfvenom異或加密Shellcode Payload后,可以繞過Windows Defender。
IAT導入規避
Jektor利用了動態函數地址解析,并使用了LoadLibrary和GetProcessAddress來增加了靜態分析的難度。
除此之外,很多惡意軟件也不會直接調用類似VirtualAlloc這樣的重要函數,這也會使得調試和通過斷點轉儲Shellcode變得更加困難。
工具下載
廣大研究人員可以使用下列命令將該項目源碼克隆至本地:
- git clone https://github.com/FULLSHADE/Jektor.git
通過CreateThread實現本地Shellcode執行
在Windows上,當你想要在當前進程中創建一個新的線程,需要調用CreateThread函數,這是在一個進程中執行惡意代碼或Shellcode時會使用的一個最基本的技術了。此時,我們只需要為Shellcode分配一個內存區域,然后將Shellcode移動到分配的內存區域中,并使用指向該區域地址的指針來調用CreateThread即可。調用CreateThread時,需傳遞lpStartAddress 參數,而該參數是一個指向由新創建線程所執行的應用程序定義函數的指針。
通過EnumTimeFormatsEx實現本地Shellcode執行
EnumTimeFormatsEx是一個Windows API函數,可以枚舉提供的時間格式,能夠用于執行Shellcode,因為第一個參數可以接收用戶定義的指針:
- BOOL EnumTimeFormatsEx(
- [in] TIMEFMT_ENUMPROCEX lpTimeFmtEnumProcEx,
- [in, optional] LPCWSTR lpLocaleName,
- [in] DWORD dwFlags,
- [in] LPARAM lParam
- );
- 使用VirtualAlloc為Shellcode Payload分配本地內存。
- 使用memcpy/RtlCopyMemory將Shellcode Payload移動到新分配的內存區域。
- 將Shellcode作為EnumTimeFormatsEx的lpTimeFmtEnumProcEx參數來傳遞,并觸發Shellcode。
通過QueueUserAPC實現本地Shellcode執行
- 使用VirtualAlloc為Shellcode分配內存緩沖區。
- 使用GetCurrentProcess獲取當前進程的句柄。
- 使用WriteProcessMemory向新分配的內存區域寫入Shellcode Payload。
- 使用GetCurrentThread獲取當前線程的句柄。
- 將分配的內存區域以pfnAPC參數的形式提供給QueueUserAPC,并將新創建的APC程序加入隊列。
- 通過調用未記錄的NtTestAlert函數觸發Shellcode Payload,該函數將清除當前線程的APC隊列。
- 通過關閉當前線程和當前進程的句柄來執行清理任務。
項目地址
Jektor:【GitHub傳送門】