利用xwizard.exe加载dll

简介: 本文讲的是利用xwizard.exe加载dll,在之前的文章介绍了利用Excel.Application object’s RegisterXLL()加载dll的技巧。本文继续,介绍最近学习到的一种更为通用的方法——利用xwizard.exe加载dll。
本文讲的是 利用xwizard.exe加载dll在之前的 文章 介绍了利用Excel.Application object’s RegisterXLL()加载dll的技巧。本文继续,介绍最近学习到的一种更为通用的方法——利用xwizard.exe加载dll。 

该方法最大的特点是xwizard.exe自带微软签名,在某种程度上说,能够绕过应用程序白名单的拦截。

0x01 简介

本文将要介绍以下内容:

· xwizard.exe简介

· 利用思路

· 实际测试

0x02 xwizard.exe简介

应该为Extensible wizard的缩写,中文翻译可扩展的向导主机进程,暂时无法获得官方资料

· 支持Win7及以上操作系统

· 位于%windir%system32下

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

利用xwizard.exe加载dll

支持参数如下:

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

利用xwizard.exe加载dll

0x03 利用思路

xwizard.exe的同级目录存在一个特别的文件xwizards.dll

使用IDA查看xwizards.dll的导出函数,如下图

利用xwizard.exe加载dll

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

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

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

利用xwizard.exe加载dll

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

1、进程当前目录

2、通过SetDllDirectory所设置的路径

3、Windows系统目录+PATH,即c:windowssystem32

4、16位系统目录,即c:windowssystem

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成功加载后会弹框

3、测试

直接执行xwizard.exe,没有弹出帮助对话框

使用Process Monitor监控系统,检查xwizard.exe是否正常执行

如下图

利用xwizard.exe加载dll

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

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

xwizard processXMLFile 1.txt

查看Process Monitor输出结果

如下图

利用xwizard.exe加载dll

xwizard.exe首先尝试加载C:xxwizards.dll,加载失败后再尝试加载C:windowssystem32xwizards.dll(再次印证了对dll加载顺序的判断)

接下来,将msg.dll重命名为xwizards.dll,保存在C:x

命令行执行:

xwizard processXMLFile 1.txt

成功加载C:xxwizards.dll,弹出对话框

如下图

利用xwizard.exe加载dll

测试成功

0x05 补充

64位系统:

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

测试如下图

利用xwizard.exe加载dll

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

测试如下图

利用xwizard.exe加载dll

0x06 小结

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




原文发布时间为:2017年8月24日
本文作者:3gstudent
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
C#编译时嵌入dll至生成的exe
C#编译时嵌入dll至生成的exe
268 0
|
程序员 编译器 Linux
Unity与 DLL文件 ☀️| 什么是DLL✨?
📣前言 在之前的文章有介绍过so文件,那本篇文章就来介绍一些DLL文件吧! 提起DLL文件,大家肯定不会陌生,就算自己没编写生成过DLL文件,那也一定见过! Windows系统打开电脑C盘的System文件夹,往下一拉就会发现有超级多的带有.dll后缀的文件! 那DLL文件到底是个怎样的存在呢?本篇文章就来好好研究一下这个DLL文件究竟是个啥!
Unity与 DLL文件 ☀️| 什么是DLL✨?
|
C++ Python
如何在MFC中启动其它的(.exe)可执行文件
ShellExecute(NULL,   "open",   "http://www.sina.com.cn",   NULL,   NULL,   SW_SHOWNORMAL);      // ShellExecute(NULL,   "open",   "C:\\Documents and Settings\\Administrator\\桌面\\xq1\\TestChess0.
1493 0
|
C#
C#将DLL嵌入到exe当中
原文:C#将DLL嵌入到exe当中 一、将dll文件加入工程 1.找到dll文件 可以在项目的“引用”下找到dll,并且根据属性中的“路径”找到文件所在目录;也可以使用bin目录下自动生成(其实就是复制)的dll文件  这里需要注意,“引用”下的dll,需要设置“复制本地”为False,这样在bin目录下生成exe的时候就不会顺便复制dll了(感觉这步可要可不要)。
2086 0