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

时间:2017-03-12 12:00:55

标签: c++ executable checksum

我感兴趣的是,是否有可能通过检查其校验和来检查我的应用程序以防止修改。

所以,例如:

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。他们可以再次计算校验和并将其放入校验和文件中,这样就不会有任何结果。

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

1 个答案:

答案 0 :(得分:1)

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

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