Use xwizard.exe to load dll

发布于 2024-11-14 18:44:53 字数 4355 浏览 14 评论 0

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\下

双击运行,弹出操作说明,如下图

Alt text

支持参数如下:

  • 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 长度固定,否则弹框报错,如下图

Alt text

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 的导出函数,如下图

Alt text

我们可以看到,xwizards.dll 的导出函数名称同 xwizard.exe 支持的参数名称十分接近

猜测 xwizard.exe 的功能是通过调用 xwizards.dll 实现的

使用 IDA 逆向 xwizard.exe 来验证我们的判断,如下图

Alt text

对于函数 LoadLibraryEx,由于未指定 dll 的绝对路径,使用相对路径,所以搜索顺序为:

  1. 进程当前目录
  2. 通过 SetDllDirectory 所设置的路径
  3. Windows 系统目录+PATH,即 c:\windows\system32
  4. 16 位系统目录,即 c:\windows\system
  5. Windows 目录,即 c:\windows
  6. 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 是否正常执行

如下图

Alt text

xwizard.exe 正常执行,但是没有尝试加载 xwizards.dll

再次测试,通过命令行执行,参数如下:

xwizard processXMLFile 1.txt

查看 Process Monitor 输出结果

如下图

Alt text

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,弹出对话框

如下图

Alt text

测试成功

0x05 补充

64 位系统:

%windir%\system32\ 对应 64 位 xwizard.exe,只能加载 64 位 xwizards.dll

测试如下图

Alt text

%windir%\SysWOW64\ 对应 32 位 xwizard.exe,只能加载 32 位 xwizards.dll

测试如下图

Alt text

0x06 小结

本文介绍了利用 xwizard.exe 加载 dll 的技巧,特别的地方在于 xwizard.exe 包含微软签名,因此在某种程度上说,能够绕过应用程序白名单的拦截。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

梦明

暂无简介

文章
评论
25 人气
更多

推荐作者

七七

文章 0 评论 0

囍笑

文章 0 评论 0

盛夏尉蓝

文章 0 评论 0

ゞ花落谁相伴

文章 0 评论 0

Sherlocked

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文