我感兴趣的是,是否有可能通过检查其校验和来检查我的应用程序以防止修改。
所以,例如:
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。他们可以再次计算校验和并将其放入校验和文件中,这样就不会有任何结果。
有没有办法创建这样的自检?
答案 0 :(得分:1)
最简单的解决方法是使校验和例程知道存储校验和本身的位置,并在计算校验和时跳过字节。
如果计算位置太麻烦,你可以在校验和前加上一个魔术字符串并识别出来。只要确保校验和程序不会按字面意思存储魔术字符串,因为您不想逃避该副本。