介绍
今天推荐给你的这个代码库将允许原生的Linux程序从一个WindowsDLL文件中加载或调用函数。下面是一个简单的演示例子。我把Windows Defender“移植”到了Linux平台。
$ ./mpclient eicar.com
main():扫描eicar.com...
EngineScanCallback():扫描输入
引擎扫描回调():威胁病毒:DOS/EICAR _测试_文件已识别。
工作机制项目源代码的peloader目录包含一个来自ndiswrapper的自定义PE/COFF加载器,可以完成重定位和导入操作,并提供一个API(dlopen)。注意:代码支持使用gdb调试。
该工具的目的是提高Linux系统平台的可扩展性和Windows代码库的模糊化效率。测试的候选可以是视频编解码器、解压缩库、病毒扫描工具或图片解码器等。
-C++异常扫描和处理;
-从IDA加载额外的符号链接;
-使用GDB进行调试、设置断点和堆栈跟踪;
-设置运行时函数钩子;
-扫描内存损坏;
如果需要从外部添加函数,可以自己写存根,实现起来非常简单方便。
工具的用途
事实上,在Windows平台上进行分布式、可扩展的Fuzzing测试是非常困难和低效的,尤其是那些终端安全产品,因为它们使用非常复杂的组件,这些组件将跨内核和用户进行通信和互连空。如果我们想要模糊化这类产品或收集数据,我们需要调用整个虚拟化的Windows环境。
但是在Linux平台上,这一切都不是问题。通过测试后,我发现可以把Windows的杀毒组件移植到Linux平台上。这样,我可以用很少的开销测试代码,我们可以轻松地扩展测试。
当然,这只是我个人的看法,但我也认为Linux平台上有很多强大的工具。
Windows Defender
MsMpEng是一种恶意软件保护服务,默认情况下在Windows8、8、10和Windows Server 2016中启用。此外,微软安全软件包、系统中心端点保护和其他微软安全产品都使用相同的核心引擎。
负责扫描和分析的MsMpEng的核心组件叫做mpengine,但mpengine本身也是一个巨大而复杂的攻击面。这个组件由大量处理器、可执行文件、各种架构的系统模拟器和多语言解释器组成,但这些代码都可以被远程攻击者访问。
建造
我们可以输入make命令来构建测试客户端:
$ make
依赖请注意后缀。i686和:i386非常重要。我们需要一个32位代码库来使用32位dll。
您可以从以下页面下载32位防恶意软件更新文件:
以下链接应该指向我们需要的文件:
点击此链接后,我们将下载一个名为mpam-fe.exe的文件。接下来,我们可以通过命令cabextract将文件提取到引擎目录中:
$ cabextract mpam-fe.exe
提取柜:mpam-fe.exe
extractingMPSigStub.exe
extractingmpavdlta.vdm
extractingmpasdlta.vdm
extracting pav base . VDM
extractingmpasbase.vdm
extractingmpengine.dll
全部完成,没有错误。
您可以使用以下命令检查当前产品版本号:
$ EXIF tool mpengine.dll | grep“产品版本号”产品版本号:1.1.13701.0
运行主引擎加载器被命名为mpclient,它可以接受文件名作为扫描参数:
$ ./mpclient netsky.exe
main():扫描netsky.exe...
EngineScanCallback():扫描输入
EngineScanCallback():威胁蠕虫:Win32/Netsky。P @ mmidentified。
另外,类似的工具还有mpstreamfuzz和mp。
接受初步测试
如果您想调试崩溃或设置断点,您可以遵循下面给出的步骤。首先,您需要生成一个地图文件。
您可以使用以下命令生成地图和idb文件:
>。idaw-A-P+-S " create map . IDC MP engine . map " MP engine . dll
如果您的地图文件是在Windows平台上生成的,您将获得一个CRLF线终止符,您可以使用以下命令修复此问题:
$ dos2 UNIX MP enginee . map
当您在gdb命令下运行mpclient时,它会自动检测调试器并打印出您需要输入的命令:
$ gdb -q ./mpclient
(gdb) r testfile.txt
启动程序:mpclientmain():GDB:add-symbol-file engine/mpenginee . dll0xf6 af 4008+0x 1000 main():GDB:shell bash genmapsym . sh 0xf6 af 4008+0x 1000 symbols _ 19009 . o & lt;GDB:add-symbol-file symbols _ 19009 . o 0
程序接收信号信号陷阱,跟踪/断点陷阱。
mpclient.c:156主寄存器0x 0804d 213(argc = 1,argv = 0xffffcc64,envp = 0xffffcc6c)
156 _ _ debug break();
(gdb)
如果您输入gdb显示的命令,您将获得以下符号文件:
(gdb)add-symbol-file engine/mpengine.dll 0x F6 af 4008+0x 1000从文件“engine/MP engine . dll”添加符号表,网址为
。text _ addr = 0xf6 af 5008从发动机/mpengine.dll读取符号...完成。
(gdb)shell bash genmapsym . sh 0xf6 af 4008+0x 1000 symbols _ 19009 . o & lt;MP enginee . map
(gdb)add-symbol-file symbols_19009.o 0从文件“symbols _ 19009 . o”添加符号表,网址为
。text _ addr = 0x0Reading symbols from symbols _ 19009 . o...完成。
(gdb)p as3 _ parse metadata _ swf _ vars _ t
= {void (void)} 0xf6feb842<。as3 _ parse metadata _ swf _ vars _ t & gt。
接下来,请输出下面一行命令继续:
(gdb) c
如果你想在gdb中使用硬件断点,可以用hb或hbreak代替原来的break命令。
(gdb)b as3 _ parsemethod info _ swf _ vars _ t
断点1位于0xf6feb8da(gdb) c
继续。
main():扫描测试/输入. swf...
EngineScanCallback():扫描输入
as3_parsemethodinfo_swf_vars_t()中的断点1,0xf6feb8da
(gdb)Bt # 0 0 xf6 feb 8 da in as3 _ parsemethod info _ swf _ vars _ t()# 1 0 xf6 dbad 7f inSwfScanFunc()# 2 0 xf6 d 73 EC 3 inufsscanner wrapper _ SCAN file _ SCAN result _ t()# 3 0 xf6 D6 c 9e 3 Inufs client request _ fscan _ SCAN _ REPLY()# 4 0 xf6 D6 a 818 Inufs node _ ScanLoopHelper _ wchar _ t()# 5 0x F6 D6 a 626 Inufs node _ Analyse _ uf)
(gdb) x/3i $pc
= >;0xf6feb8da <。as3 _ parsemethod info _ swf _ vars _ t+7 & gt;:lea ebx,[edx+0x1c]
0xf6feb8dd<。as3 _ parsemethod info _ swf _ vars _ t+10 & gt;:推送esi
0xf6feb8de<。as3 _ parsemethod info _ swf _ vars _ t+11 & gt;:mov edx,ebx
Wine和Winelib需要注意的是,这个项目并不能完全取代Wine或者Winelib。Winelib可以将Windows sc++项目移植到Linux平台,Wine可以允许用户在Linux平台上运行Windows应用。但是这个项目可以允许原生Linux代码加载简单的WindowsDLL。
许可
GPL2
*参考资料来源:github,FB边肖Alpha_h4ck汇编,请注明来自FreeBuf.COM
1.《loadlibrary LoadLibrary:一款能够允许Linux程序从DLL文件中加载或调用函数的工具》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《loadlibrary LoadLibrary:一款能够允许Linux程序从DLL文件中加载或调用函数的工具》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/1482097.html