C# 如何创建防篡改安装

C# 如何创建防篡改安装,c#,security,installation,C#,Security,Installation,我不知道它通常是如何工作的,所以请告诉我在哪里挖掘 我需要创建一个防篡改的应用程序安装文件。基本上,如果由于某种原因安装文件已被更改,它会告诉您并阻止任何进一步的安装 它是如何工作的?我想这与md5哈希有关 可以将这些内容嵌入CustomActions安装程序模块吗?这是不可能的。当然,您可以散列安装包的一部分。但是,您需要另一个部分来检查散列,并且可以对其进行修改。这已经被反复尝试,每次都因为这个缺陷而被打破 您可以很容易地检测到意外损坏,但这与防篡改不同。大多数安装系统将为您处理此问题。他们

我不知道它通常是如何工作的,所以请告诉我在哪里挖掘

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

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


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

这是不可能的。当然,您可以散列安装包的一部分。但是,您需要另一个部分来检查散列,并且可以对其进行修改。这已经被反复尝试,每次都因为这个缺陷而被打破


您可以很容易地检测到意外损坏,但这与防篡改不同。

大多数安装系统将为您处理此问题。他们将检查安装程序的哈希,以确保它没有被修改。如果您使用的是一个像样的安装程序系统,则通常不必特意去实现它。

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

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

因此,您需要做些什么来实现您的目标: 1) 了解实际的安装程序应用程序是什么。如果您使用的是VS,则很可能是InstallShield,InstallShield还有其他可用选项。 2) 使用该工具完成构建安装程序包的过程 3) 阅读install builder应用程序中的说明,了解如何对其软件包进行签名

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

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


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

您真正需要的是。它是Windows的一个集成部分,对安装程序的EXE进行数字签名将允许您确保您和用户之间的EXE未被篡改

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


但是,如果签名无效,则不会阻止数字签名的EXE运行。要做到这一点,您的安装程序应该。

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


要计算文件的哈希,请签出。我个人没有用过,但它看起来应该是你一个好的开始。

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

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

如果有人有能力修改你的设置文件,他们可能也有能力绕过你的防篡改。只是安装程序,还是安装后需要保护应用程序?换句话说,您想保证setup.exe没有损坏,还是在运行时pltonickapp.exe没有损坏?安全系统是保护用户免受攻击者攻击的系统。谁是用户,谁是攻击者?在尝试使用加密技术构建解决方案之前,首先构建一个威胁模型,该模型清楚地描述了用户、他们的资源、攻击者、漏洞、威胁等。回答得好。要完全“防篡改”,需要检查您的安装,需要检查正在执行的操作,等等。“防篡改”是不可能的,但“篡改检测”是不可能的。如果我将安装内容分离到一个.cab文件中,并仅检查该文件,该怎么办?它是如何工作的?我的意思是,我是否应该在每次构建包时都对哈希进行快照,然后在代码中的某个地方保留该哈希,并检查哈希是否在每次安装时都发生了更改?如果您有exe和cab,然后有人可以绕过exe中验证cab的代码。@Dave McClelland我不是以英语为母语的人,所以-“防篡改”和“防篡改”听起来很像…:)说真的,伙计们。给我一个建议。给我举个例子。对不起,我编辑了我的评论,以便更准确地描述我的意图。我的一般观点是,你不能让它不可能防止入侵,但正如@Matthew Flaschen提到的,你可以使用哈希函数来知道安装是否正确。我使用的是简单的安装项目。v