- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想将配置文件绑定(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/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!