シングルプレイヤーゲームでの不正行為をやめるために何もすべきではないと思います。ユーザーがゲームを購入した場合、他のユーザーと対戦していない限り、必要に応じてチートできるはずです。
これが私がしたことのいくつかです。これらは主にトーナメントゲームのアンチチートシステムのために行われ、そこではお金が危機に瀕しており、ユーザーのシステムへの特定のレベルの侵入は許容できると考えられています。ゲームが安定していないと、システムに問題が発生する可能性があるため、カジュアルゲームでこのようなことを行う場合は注意が必要です。
1)可能な場合は、「クライアントを絶対に信用しない」が最も安全な原則です。サーバー上ですべてのアクションを実行し、クライアントがいつでも画面に表示できるはずのものをレンダリングするために必要な知識だけをクライアントに提供します。つまり、クライアントが壁の後ろに隠れているプレーヤーの位置を知らない場合、ウォールハックはユーザーに何の役にも立ちません。高速アクションゲームの場合、これは非常に難しい場合があります。特に、リアルタイムの影などが標準になっているため、ユーザーの体が見えても影を見る必要がある場合がありますが、常にそうする必要があります。オプションの上部にあります。また、ピアツーピアゲームで行うのは非常に困難ですが、ピア間の知識を制限する方法があります。それが法外なパフォーマンスになったとき、またはあなたの時間/お金の予算の外になったときだけ、
2)他のすべてのプロセスを開き、WriteProcessMemory関数をフックして、ゲームのプロセスのメモリに書き込めないようにします。この1つのステップを正しく実行すると、すべてのチートとチートエンジンの90%がブロックされます。
3)同じことを行い、さまざまなマウスとキーボードのエミュレーション機能をフックします。これにより、多くのエイムボットやその他のタイプの自動化ボットを防ぐことができます。
4)ゲーム独自のプロセスのVirtualProtectEx / VirtualAllocEx / etc関数に接続し、どのモジュールが保護レベルを変更しているか、新しいメモリチャンクを割り当てているかを監視します。ゲームが多くの割り当てを行うときにCPUを集中的に使用しないようにするには、これを巧みに使用する必要がありますが、それは可能です。
5)LoadLibrary関数に接続し、動的にロードされているDLLを監視して、DLLインジェクションを防ぎます。
6)ゲーム接続で軽量のポリモーフィックエンコーディングを使用します。
7)いくつかのアンチデバッグ手法を使用して、デバッガーがプロセスに接続しないようにします。グーグルのアンチデバッグとあなたはたくさんのものを見つけることができるはずです。
8)カスタムの独自のPEパッカーを使用して、ゲームの有用な分解を防ぎます。
9)透明度とアルファブレンディングを処理するOpenGLまたはDirect3Dの関数とメソッドに接続します。
10)シェーダーを使用している場合は、シェーダーとシェーダー定数値をチェックサムします。
11)プレイヤーキャラクターに追加のオクルージョンカリングテクニックを使用して、他のジオメトリによって視線が遮られたときにキャラクターがレンダリングされないようにします。それはあなたのパフォーマンスにも役立つかもしれないし、役に立たないかもしれませんが、それは多くのウォールハックを防ぎます。