c++ - 如何保护 MSI 不被修改

标签 c++ c wix windows-installer custom-action

我想保护 MSI 文件不被修改。使用 ORCA 或 MSI API 可以轻松完成。这是可悲的,因为任何人都可以修改/添加/删除具有管理员权限的 Windows 安装程序自定义操作或属性。

有没有办法将 MSI 文件设置为某种只读模式或以某种方式保护其内容?

最佳答案

Short Answer: You can't really protect it, and you shouldn't either, and the below tries to explain why. You can, however, sign the MSI with a digital certificate in order to ensure the file is unchanged in transit to the customer, hence protecting file integrity and facilitating better security.


透明度:MSI 文件是透明的是有原因的 - 企业应用程序打包者希望能够修改包以符合企业标准。 This transparency is in fact a core advantage of MSI .因此,我不会努力保护 MSI。编译的自定义操作仍然是“黑匣子”(不可检查,但可以禁用)。

文档和评论:如果您的 MSI 具有重要的自定义操作,您可以在 MSI 中或在分配的名称中使用“内联”评论来指明这一点到自定义操作。您还可以提供一页 PDF 文件(将其命名为 Large Scale Deployment Guide.pdf?)以及描述如何最好地部署您的应用程序 - 以及最重要的是不要使用 MSI 做什么。我更喜欢将此文档嵌入到 MSI 中,因此它带有 administrative installation - 这是 MSI 的文件提取机制 - 供打包程序查看。公司打包程序通常做的第一件事是使用管理员安装从 MSI 中提取文件。

数字签名:正如其他人提到的 digital signature ( details from Advanced Installer , details from Installshield ) 有助于确保 MSI 在交付给客户时保持不变。这显然在安全方面非常重要。对于 SmartScreen 等新功能,这更是一个问题。 (基于信誉的安全性 - EV code-signing certificate “购买信任” - 有趣的概念?谁闻到了 Racket 的味道?:-))。 确保您的设置没有恶意软件或数字证书证明您传送了恶意软件(直到它也可以被黑客入侵)。并谈到.... Hmmm .

恶意软件检测:记住处理false positives也是必要的.带有文件上传功能的在线工具非常适合对此进行测试。文件大小上传限制适用。只是几个链接:

Process Explorer 等工具来自 SysInternals还可以通过运行您的应用程序然后选择 Options => 来扫描恶意软件进程VirusTotal.com => 检查 VirusTotal.comVideo tutorial here (我没看太多,对讨论的其他产品不熟悉)。 使用此方法使您的应用程序免于误报噩梦(当然也适用于真正的恶意软件感染)

Application Launch: If you have something you need to run for sure, you could potentially add it to your application launch sequence instead of your setup. This definitely works if you don't need admin rights. If you need to write something to HKLM you can open ACL write access there for regular users - not ideal at all, but possible. Application launch code is just easier to deal with. Easier to debug and no impersonation, sequencing and conditioning concerns (when action runs) like you have in a setup.

Legacy Setup.exe :如果你坚持在你的设置中做“ secret 的事情”,那么你可以使用旧工具来制作一个常规的 setup.exe(不是 MSI)。请注意,通过加强安全扫描和恶意软件检测,您的设置可能更容易出现 false positives 问题。用于恶意软件检测。销售软件道路上的一个非常严重的颠簸。对于真正的恶意软件,您告诉客户重建 PC,对于误报,必须采取措施来解决问题。公司接受度还可能取决于 MSI 格式或其他可检查格式(“这是我们的标准”)。您应该知道,公司设置中的捕获工具在将其转换为 MSI(或当今的其他格式,例如 AppV 和 MSIX)时会详细查看设置的内容。

还有一个问题:Cross platform installers .

关于c++ - 如何保护 MSI 不被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56969925/

相关文章:

c++ - 退出时覆盖不明确的函数时代码如何运行?

android - 使用 libzip 在 zip 中写入文件

c++ - 通过将现有 HICON 绘制到 HBITMAP 来创建 HICON

wix - 将命令行参数从 WiX 包传递给 MSI

wix - 安装或主要升级的自定义操作

c++ - 我应该采取什么方法将 ascii 字符转换为 C++ 中的其他字符

c - C预处理器的工作

c - 在c中为全局变量赋值会导致错误

c - 使用#define 来索引数组?

wix installer 3.7 bootstrapper 注册表搜索