Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何防止MSI被修改_C++_C_Wix_Windows Installer_Custom Action - Fatal编程技术网

C++ 如何防止MSI被修改

C++ 如何防止MSI被修改,c++,c,wix,windows-installer,custom-action,C++,C,Wix,Windows Installer,Custom Action,我想保护MSI文件不被修改。这可以很容易地用ORCA或MSIAPI来完成。令人难过的是,任何人都可以修改/添加/删除具有管理员权限的windows installer自定义操作或属性 有没有办法将MSI文件设置为只读模式或以某种方式保护其内容 简短回答:你不能真正保护它,你也不应该,下面试着解释原因。但是,您可以使用数字证书对MSI进行签名,以确保文件在向客户传输过程中保持不变,从而保护文件完整性并提高安全性 透明度:MSI文件是透明的,这是有原因的-公司应用程序打包程序希望能够修改包以符合公司

我想保护MSI文件不被修改。这可以很容易地用ORCA或MSIAPI来完成。令人难过的是,任何人都可以修改/添加/删除具有管理员权限的windows installer自定义操作或属性

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

简短回答:你不能真正保护它,你也不应该,下面试着解释原因。但是,您可以使用数字证书对MSI进行签名,以确保文件在向客户传输过程中保持不变,从而保护文件完整性并提高安全性

透明度:MSI文件是透明的,这是有原因的-公司应用程序打包程序希望能够修改包以符合公司标准。因此,我不会工作来保护微星。编译的自定义操作仍然是不可检查的黑盒,但可以禁用它们

文档和注释:如果您的MSI具有重要的自定义操作,您可以在MSI中使用内联注释或指定给自定义操作的名称来表示这一点。您还可以提供一个单页PDF文件,称之为大规模部署指南.PDF?在您的设置中,您描述了如何最好地部署您的应用程序,最重要的是,如何不使用MSI。我更喜欢将此文档嵌入到MSI中,这样它就有了一个-这是MSI的文件提取机制-供打包人员查看。公司打包程序通常做的第一件事是使用管理员安装从MSI提取文件

数字签名:正如其他人提到的,有助于确保MSI在交付给客户时保持不变。从安全角度来看,这显然是非常重要的。这是一个更大的问题,有了新的特性,比如基于信誉的安全性——一个值得信任的概念?谁闻到了球拍的气味。确保您的安装程序没有恶意软件,或者数字证书可以证明您交付了恶意软件,直到该恶意软件也可被黑客攻击为止。说到

恶意软件检测:记住,这也是必须处理的。带有文件上传的在线工具非常适合测试这一点。文件大小上传限制适用。只需几个链接:

使用多个恶意软件扫描套件进行扫描 主要反病毒供应商 通过运行应用程序,然后选择Options=>VirusTotal.com=>Check VirusTotal.com,像from这样的工具还可以扫描恶意软件进程。我没有看太多,不熟悉讨论的其他产品。使用此方法可以将应用程序从假阳性噩梦中拯救出来,当然也可以防止真正的恶意软件感染

应用程序启动:如果您确实需要运行某些东西,您可以将其添加到应用程序启动序列中 而不是你的设置。如果你不需要管理员,这绝对有效 权利。如果您需要向HKLM写入内容,可以打开ACL write 对于普通用户来说,访问该网站并不理想,但可能。 应用程序启动代码更容易处理。易于调试 而且,当 操作的运行方式与设置中的相同

:如果您坚持在安装程序中执行秘密操作,则可以使用传统工具使常规setup.exe不是MSI。请注意,通过加强安全扫描和恶意软件检测,您的设置可能更容易出现恶意软件检测的问题。软件销售道路上的一个非常严重的障碍。对于真正的恶意软件,你告诉客户重建电脑,而对于误报,你必须采取措施解决问题。公司验收也可能取决于MSI格式或我们标准的其他可检查格式。您应该知道,企业设置中的捕获工具在将其转换为MSI或其他格式(例如AppV和MSIX)时,会详细查看设置所做的操作

还有一个问题被抛出:

简短回答:你不能真正保护它,你也不应该,下面试着解释原因。但是,您可以使用数字证书对MSI进行签名,以确保文件在向客户传输过程中保持不变,从而保护文件完整性并提高安全性

透明度:MSI文件是透明的,这是有原因的-公司应用程序打包程序希望能够修改包以符合公司标准。因此,我不会工作来保护微星。编译的自定义操作仍然是不可检查的黑盒,但可以禁用它们

文档和注释:如果您的MSI具有重要的自定义操作,您可以在MSI中使用内联注释或指定给自定义操作的名称来表示这一点。您还可以提供一个单页PDF文件,称之为大规模部署指南.PDF?随着您的设置,您描述了如何最好地 eploy您的应用程序-以及最关键的是不使用MSI做什么。我更喜欢将此文档嵌入到MSI中,这样它就有了一个-这是MSI的文件提取机制-供打包人员查看。公司打包程序通常做的第一件事是使用管理员安装从MSI提取文件

数字签名:正如其他人提到的,有助于确保MSI在交付给客户时保持不变。从安全角度来看,这显然是非常重要的。这是一个更大的问题,有了新的特性,比如基于信誉的安全性——一个值得信任的概念?谁闻到了球拍的气味。确保您的安装程序没有恶意软件,或者数字证书可以证明您交付了恶意软件,直到该恶意软件也可被黑客攻击为止。说到

恶意软件检测:记住,这也是必须处理的。带有文件上传的在线工具非常适合测试这一点。文件大小上传限制适用。只需几个链接:

使用多个恶意软件扫描套件进行扫描 主要反病毒供应商 通过运行应用程序,然后选择Options=>VirusTotal.com=>Check VirusTotal.com,像from这样的工具还可以扫描恶意软件进程。我没有看太多,不熟悉讨论的其他产品。使用此方法可以将应用程序从假阳性噩梦中拯救出来,当然也可以防止真正的恶意软件感染

应用程序启动:如果您确实需要运行某些东西,您可以将其添加到应用程序启动序列中 而不是你的设置。如果你不需要管理员,这绝对有效 权利。如果您需要向HKLM写入内容,可以打开ACL write 对于普通用户来说,访问该网站并不理想,但可能。 应用程序启动代码更容易处理。易于调试 而且,当 操作的运行方式与设置中的相同

:如果您坚持在安装程序中执行秘密操作,则可以使用传统工具使常规setup.exe不是MSI。请注意,通过加强安全扫描和恶意软件检测,您的设置可能更容易出现恶意软件检测的问题。软件销售道路上的一个非常严重的障碍。对于真正的恶意软件,你告诉客户重建电脑,而对于误报,你必须采取措施解决问题。公司验收也可能取决于MSI格式或我们标准的其他可检查格式。您应该知道,企业设置中的捕获工具在将其转换为MSI或其他格式(例如AppV和MSIX)时,会详细查看设置所做的操作


还有一个问题:。

简短的回答是不,你不能阻止某人编辑.msi文件。您可以采取各种方法来最大限度地减少有人这样做的可能性,或者采取一些方法来增加与任何编辑相关的困难,但您无法完全阻止这种情况

为了更好地回答这个问题,你必须改进你所问的问题。保护听起来像是一个安全问题,所以至少建立一个纸上谈兵的威胁模型是有帮助的。例如,以下是您可能试图阻止的三件事:

感兴趣的用户更改安装到该用户系统的位 公司用户修改其系统管理员在用户计算机上安装的内容 恶意方更改并提供伪装成其他人错误安装的应用程序的位 在这三种情况中,第一种并不是真正的安全边界,所以你也无能为力。要么是需要管理权限且用户拥有这些权限的安装,要么是允许没有管理权限的用户使用的按用户安装。在这两种情况下,.msi对系统的访问权限都不比修改它的用户多

第二种方法跨越了界限,但涉及到一些应该认真验证签名的人,并且可能从源代码而不是用户处获得安装。第三个问题是一个明显的安全问题,不幸的是,涉及到的人你不能可靠地期望勤勉地验证签名

那你能做什么呢

您可以对.msi文件进行签名。这会留下文件被更改的迹象(如果是的话)。请注意,在不改变文件本身的情况下,将.mst文件转换为.msi所做的工作;但是,这也会影响已签名状态的表示。 在接受UAC提示之前,您可以尝试教育您的潜在用户验证数字签名的重要性。这不会阻止有人试图破坏您的许可,但可能会帮助有人避免安装恶意软件而不是您的实际程序。 您可以将.msi包装在签名的.exe引导程序中。这使得事情更难接近;使用普通工具的尝试不会直接起作用,而是需要alte 打电话给第三方了解如何提取.msi文件。虽然这通常不是很难,但至少是另一个障碍。 您可以尝试将签名验证注入到.msi文件中。正如您所说,如果对.msi文件进行进一步修改,这些代码很容易被破坏,除非您可以将它们与重要且难以复制的其他代码结合使用。当然,这只会使它更难改变;但并非不可能。再次,您必须考虑.MST情况,以及是否希望从这些缓存中支持和安装。 您可以向应用程序本身添加相关签名或其他验证。如果.msi文件被修改了,但没有修改机器上安装的内容,你的应用程序会在意吗?答案取决于你到底想保护什么;例如,它不会帮助防止标记恶意软件。 考虑其他包装或部署选项,无论是从微软喜欢。AppX/M6或第三方。每个人都有自己的优点和缺点,以及他们对我在这里讨论的每件事的敏感程度。 在其他地方运行你的应用程序;例如,将应用程序重写为web应用程序,这样就不需要安装。显然,这只适用于某些类型的应用程序,但该列表仍在不断增长。 你不能做什么

让所有用户都给予足够的关注 防止恶意方创建一个安装程序,该安装程序假装用于您的应用程序,但只有恶意负载 防止计算机所有者在.msi运行之前或之后更改计算机 支持人们在不使用.msi文件的情况下使用.msi文件的所有方式管理安装、转换、重新打包、各种特定于.msi的部署实用程序等都是某些软件类的正常使用模式
在本练习结束时,您必须决定这是您的交易破坏者,还是您可以接受的东西。确保你理解为什么有人想要改变你的.MSI文件,并且在关注.MSI文件本身之前,考虑它们是否可以通过非.MSI方式实现相同的效果。如果它是针对.msi的,并且是一个交易破坏者,那么可以研究其他安装技术。如果没有什么可以阻止您试图阻止的情况,也许您可以找到方法来减少人们尝试这种情况的动机。

简单的回答是不,您不能阻止某人编辑.msi文件。您可以采取各种方法来最大限度地减少有人这样做的可能性,或者采取一些方法来增加与任何编辑相关的困难,但您无法完全阻止这种情况

为了更好地回答这个问题,你必须改进你所问的问题。保护听起来像是一个安全问题,所以至少建立一个纸上谈兵的威胁模型是有帮助的。例如,以下是您可能试图阻止的三件事:

感兴趣的用户更改安装到该用户系统的位 公司用户修改其系统管理员在用户计算机上安装的内容 恶意方更改并提供伪装成其他人错误安装的应用程序的位 在这三种情况中,第一种并不是真正的安全边界,所以你也无能为力。要么是需要管理权限且用户拥有这些权限的安装,要么是允许没有管理权限的用户使用的按用户安装。在这两种情况下,.msi对系统的访问权限都不比修改它的用户多

第二种方法跨越了界限,但涉及到一些应该认真验证签名的人,并且可能从源代码而不是用户处获得安装。第三个问题是一个明显的安全问题,不幸的是,涉及到的人你不能可靠地期望勤勉地验证签名

那你能做什么呢

您可以对.msi文件进行签名。这会留下文件被更改的迹象(如果是的话)。请注意,在不改变文件本身的情况下,将.mst文件转换为.msi所做的工作;但是,这也会影响已签名状态的表示。 在接受UAC提示之前,您可以尝试教育您的潜在用户验证数字签名的重要性。这不会阻止有人试图破坏您的许可,但可能会帮助有人避免安装恶意软件而不是您的实际程序。 您可以将.msi包装在签名的.exe引导程序中。这使得事情更难接近;尝试使用普通工具不会直接起作用,而是需要变更方找出如何提取.msi文件。虽然这通常不是很难,但至少是另一个障碍。 您可以尝试将签名验证注入到.msi文件中。正如您所说,如果对.msi文件进行进一步修改,这些代码很容易被破坏,除非您可以将它们与重要且难以复制的其他代码结合使用。当然,这只会使它更难改变;但不是强加于人 可悲的。再次,您必须考虑.MST情况,以及是否希望从这些缓存中支持和安装。 您可以向应用程序本身添加相关签名或其他验证。如果.msi文件被修改了,但没有修改机器上安装的内容,你的应用程序会在意吗?答案取决于你到底想保护什么;例如,它不会帮助防止标记恶意软件。 考虑其他包装或部署选项,无论是从微软喜欢。AppX/M6或第三方。每个人都有自己的优点和缺点,以及他们对我在这里讨论的每件事的敏感程度。 在其他地方运行你的应用程序;例如,将应用程序重写为web应用程序,这样就不需要安装。显然,这只适用于某些类型的应用程序,但该列表仍在不断增长。 你不能做什么

让所有用户都给予足够的关注 防止恶意方创建一个安装程序,该安装程序假装用于您的应用程序,但只有恶意负载 防止计算机所有者在.msi运行之前或之后更改计算机 支持人们在不使用.msi文件的情况下使用.msi文件的所有方式管理安装、转换、重新打包、各种特定于.msi的部署实用程序等都是某些软件类的正常使用模式
在本练习结束时,您必须决定这是您的交易破坏者,还是您可以接受的东西。确保你理解为什么有人想要改变你的.MSI文件,并且在关注.MSI文件本身之前,考虑它们是否可以通过非.MSI方式实现相同的效果。如果它是针对.msi的,并且是一个交易破坏者,那么可以研究其他安装技术。如果没有什么可以阻止你试图阻止的情况,也许你可以找到方法来减少人们尝试的动机。

这就是为什么有数字签名。是的,但它仍然是可执行的……那么?用户将得到一个难看的黄色警告,而不是蓝色。您无法阻止用户修改和/或执行任何内容。您错了。如果用户没有注意到它,它会很高兴地接受一个修改过的甚至是病毒的项目。我想我忘了问真正的问题是什么。您是否试图阻止人们修改MSI,然后运行它?在公司环境中?这就是数字签名存在的原因。是的,但它仍然是可执行的…那么?用户将得到一个难看的黄色警告,而不是蓝色。您无法阻止用户修改和/或执行任何内容。您错了。如果用户没有注意到它,它会很高兴地接受一个修改过的甚至是病毒的项目。我想我忘了问真正的问题是什么。您是否试图阻止人们修改MSI,然后运行它?在公司环境中?