私はゲーム用の C++ WinAPI DLL をコーディングしています。これには小さなアンチチート機能が含まれていますが、誰かがアンチチート全体を NOP (0x90) することを決定した場合、簡単にバイパスできます (私はリバース エンジニアリングのプロではありませんが、きっとできると思います。)
DLL が変更されないようにする方法はありますか?
人々があなたの DLL を変更するのを止めることができたとしても、誰かがあなたの DLL を、あなたの .exe が決定できるすべての面であなたと同じように動作する独自のバージョンに置き換えることを止めることはできませんが、それはいくつかの特定の面で何か違うことをします - あなたがあなたでない限り.exe にも DLL の完全なコピーを保持します。
.dll の変更を難しくするよりも、チートを難しくすることに時間と労力を費やす方がよいでしょう。たとえば、パックマン ゲームがあるとします (ほとんどの人はそれに慣れているため)。パックマンがパスで食べたすべての「白い錠剤」の数 (および場所?) を送信できます。そこにたどり着くまでにかかった時間。その後、ゲームが .dll を編集して白い錠剤ごとに 10 倍のスコアを与える場合、またはパックマンが 10 倍速く動くようにゲームを編集する場合、それが正しくないことを確認できます。パックマンの移動速度と、パックマンが白い錠剤ごとに獲得できるポイント数。プレイヤーが倒された回数なども、サーバーに送信されるこの情報に含まれる可能性があります。
同様の原則は、「シューティング ゲーム」や物を売買するゲームなどにも適用できます。スコアを得るためにプレイヤーが行ったことの詳細なログがあれば、「これは可能」または「これは達成不可能です。なぜなら、10 機の宇宙船を 1 回で撃墜してもそのスコアは得られないからです」第二に、1 隻の宇宙船を撃墜するには 10 発の命中が必要であり、各ラウンドの発砲には 1 秒かかるからです。」
アンチチート機能をサーバー側に移動した方がよいと思います。または、マルチプレイヤー ゲームでない場合は、チートを止めようとする必要はまったくありません。
ただし、できることの 1 つは、DLL のハッシュを生成し、アプリケーション コードでそれを既知の値またはサービスまたは Web サイトに対してチェックすることです。また、ファイルのハッシュ値を他のタスクに使用することもできます。また、基本的にハッカーにチート対策機能だけでなく、ゲーム コードを大幅に変更するよう強制することもできます。それは人々を思いとどまらせるかもしれません。
しかし、コメントは正しいです。十分な時間とリソースがあれば、何でもハッキングできます。時間の価値がないものにする必要があります。