如何创建防篡改安装

时间:2010-07-20 20:37:11

标签: c# security installer

我不知道它通常如何运作,所以请告诉我在哪里挖......

我需要创建一个防篡改应用安装文件。基本上,如果由于某种原因设置文件已被更改,它应该告诉它并防止任何进一步的安装。

它是如何工作的?我想这与md5哈希有关。

是否可以将这些内容嵌入CustomActions安装程序模块?

7 个答案:

答案 0 :(得分:4)

这是不可能的。当然,您可以哈希安装包的一部分。但是你需要有另一个部分来检查哈希,并且可以修改它。这已经反复尝试,并且每次因为这个缺陷而被打破。

您可以轻松检测到无意中的损坏,但这与防篡改不同。

答案 1 :(得分:2)

如果我没记错的话,VS 2010安装程序包会创建一个InstallShield安装包。您想要做的是对该包进行数字签名。

那么你需要做些什么才能实现目标: 1)找出实际的安装程序应用程序是什么。如果你使用VS,它可能是InstallShield,可以使用InstallShield的替代品。 2)使用该工具完成构建安装程序包的过程 3)阅读安装构建器应用程序中的说明,了解如何签署其软件包

您可能需要从Verisign等安全供应商处购买验证。未经验证的签名文件并不比签名文件好。

这是您的安装程序包自我验证的最可靠方式。

下一个最好的选择是对文件进行校验和(通常是MD5),并建议安装软件的人在运行之前检查它们所拥有的文件。

答案 2 :(得分:2)

你基本上要求的是Authenticode。它是Windows的集成部分,对安装程序的EXE进行数字签名可以确保您和用户之间没有被篡改。

您还应注意,当您进行数字签名时,UAC提示会显示您的公司名称和蓝色横幅(而不是“未知”和令人生畏的黄色横幅)。

但是,如果签名无效,则无法阻止数字签名的EXE 运行。为此,您的安装人员应validate its Authenticode signature

答案 3 :(得分:0)

大多数安装系统都会为您处理此问题。他们将检查安装程序的哈希,以确保它没有被修改。如果您正在使用一个不错的安装程序系统,那么通常您不必采用它来实现。

答案 4 :(得分:0)

解决方案的复杂性取决于您是否要检测是否要检测文件是否与您构建的文件不同,或者应用程序是否在第一次运行时创建文件(因此应用程序赢了)事先不知道哈希会是什么。如果第一个是您想要的,那么一个选项是sign安装程序,可执行文件和文件(我认为可以签署除.exe或。之外的文件。 DLL)。或者您可以将.exe中的文件作为资源嵌入其中,并将其哈希。

答案 5 :(得分:0)

如果您只需要验证.exe文件是否已正确分发,请在自己编译后计算文件的md5哈希值,然后让用户在获取文件时比较文件哈希的副本。如果哈希值匹配,则文件应该没有损坏。

要计算文件的哈希值,请查看this tutorial。我没有亲自使用它,但它看起来应该是一个很好的开始。

答案 6 :(得分:0)

是的..我决定在安装项目的PreBuild事件上放置一些可执行文件,并且.exe​​将解析.vdproj文件,获取安装中涉及的每个文件名并计算其哈希并将此信息保存到编码文件中

然后在我的CustomActions库的OnInstall方法中,将解码该文件并比较所有哈希值(此时所有文件都已解压缩到临时文件夹中)。 如果出现问题,将停止设置,并删除所有临时文件。 Voilà和我们有简单的食谱。当然,CustomActions库总是有可能被逆向工程,但我不会把它带给我的老板,我想即使这很重要,我也可以使用混淆器来安抚他。