Use xwizard.exe to load dll

发布于 2024-11-14 18:44:53 字数 4355 浏览 6 评论 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技术交流群

发布评论

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

关于作者

梦明

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

一梦浮鱼

文章 0 评论 0

mb_Z9jVigFL

文章 0 评论 0

伴随着你

文章 0 评论 0

耳钉梦

文章 0 评论 0

18618447101

文章 0 评论 0

蜗牛

文章 0 评论 0

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