【问题标题】:How to Self checksuming work?如何自我校验工作?
【发布时间】:2018-04-25 16:30:35
【问题描述】:

我的问题如何自我校验工作并在文件内存中检测自己的校验和并检查是否可执行修改终止应用程序?像商业exe保护器vmprotect pelock theida等。以及如何使用算法以及如何将校验和嵌入到自己的可执行文件中并检测是否被修改?如何工作?例如检查二进制可执行文件的 md5 或 crc32 自校验和对不起我的英语不好;)谢谢!

【问题讨论】:

  • 这要么太宽泛,要么太不清楚,我真的说不清——所以我投了不清楚的票。
  • 如何检测可执行文件自己的校验和对不起我的英语不好;)

标签: c++ assembly


【解决方案1】:

我认为尝试将校验和或哈希直接放入可执行文件时会出现问题。这种方法意味着在确定可执行文件/二进制文件的校验和/哈希时将考虑校验和/哈希。您无法在不影响二进制/可执行文件的结果哈希/校验和的情况下对校验和/哈希进行编码。

在不了解您的情况的更多详细信息的情况下,您可能希望将二进制文件的哈希存储在您尝试计算校验和/哈希的对象之外(例如,在服务器外部或位于相对位置的文件中)可执行文件等)。您在构建程序后计算此哈希。然后,您的程序在启动时可以将自己定位在磁盘上并计算自身的哈希值并与外部存储的哈希值进行比较。

很抱歉,如果将其作为评论更好,但我没有代表发表评论。

【讨论】:

  • 如果检查函数知道排除存储散列本身的字节,或者在将正确的散列加载到寄存器后将这些字节归零,则可以嵌入散列。是的,您将在构建后计算整个文件的哈希值,但是如果您知道哈希值存储在二进制文件中的哪个位置,则可以在可执行文件中修改这些字节。 (在数据部分,或只读数据。)
  • 不过,防篡改检查必须比这复杂得多,否则攻击者可以很容易地重新计算正确的哈希并将其嵌入。将它放在一个单独的文件中会非常容易(除非它深埋在其他具有自定义二进制格式的大型数据文件中。)
  • @petercordes 使用私钥对其进行签名,并使用相应的公钥对其进行检查(在运行时)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2012-03-27
  • 2014-01-20
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多