【发布时间】:2014-11-10 20:07:19
【问题描述】:
我正在使用 C 开发一个简单的应用程序,并且想知道是否有任何方法可以检测到应用程序何时被篡改。根据我的知识,哈希是确保数据完整性的一种方法,但我不知道在编译时如何在代码中硬编码进程的哈希,或者我什至不知道这是一个好方法做。 非常感谢任何帮助/提示。
【问题讨论】:
-
您必须为您的散列定义一个带有一些空间的 var(无论您使用什么散列算法),在编译后计算二进制的散列,并将该散列嵌入保留空间。这也意味着您必须从哈希计算中排除保留空间,因为事后添加哈希也会更改整个文件的哈希。
-
另外,二进制文件的磁盘表示与加载到内存中的内容不同。您只想散列二进制文件的代码块并忽略链接/编译器信息等任何元数据。
-
您需要更具体地了解您的代码在哪里运行以及您要防御什么。
-
感谢您的 cmets。让我更具体一点。我有一个父进程(称为 A)和一个子进程(称为 B)。从 A 的角度来看,我可以通过将 hash(B) 硬编码到 A 中来检测篡改。除此之外,我还想检测 B 本身的篡改。
标签: c compilation tampering