如何检查应用程序本身的校验和?

How to check checksum of application itself?

我想知道是否可以通过检查其校验和以某种方式检查我的应用程序是否被修改。

因此,例如:

int main()
{
     const std::string checksum = "98123abc1239";
     std::string myChecksum = calculateChecksumOfThisApp();
     if(checksum != myChecksum)
         std::cerr << "This application is invalid. Please check if the download has been successful." << std::endl;
 }

显然,这里的问题是编译我的应用程序、获取可执行文件的校验和并将其插入我的 checksum 更改应用程序的校验和。

我可以将校验和外部存储在某个文件中,但我希望其他人无法操纵 exe 的附带好处。他们可以再次计算校验和并将其放入校验和文件中,这样一无所获。

有没有办法创建这样的自检?

最简单的解决方法是让校验和例程知道校验和本身的存储位置,并在计算校验和时跳过字节。

如果计算位置太麻烦,您可以在校验和前加上一个魔术字符串并识别它。只需确保校验和程序不会按字面意义存储魔术字符串,因为您不想转义该副本。