當前位置:
首頁 > 新聞 > LoadLibrary:一款能夠允許Linux程序從DLL文件中載入或調用函數的工具

LoadLibrary:一款能夠允許Linux程序從DLL文件中載入或調用函數的工具


介紹


今天給大家推薦的這個代碼庫將允許原生Linux程序從一個WindowsDLL文件中載入或調用功能函數。下面是一個簡單的演示示例,我將Windows Defender「移植」到了Linux平台。



$ ./mpclient eicar.com

main(): Scanning eicar.com...


EngineScanCallback(): Scanning input


EngineScanCallback(): Threat Virus:DOS/EICAR_Test_Fileidentified.


工作機制


項目源碼的peloader目錄中包含一個來自ndiswrapper的自定義PE/COFF載入器,這個庫可以完成重定位和導入操作,並提供了一個API(dlopen)。註:代碼支持使用gdb進行調試。


這個工具的目的是提升Linux系統平台的可擴展性以及對Windows代碼庫的fuzzing效率,可供測試的待選項可以是視頻編碼解碼器、解壓縮庫、病毒掃描工具或圖片解碼器等等。


-C++異常掃描和處理;


-從IDA載入額外的符號鏈接;


-使用GDB進行調試、設置斷點和棧追蹤;


-設置運行時函數鉤子;


-掃描內存崩潰問題;


如果你需要從外部添加功能,你可以自行編寫stubs,實現起來也非常的簡單方便。


工具的目的


想要在Windows平台上進行分布式可擴展的Fuzzing測試實際上是非常困難的,而且效率也非常低,對於那些終端安全產品更是如此,因為它們使用了非常複雜的組件,而這些組件會跨內核跨用戶空間進行通信互聯。如果我們想要對這類產品進行Fuzzing測試或收集數據,將會需要調用到整個虛擬化的Windows環境。


但在Linux平台上,這一切都不成問題。我通過測試之後發現,我們可以將Windows的反病毒產品組件移植到Linux平台上。這樣一來,我就能夠以很小的開銷來對代碼進行測試了,而且我們還可以輕鬆地擴展測試。

當然了,這只是我的個人觀點,但我也認為Linux平台上同樣有很多功能強大的工具。


Windows Defender


MsMpEng是一款惡意軟體保護服務,Windows8、8、10、以及Windows Server 2016等系統默認都會開啟這項功能。除此之外,Microsoft Security Essentials、System Centre Endpoint Protection 以及其他的微軟安全產品都使用的是相同的核心引擎。


負責掃描和分析的MsMpEng核心組件名叫mpengine,但mpengine本身也是一個龐大而複雜的攻擊面,這個組件由大量處理器、可執行文件、多種架構的系統模擬器、以及多語言解釋器所組成的,但這些代碼通通都可以被遠程攻擊者訪問到。


構建


我們可以輸入make命令來構建測試客戶端:



$ make


依賴


請注意,後綴.i686和:i386是非常重要的,我們需要32位代碼庫來使用32位dll。


你可以從下面這個頁面下載32位的反惡意軟體更新文件:


https://www.microsoft.com/security/portal/definitions/adl.aspx#manual


下面這個鏈接指向的應該是我們所需要的文件:


http://go.microsoft.com/fwlink/?LinkID=121721&arch=x86


點擊了這個鏈接之後,我們將會下載一個名叫mpam-fe.exe的文件。接下來,我們可以通過命令cabextract將文件提取至engine目錄:



$ cabextract mpam-fe.exe


Extracting cabinet: mpam-fe.exe

extractingMPSigStub.exe


extractingmpavdlta.vdm


extractingmpasdlta.vdm


extractingmpavbase.vdm


extractingmpasbase.vdm

extractingmpengine.dll


All done, no errors.


你可以通過下列命令查看當前的產品版本號:



$ exiftool mpengine.dll | grep "Product Version Number"Product Version Number : 1.1.13701.0


運行


主mpengine載入器名叫mpclient,它可以接受文件名作為掃描參數:


$ ./mpclient netsky.exe


main(): Scanning netsky.exe...


EngineScanCallback(): Scanning input


EngineScanCallback(): Threat Worm:Win32/Netsky.P@mmidentified.


除此之外,類似的工具還有mpstreamfuzz和mpscript。

調試


如果你想要對崩潰進行調試或設置斷點的話,你可以按照下面給出的步驟進行操作。首先,你需要生成一個map文件。


你可以通過下列命令生成map以及idb文件:



> idaw -A -P+ -S"createmap.idc mpengine.map"mpengine.dll


如果你的map文件是在Windows平台上生成的,那麼你將會得到一個CRLF行終止符,你可以通過下列命令修復這個問題:



$ dos2unix mpengine.map


當你在gdb命令下運行mpclient,它將會自動檢測調試器並列印出你所需要輸入的命令:



$ gdb -q ./mpclient


(gdb) r testfile.txt


Starting program: mpclientmain(): GDB: add-symbol-file engine/mpengine.dll0xf6af4008+0x1000main(): GDB: shell bash genmapsym.sh 0xf6af4008+0x1000symbols_19009.o < mpengine.mapmain(): GDB: add-symbol-file symbols_19009.o 0



Program received signal SIGTRAP, Trace/breakpoint trap.


0x0804d213 in main (argc=1, argv=0xffffcc64,envp=0xffffcc6c) at mpclient.c:156


156 __debugbreak();


(gdb)


如果你輸入了gdb所顯示的命令,你將會獲取到下列符號文件:



(gdb) add-symbol-file engine/mpengine.dll 0xf6af4008+0x1000add symbol table from file "engine/mpengine.dll"at


.text_addr =0xf6af5008Reading symbols from engine/mpengine.dll...done.


(gdb) shell bash genmapsym.sh 0xf6af4008+0x1000symbols_19009.o < mpengine.map


(gdb) add-symbol-file symbols_19009.o 0add symbol table from file "symbols_19009.o" at


.text_addr = 0x0Reading symbols from symbols_19009.o...done.


(gdb) p as3_parsemetadata_swf_vars_t


$1 = {void (void)} 0xf6feb842


接下來請輸出下面這行命令以繼續操作:



(gdb) c


如果你想要在gdb中使用硬體斷點的話,你可以使用hb或hbreak命令來代替原本的break命令。



(gdb) b as3_parsemethodinfo_swf_vars_t


Breakpoint 1 at 0xf6feb8da(gdb) c


Continuing.


main(): Scanning test/input.swf...


EngineScanCallback(): Scanning input


Breakpoint 1, 0xf6feb8da in as3_parsemethodinfo_swf_vars_t()


(gdb) bt#0 0xf6feb8da inas3_parsemethodinfo_swf_vars_t ()#1 0xf6dbad7f inSwfScanFunc ()#2 0xf6d73ec3 inUfsScannerWrapper__ScanFile_scanresult_t ()#3 0xf6d6c9e3 inUfsClientRequest__fscan_SCAN_REPLY ()#4 0xf6d6a818 inUfsNode__ScanLoopHelper_wchar_t ()#5 0xf6d6a626 inUfsNode__Analyze_UfsAnalyzeSetup ()#6 0xf6d71f7f inUfsClientRequest__AnalyzeLeaf_wchar_t ()#7 0xf6d71bb9 inUfsClientRequest__AnalyzePath_wchar_t ()#8 0xf6dbbd88 instd___String_alloc_std___String_base_types_char_std__allocator_char______Myptr_void_()#9 0xf6d75e72 inUfsCmdBase__ExecuteCmd__lambda_c80a88e180c1f4524a759d69aa15f87e____lambda_c80a88e180c1f4524a759d69aa15f87e__()Backtrace stopped: previous frame inner to this frame(corrupt stack?)


(gdb) x/3i $pc


=> 0xf6feb8da : lea ebx,[edx+0x1c]


0xf6feb8dd: push esi


0xf6feb8de: mov edx,ebx


Wine和Winelib


需要注意的是,這個項目並不能完全替代Wine或Winelib。Winelib可以將WindowsC++項目移植到Linux平台中,Wine可以允許用戶在Linux平台上運行Windows應用程序。但這個項目可以允許原生的Linux代碼載入簡單的WindowsDLL。


許可證



GPL2


* 參考來源:github, FB小編Alpha_h4ck編譯,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

Oracle人力資源管理系統PeopleSoft未授權遠程代碼執行漏洞解析
從打王者榮耀發散思維到網路安全個人談|FreeBuf專欄
NSA武器庫之Eternalchampion(永恆冠軍)復現
換個角度看看,為什麼釣魚攻擊總能成功?

TAG:FreeBuf |

您可能感興趣

加入Transformer-XL,這個PyTorch包能調用各種NLP預訓練模型
使用redis來調用iptables,封禁惡意IP
SpringCloud之服務提供與調用(Ribbon,Feign)
Asp.Net Core使用SignalR進行服務間調用
如何用Ptrace攔截並模擬Linux系統調用
關於如何使用webpack命令行傳入變數,並通過process.env來調用
通過調用Windows命令,將chm 文件轉換為html 文件
OpenCV調用TensorFlow是什麼意思
C/C++ 使用 TensorFlow 預訓練好模型——間接調用 Python 實現
Python 調用 Micro 宏自動解析 Nmon 文件進行數據歸檔
necp_client_action系統調用中的堆溢出漏洞分析
dubbo+zipkin調用鏈監控
jQuery UI 小部件(Widget)方法調用
c井動態調用WebService
使用 python 調用 echart 畫圖
設計師品牌HOWL首個Pop-up Store落戶上海時髦地標,攜手新零售概念金獎Major大調用審美和創意做服裝
BCP工具的使用以及C++,SQL server資料庫中調用命令行的方法
Linux 庫函數與系統調用
Android端Chrome 67發布:增強AR/VR體驗 新API可調用諸多感測器
python訓練mask rcnn模型&&C++調用訓練好的模型——基於opencv4.0