2017-03-12 7 views
2

何らかの形で、アプリケーションがチェックサムをチェックすることで、アプリケーションの変更をチェックすることが可能かどうかに関心があります。アプリケーション自体のチェックサムをチェックする方法は?

ので、例えば:

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

これはあなたにいくつかのアイデアを与えるかもしれません:http://stackoverflow.com/a/16349686/4323 - おそらくあなたは自己チェックサムの前にチェックサムをゼロで上書きする方法を整理することができます。 –

+3

そのポイントは何ですか?あなたのバイナリを混乱させる人が心配している場合、これは文字通り何もしません。アプリケーションを変更する機能を持つ人は、チェックサムを再計算するだけでもか、このチェックを完全にスキップすることができます。 – Cubic

+0

@キュービックの良い点。おそらく、チェックサムがアプリケーションの外部で計算され、おそらく定期的にチェックサムを計算し、それを初期の予想されるチェックサムと照合する方が良いでしょう。 – akaHuman

答えて

1

最も簡単な回避策は、チェックサムルーチンがチェックサム自体が格納されている位置を認識し、チェックサムを計算するときにバイトをスキップすることです。

位置を計算するのが面倒すぎる場合は、チェックサムの前に魔法の文字列を付けて認識することができます。あなたがそのコピーをエスケープしたくないので、チェックサムプロシージャがマジック文字列を文字通り保存しないようにしてください。

関連する問題