オンライン ゲームのレガシー コードを拡張して、ゲームに関連付けられたリソース ファイルが最新バージョンであり、改ざんされていないことを合理的に保証しようとしています。DRM なしで、カーネル モードに入らず、ハードウェアの支援なしでこれを実行したいと考えています。私が最終的に決めたのは、理想的には、ユーザー空間が得られるのと同じくらい安全であるべきです. 彼らがこれらのメカニズムを回避できれば、私は彼らがいたずらをする権利を獲得したと思います.少なくともしばらくの間、私たちはそれらを禁止します. :)
当然行うべきことは、各ファイルの暗号化ハッシュを取得し、ハッシュ出力を事前に計算されたハッシュと比較することです。ただし、現在計算されているハッシュとの比較に使用される、事前に計算されたハッシュをユーザーが簡単に改ざんできないように注意する必要があります。アーキテクチャレベルで私が念頭に置いていた対策は次のとおりです。
- OS 機能を使用して、プロセスの開始時にすべてのリソース ファイルを書き込み用にロックし、後で他のプロセスがファイルを上書きできないようにします。
- 各リソース ファイルの MD5 合計を計算します。
- https サーバーに接続し、クライアントの実行可能ファイルに格納されている特定の署名付き証明書に対する検証を要求します。
- 「正しい」ハッシュを含むファイルを https 経由でダウンロードし、(ディスクではなく) RAM に保存します。
- 計算されたハッシュを https 経由で受信したハッシュと比較します。
- ハッシュが一致しない場合は終了します。
これは、ハッシュをクライアント側に保存するよりも安全です。ハッシュがクライアント側に保存されている限り、通常は誰かがハッシュを変更できるからです。このスキームを使用する場合、攻撃者は、組み込みの公開証明書を変更して、実際に攻撃者の証明書が含まれるように実行可能ファイルを変更する方法を見つけ出す必要があります。これにより、攻撃者の証明書と一致する汚染されたハッシュを含む攻撃者の https Web サーバーに対して検証されます。改ざんされたリソース ファイル。これは確かに実現可能ですが、プログラムがクライアントに保存されている事前計算されたキーを使用している場合よりもはるかに困難ですよね?
実行可能ファイルはネイティブ コードであるため、バイナリを編集して公開キーを置き換えることをさらに困難にするパッカーでラップすることが可能になる場合があります。
さて、2 段落前に、私が考案したスキームを潜在的に攻撃する方法を説明したばかりですが、私が説明した方法以外に、このスキームを攻撃する方法はありますか?
2 番目の質問は、これらのタスクを実行するために Win32 C++ (Visual Studio 2010 コンパイラ) から呼び出すことができる無料の (フリーウェアまたはフリーダムのような) ライブラリとは何ですか? 組み込みの Windows API で実行できますか、それともサード パーティのソリューションが必要ですか?
要約すると、質問は次のとおりです。2. それを実装するためにどの依存関係またはライブラリを使用しますか?
これは単なるゲームであり、国家安全保障や金銭的リスクの問題ではありません (ゲームは 100% フリーウェアであり、ゲーム内経済はありません)。 -力。
私の質問の一方または両方の部分に自由に答えてください。そもそも私が間違った質問をしていると思われる場合は、訂正してください。
ありがとう!