我想保护MSI文件不被修改。使用ORCA或MSI API可以轻松完成。令人遗憾的是,任何人都可以修改/添加/删除具有管理员权限的Windows Installer自定义操作或属性。
是否可以将MSI文件设置为某些只读模式或以某种方式保护其内容?
答案 0 :(得分:4)
简短答案 :您不能真正保护它,也不能保护它,下面尝试解释原因。但是,您可以使用数字证书对MSI进行签名,以确保文件在传输给客户时不会发生变化,从而保护了文件完整性并提高了安全性。
透明度 :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 “购买信任” )这样的新功能,甚至是一个有趣的概念?谁闻到球拍? -))。 请确保您的安装程序没有恶意软件或数字证书,证明您已交付了恶意软件(直到也可以被黑客入侵)。再说说...。Hmmm。
恶意软件检测 :请记住,也有必要处理false positives。带有文件上传功能的在线工具非常适合测试。文件大小上传限制适用。只是几个链接:
诸如Process Explorer中的SysInternals之类的工具还可以通过运行您的应用程序,然后选择 Options
{ {1}} =>
VirusTotal.com
=>
。 Video tutorial here(我对此不太看重,不熟悉所讨论的其他产品)。 Check VirusTotal.com
。
应用程序启动 :如果确实需要运行某些程序,则可以将其添加到应用程序启动序列中 而不是您的设置。如果您不需要管理员,这绝对可行 权利。如果您需要向HKLM写入内容,可以打开ACL写入 可供普通用户访问-完全不理想,但有可能。 应用程序启动代码更易于处理。更容易调试 无需假冒,定序和条件限制(当 操作),就像您在设置中一样。
Legacy Setup.exe:如果您坚持要在设置中进行“秘密工作”,则可以使用旧版工具制作常规的setup.exe(不是MSI)。请注意,通过加强安全扫描和恶意软件检测,您的设置可能更容易出现false positives的恶意软件检测问题。销售软件的道路上发生了非常严重的颠簸。对于真正的恶意软件,您会告诉客户重建PC,如果误报您,您必须采取措施来解决问题。公司的接受度还可能取决于MSI格式或其他可检查的格式(“ 这是我们的标准”)。而且您应该知道,公司设置中的捕获工具会在将设置转换为MSI(或当今其他格式,例如AppV和MSIX)后,详细了解该设置的作用。
还有另外一个问题:Cross platform installers。
答案 1 :(得分:2)
简短的回答是“否”,您不能阻止某人编辑.msi文件。您可以采取多种方法来最大程度地减少某人这样做的可能性,或者增加与任何编辑相关的难度的方法,但是您不能完全避免这种情况。
要更好地回答这个问题,必须细化您所提出的问题。 “保护”听起来像是一个安全问题,因此它至少有助于建立扶手椅威胁模型。例如,您可能想防止以下三件事:
在这三个中,第一个并不是真正的安全边界,因此您无能为力。这是需要管理员权限并且用户拥有权限的安装,或者是每用户安装,允许没有管理权限的用户使用它。在任何一种情况下,.msi对该系统的访问都不会超过对其进行更改的用户。
第二个跨越边界,但是涉及到应该认真检查签名的人,并且可能从源头而不是从用户那里获取安装。第三个是明显的安全问题,不幸的是涉及到您无法可靠地期望自己在验证签名方面勤奋工作的人。
那你能做什么?
你不能做什么?
在本练习结束时,您必须确定这是否适合您自己或可以接受的交易。确保您了解为什么有人想要更改您的.msi文件,并且在专注于.msi文件本身之前,请考虑他们是否可以通过非.msi方式产生相同的效果。如果它特定于.msi且很麻烦,请研究其他安装技术。如果没有什么可以阻止您试图阻止的情况,也许您可以找到减少人们尝试它的动力的方法。