2011-08-13 4 views
1

私はC++で1つのEXEファイルで構成される小さなアプリケーションを書いています。md5sum和自体を含むファイルですか?

実行可能ファイル自体のmd5sumの "about"ダイアログに入れたいと思います。これは、オンザフライで計算するのではなく、実行可能ファイルに静的に埋め込む必要があります(16進エディタから見ることができます)。

+1

ファイルの内容自体は変更できないものとします(回答に記載された理由により)できません。ファイルの内容を変更することができれば(例えば、ファイル自体が同じである必要がない場合にのみ表示できます)、*非常に難しい*場合でも、そのようなファイルを作成することができます。 "Wang e.t. all"の研究を参照してください。 –

+0

ハッシュを計算するときに、含まれているハッシュをスキップするためのメカニズムが必要です。そして、より良いハッシュ関数md5を使用することを検討する必要があります。 – CodesInChaos

+0

@pst:どの論文を参考にしていますか? –

答えて

0

@Shi & @matthewdanielは既に言いましたが、これは直接行うことはできません。
しかし回避策のカップル可能です:

  • は、アプリケーションのMD5を計算し、単にそれを抽出し、それをMD5
  • あなたのコードをコンパイルし、コードのみをハッシュだチェックするコンテナアプリ内の実行可能ファイルをパッケージ化セグメントまたは他のセグメント(データを除く)を使用し、MD5チェックコードを追加することができます。これは、他のメモリセグメントの事前計算されたハッシュの妥当性を有効に保ちながら、MD5文字列がデータセグメントに格納されるときに機能します。
+0

良い提案、私はそれが不可能であることを知っている:/ –

0

これはできません。

バイナリにmd5ハッシュを入力すると、バイナリが変更されるため、md5ハッシュも変更されます。新しいものを作成してバイナリに追加しようとすると、バイナリは再び変更されます。

ハッシュをファイルに入れ、そのファイルを読み込んでその内容を表示するのが最適です。

もう1つの方法は、バイナリのmd5ハッシュを作成し、それを実行可能ファイルに追加することです。値を取得するには、バイナリの最後の32バイトを読み込み、それをmd5として表示します。もちろん、完全な実行可能ファイルのハッシュを作成すると、ハッシュと一致しません。最後の32バイトを除いた実行ファイルのハッシュを作成する必要があります。

128ビットmd5ハッシュを生フォーマット(ベース16ではなく256のベース)で保存する場合は、16バイトしか必要ありません。

-1

ファイルにmd5を追加すると、ファイルには別のmd5が含まれます。ファイル自体にmd5を入れる方法はありません。

関連する問題