web-dev-qa-db-ja.com

DLLが変更されていないことを確認するにはどうすればよいですか?

VBに古いプロジェクトがあり、MACアドレスとディスクIDから一意のPCコードを作成しました。これはPCを識別するために使用されたため、PC間で資格情報を使用できません。

このプロジェクトはC#に移行し、このロジックをDLLにカプセル化しました。これは、pc_idを返すメソッドを呼び出すだけです。

私が今持っている問題は、同じクラス名とメソッドシグネチャを持つ新しいDLLを作成し、希望するpc_idを返すだけで簡単にできることです。

DLLプログラムが参照しているプログラムが実際に私のものであることをどのように確認できますか?

私のDLLのハッシュをハードコードされたものと比較することを考えましたが、これは異なるOS間で安全ですか?ファイルのハッシュはファイルシステム間で変更されますか?

または、ファイルの整合性/生成元を保証する場合、どの方法が推奨されますか?

19
Vallo

Windowsバイナリの場合、ファイルにデジタル署名することをお勧めします。

証明書を使用する場合、HTTPSとほぼ同じテクノロジー。

コード署名の概要

SignTool

次に、Windows暗号化APIを使用して、ロードされたDLLの署名を検証する必要があります。

これを成し遂げるには多くの作業が必要であることを私は知っています。しかし、Windowsの場合、これは最も安全なパスです。 SHAハッシュが十分でない場合、これは代替手段です。

41

MACアドレスが提供する低いレベルの保護で、私は気にしないでしょう。 DLLを交換するよりもMACアドレスを変更するほうが簡単です。

30
Simon Richter

ハッシュはファイルシステム間で変更されません。ファイルのSHA1ハッシュをコード内の既知の「適切な」値と照合すると、離れているはずです。

16
AlexH

資格情報が他のPCで使用されるのを防ぐことを目的としている場合は、 Windowsデータ保護API を参照してください。これを使用すると、資格情報やその他のデータを暗号化でき、このコンピューターでのみ(または、必要に応じて現在のWindowsユーザーアカウントでのみ)解読できます。

7
alex

MACアドレスは多くの保護を備えているだけでなく、それをディスクIDにキー付けすることは悪いことです。すべての「ディスク」が一貫したディスクIDを返すわけではありません。問題は、いくつかのRAIDコントローラーがディスクIDの要求に応答して、使用可能なドライブから取得することです。

誰かがハードウェアをアップグレードするとどうなるかは言うまでもありません。

0
Loren Pechtel