Use xwizard.exe to load dll
0x00 前言
在之前的 文章 -method-to-load-dll) 介绍了利用 Excel.Application object's RegisterXLL() 加载 dll 的技巧。本文继续,介绍最近学习到的一种更为通用的方法——利用 xwizard.exe 加载 dll。 该方法最大的特点是 xwizard.exe 自带微软签名,在某种程度上说,能够绕过应用程序白名单的拦截。
参考链接: http://www.hexacorn.com/blog/2017/07/31/the-wizard-of-x-oppa-plugx-style/
0x01 简介
本文将要介绍以下内容:
- xwizard.exe 简介
- 利用思路
- 实际测试
0x02 xwizard.exe 简介
应该为 Extensible wizard 的缩写,中文翻译可扩展的向导主机进程,暂时无法获得官方资料
- 支持 Win7 及以上操作系统
- 位于%windir%\system32\下
双击运行,弹出操作说明,如下图
支持参数如下:
- xwizard processXMLFile
- xwizard RunWizard
- xwizard RunPropertySheet
示例:
- xwizard processXMLFile 1.txt
- xwizard RunWizard /u {11111111-1111-1111-1111-111111111111}
- xwizard RunPropertySheet /u {11111111-1111-1111-1111-111111111111}
注:
参数中的 GUID 长度固定,否则弹框报错,如下图
0x03 利用思路
本节对 Adam@Hexacorn 的思路进行验证,文章地址:http://www.hexacorn.com/blog/2017/07/31/the-wizard-of-x-oppa-plugx-style/
xwizard.exe 的同级目录存在一个特别的文件 xwizards.dll
使用 IDA 查看 xwizards.dll 的导出函数,如下图
我们可以看到,xwizards.dll 的导出函数名称同 xwizard.exe 支持的参数名称十分接近
猜测 xwizard.exe 的功能是通过调用 xwizards.dll 实现的
使用 IDA 逆向 xwizard.exe 来验证我们的判断,如下图
对于函数 LoadLibraryEx,由于未指定 dll 的绝对路径,使用相对路径,所以搜索顺序为:
- 进程当前目录
- 通过 SetDllDirectory 所设置的路径
- Windows 系统目录+PATH,即 c:\windows\system32
- 16 位系统目录,即 c:\windows\system
- Windows 目录,即 c:\windows
- PATH 环境变量中所列目录
也就是说,如果将 xwizard.exe 复制到另一任意目录,在该同级目录再保存一个自己编写的 xwizards.dll,那么执行 xwizard.exe 时会优先调用同级目录的 xwizards.dll,不再加载%windir%\system32\下的 xwizards.dll
这就实现了利用 xwizard.exe 加载我们自己编写的 dll
0x04 实际测试
测试系统: Win7 x86
1、复制 xwizard.exe 至新目录 C:\x
2、编写 dll
使用 vc 6.0,新建 dll 工程,在 case DLL_PROCESS_ATTACH
下添加弹框代码
编译好的 dll 下载地址如下:https://github.com/3gstudent/test/blob/master/msg.dll
该 dll 成功加载后会弹框
3、测试
直接执行 xwizard.exe,没有弹出帮助对话框
使用 Process Monitor 监控系统,检查 xwizard.exe 是否正常执行
如下图
xwizard.exe 正常执行,但是没有尝试加载 xwizards.dll
再次测试,通过命令行执行,参数如下:
xwizard processXMLFile 1.txt
查看 Process Monitor 输出结果
如下图
xwizard.exe 首先尝试加载 C:\x\xwizards.dll
,加载失败后再尝试加载 C:\windows\system32\xwizards.dll
(再次印证了对 dll 加载顺序的判断)
接下来,将 msg.dll 重命名为 xwizards.dll,保存在 C:\x
命令行执行:xwizard processXMLFile 1.txt
成功加载 C:\x\xwizards.dll,弹出对话框
如下图
测试成功
0x05 补充
64 位系统:
%windir%\system32\
对应 64 位 xwizard.exe,只能加载 64 位 xwizards.dll
测试如下图
%windir%\SysWOW64\
对应 32 位 xwizard.exe,只能加载 32 位 xwizards.dll
测试如下图
0x06 小结
本文介绍了利用 xwizard.exe 加载 dll 的技巧,特别的地方在于 xwizard.exe 包含微软签名,因此在某种程度上说,能够绕过应用程序白名单的拦截。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论