子进程中的篡改检测

时间:2014-11-10 20:07:19

标签: c compilation tampering

我正在使用C开发一个简单的应用程序,并想知道是否有任何方法可以检测应用程序何时被篡改。根据我的知识,Hash是确保数据完整性的一种方法,但我不知道如何在编译时对代码中的进程的哈希进行硬编码,或者我甚至不知道这是一个很好的方法做。 任何帮助/提示都非常受欢迎。

1 个答案:

答案 0 :(得分:1)

您应该保护您的哈希不受静态修改(当您的应用程序在磁盘上时)。例如,您可以使用某些私钥对其进行签名,该私钥将隐藏在篡改检测代码中的某处。我无法告诉你如何隐藏它,因为它应该是你的秘密。

要拥有自我验证的可执行文件,您可以在源中分配哈希,但指示编译器将其存储在命名的PE / ELF部分中。对二进制文件进行签名时,从哈希计算中排除您的命名部分,并在内部计算存储哈希值。

要将哈希放入Microsoft编译器的命名部分,您可以使用

#pragma section("tdhash", read)
__declspec(allocate("tdhash")) const unsigned char hash[32] = {0};
GCC编译器的

const unsigned char hash[32] __attribute__ ((section ("tdhash"))) = {0};

注意:更改PE后,我想更新标头中的校验和,也不包括哈希计算中的校验和字段。该示例位于“如何防止”检查完整性“加载失败”Microsoft KB文章可通过https://technet.microsoft.com/ru-ru/library/ee829684

进行验证