gpt4 book ai didi

c# - 如何将信息存储在 .Net 中的可执行文件中

转载 作者:太空狗 更新时间:2023-10-29 17:47:36 25 4
gpt4 key购买 nike

我想将配置文件绑定(bind)到我的可执行文件。我想通过将文件的 MD5 散列存储在可执行文件中来做到这一点。这应该可以防止除可执行文件之外的任何人修改文件。

基本上,如果有人在程序之外修改了这个文件,程序应该无法再次加载它。

编辑:该程序处理信用卡信息,因此能够以任何方式更改配置都可能存在潜在的安全风险。该软件将分发给大量客户。理想情况下,客户端应该有一个直接绑定(bind)到可执行文件的配置。这有望阻止黑客获得虚假配置。

配置仍然需要可编辑,因此不能为每个客户编译单独的副本。


动态的很重要。这样我就可以在配置更改时将哈希绑定(bind)到配置文件。

最佳答案

更好的解决方案是将MD5 存储在配置文件中。但是,MD5 不仅是配置文件的一部分,还在 MD5 中包含一些 secret “ key ”值,如固定的 guid。

write(MD5(SecretKey + ConfigFileText));

然后您只需删除该 MD5 并重新散列文件(包括您的 key )。如果 MD5 相同,则没有人修改它。这可以防止有人修改它并重新应用 MD5,因为他们不知道您的 key 。

请记住,这是一个相当薄弱的解决方案(正如您所建议的那样),因为他们可以轻松地跟踪您的程序以找到 key 或存储 MD5 的位置。

更好的解决方案是使用公钥系统并对配置文件进行签名。同样,这也很薄弱,因为这需要将私钥存储在他们的本地机器上。几乎所有包含在他们本地 PC 上的东西都可以通过足够的努力来绕过。

如果您真的想将信息存储在您的可执行文件中(我不鼓励这样做),那么您可以尝试将其附加到 EXE 的末尾。这通常是安全的。修改可执行程序是类似病毒的行为,大多数操作系统安全性也会尝试阻止您。如果你的程序在 Program Files 目录下,而你的配置文件在 Application Data 目录下,并且用户以非管理员身份登录(在 XP 或 Vista 中),那么你将无法更新 EXE。

更新:我不在乎您使用的是非对称加密、RSA 还是量子加密,无论您是将 key 存储在用户的计算机上(您必须除非你通过网络服务路由它)然后用户可以找到你的 key ,即使这意味着在运行时检查 CPU 上的寄存器!您只是为自己购买了适度的安全级别,所以请坚持使用简单的东西。为了防止修改,我建议的解决方案是最好的。为防止读取然后对其进行加密,如果您将 key 存储在本地,则使用 AES Rijndael。

更新:FixedGUID/SecretKey 也可以在安装时生成并存储在注册表中的某个“ secret ”位置。或者您可以在每次从硬件配置中使用它时生成它。然后你变得越来越复杂。你想如何做到这一点以允许适度的硬件更改将采用 6 个不同的签名,并将你的配置文件散列 6 次 - 每次一次。将每一个与第二个 secret 值结合起来,如上面提到的 GUID(全局或在安装时生成)。然后,当您检查时,您会分别验证每个散列。只要他们有 6 个中的 3 个(或您的容忍度),您就可以接受。下次您编写它时,您会使用新的硬件配置对其进行哈希处理。这允许他们随着时间的推移慢慢更换硬件并获得一个全新的系统。 . .也许这是一个弱点。这一切都归结为你的宽容。存在基于更严格公差的变化。

更新:对于信用卡系统,您可能需要考虑一些真正的安全性。您应该聘请安全和密码学顾问。需要交换更多的信息。他们需要分析您的具体需求和风险。

另外,如果您想要 .NET 的安全性,您首先需要从一个非常好的 .NET 混淆器 (just Google it) 开始。 .NET 程序集是一种易于反汇编和获取源代码并阅读所有 secret 的方法。听起来不像破记录,但任何依赖于用户系统安全性的东西从一开始就存在根本性缺陷。

关于c# - 如何将信息存储在 .Net 中的可执行文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com