loadlibrary
FB招聘站
分类阅读
专栏
公开课
FIT 2019
企业服务
用户服务
搜索
投稿
登录
注册
LoadLibrary:一款能够允许Linux程序从DLL文件中加载或调用函数的工具 Alpha_h4ck2017-05-29共594000人围观 ,发现 3 个不明物体 工具
4.png
介绍
今天给大家推荐的这个代码库将允许原生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。
5.png
你可以从下面这个页面下载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: mpclient
main(): GDB: add-symbol-file engine/mpengine.dll0xf6af4008+0x1000
main(): GDB: shell bash genmapsym.sh 0xf6af4008+0x1000symbols_19009.o < mpengine.map
main(): 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+0x1000
add symbol table from file "engine/mpengine.dll"at
.text_addr =0xf6af5008
Reading symbols from engine/mpengine.dll...done.
(gdb) shell bash genmapsym.sh 0xf6af4008+0x1000symbols_19009.o < mpengine.map
(gdb) add-symbol-file symbols_19009.o 0
add symbol table from file "symbols_19009.o" at
.text_addr = 0x0
Reading 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
0xf6feb8dd
0xf6feb8de
Wine和Winelib
需要注意的是,这个项目并不能完全替代Wine或Winelib。Winelib可以将WindowsC++项目移植到Linux平台中,Wine可以允许用户在Linux平台上运行Windows应用程序。但这个项目可以允许原生的Linux代码加载简单的WindowsDLL。
许可证
GPL2
* 参考来源:github, FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM
Alpha_h4ck
Alpha_h4ck
578 篇文章
等级: 10级
||
上一篇:网卡厂商自动识别工具(附源代码)下一篇:Malwaresearch:在Openmalware.org上查找恶意软件的命令行工具
发表评论已有 3 条评论
gnaggnoyil 2017-05-29回复 1楼
支持异常牛逼了
亮了(1)
bobyang 2017-05-29回复 2楼
楼主太牛
亮了(1)
syh882001 (3级) 2017-05-31回复 3楼
We are sorry, the page you requested cannot be found.
亮了(1)
昵称
请输入昵称
必须您当前尚未登录。登陆?注册邮箱
请输入邮箱地址
必须(保密)表情插图
有人回复时邮件通知我
Alpha_h4ck
Alpha_h4ck
好好学习,天天向上
578
文章数
5
评论数
最近文章
Slither:第一款针对Solidity的静态分析框架
2018.11.18
BYOB:我的天!又一个僵尸网络开源了BYOB僵尸网络开源代码
2018.11.18
BlobRunner:一款功能强大的恶意软件Shellcode调试与分析工具
2018.11.16
浏览更多
相关阅读
伪装成USB充电器的无线键盘嗅探器 – KeySweeper这个300美金的设备能够在30秒内窃取你的Mac密码(含攻击演示视频)内网渗透辅助利器 – xosVerLinux主机本地信息自动采集工具(渗透测试必备)知名安全检测工具AWVS(Acunetix Web Vulnerability Scanner) v9.5更新
特别推荐
关注我们 分享每日精选文章
活动预告
11月
FreeBuf精品公开课·双11学习狂欢节 | 给努力的你打打气
已结束
10月
【16课时-连载中】挖掘CVE不是梦(系列课程2)
已结束
10月
【首节课仅需1元】挖掘CVE不是梦
已结束
9月
【已结束】自炼神兵之自动化批量刷SRC
已结束
FREEBUF免责声明协议条款关于我们加入我们广告及服务寻求报道广告合作联系我们友情链接关注我们
官方微信
新浪微博腾讯微博Twitter赞助商
Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号
css.php 正在加载中...0daybank
文章评论