マネージドPEファイルでdumpbinを使用すると、オプションのヘッダ値にチェックサムが含まれていることがわかります。C#を使ってマネージドPE32ファイルのチェックサムを取得
私はそれを保存できるようにチェックサムを取得して、私たちのビルドマシンで生成されたPEファイルを誰も置き換えないようにしたいと考えています。このチェックサムが暗号的に安全であれば、私たちは間違ってPEファイルを間違った場所に置いたかどうかを判断するためにしか使用していないので、私は心配していません。私はPEファイルからチェックサムを取得する方法についてはわかりません。 C#には、PEファイルのチェックサムを取得するための管理APIがありますか?
diagramが正しい場合は、FileStream
を使用してPEファイルの正しいバイトを調べることができますが、可能であれば.NETフレームワークを使用することをお勧めします。
ここには、コマンドdumpbin /HEADERS MyDLL.dll
のフィールドのイメージがあります。私は検索しようとしているフィールドの周りに黄色の四角形を置きます。
EDIT1: 私は、ヘッダーを読み取るために、安全でないC#プロジェクトを使用することができたとき、私は物事を複雑にされました。 @ xanatosが指摘したように、ヘッダのバイトを読むためにファイルストリームを使うことができます。
EDIT2: これは単なるPE32ファイルであると判断できるため、これがPE32(+)ファイルであるかどうかの質問を削除しました。
バイナリファイル(exeまたはdll)を開くには、 "安全でない"コードは必要ありません。単に 'FileStream'で開く必要があります。 – xanatos
あなたは私が決してそれについて考えたことはないことを知っています。それはちょうどバイトストリームでなければなりません。 –
このWindows APIは、[ImageNtHeader](https://msdn.microsoft.com/en-us/library/windows/desktop/ms680212(v=vs.85).aspx)を使用できます。それは 'IMAGE_NT_HEADERS'へのポインタを返し、' OptionalHeader'の中に 'Checksum'があります。 – xanatos