我正在开发一个WPF应用程序,我将其与ClickOnce一起部署到Intranet上的网络共享,客户端可以从中安装它。
我需要确保用户无法修改其计算机上的任何应用程序文件(尤其是DLL和主可执行文件)。也就是说,如果任何应用程序文件已更改,则应用程序应拒绝运行。我的印象是,当使用ClickOnce时,这是开箱即用的,并且如果文件哈希值与清单不匹配,应用程序将拒绝启动。
但是,我尝试在安装后手动替换可执行文件或DLL略有不同的版本,并且应用程序仍然正常运行(执行修改后的代码)。
如果这很重要,我正在使用2级StartSSL代码签名证书来签署应用程序清单。
P.S。:只是为了确定:我说的是已安装的应用程序文件,而不是安装文件。
答案 0 :(得分:2)
我认为这将是一个相当手动的过程。
看起来VS2013部署工具不会处理代码混淆,但它们确实支持签名和应用权限。从那开始,然后您可能必须将生成的清单作为使用混淆程序集构建自己的清单的起点。
MS docs将其分为3个步骤:1。混淆,2。构建清单,3。手动发布
这是MS文档说的......
Securing ClickOnce Applications
部署混淆程序集 您可能希望使用Dotfuscator对应用程序进行模糊处理,以防止其他人对代码进行逆向工程。但是,程序集模糊处理未集成到Visual Studio IDE或ClickOnce部署过程中。因此,您必须在部署过程之外执行混淆,可能使用后构建步骤。构建项目后,您将在Visual Studio之外手动执行以下步骤:
使用Dotfuscator执行模糊处理。
使用Mage.exe或MageUI.exe生成ClickOnce清单并对其进行签名。有关详细信息,请参阅Mage.exe(Manifest生成和编辑工具)和MageUI.exe(Manifest生成和编辑工具,图形客户端)。
手动将文件发布(复制)到部署源位置(Web服务器,UNC共享或CD-ROM)。
答案 1 :(得分:2)
您可以为每个DLL签署 AND 强名称以防止篡改,但这样做在升级和分发方面一般都有自己的难点。请注意,即使这样做,也不能完全阻止某人将代码注入正在运行的进程中。这是一个棘手的问题。
我建议通过这个问题详细讨论这些问题。 Does code-signing without strong-naming leave your app open to abuse?