標準的なハッキング ケース。ハック ファイル タイプは、開始されたプロセスに挿入し、WriteProcessMemory 呼び出しを使用してプロセス メモリを上書きします。ゲームでは、ハッカーがゲームの一部を変更して有利になる可能性があるため、これは望ましくありません。
ユーザーにゲームと一緒にサードパーティ プログラムを強制的に実行させる可能性があり、そのようなインジェクションを防ぐ最善の方法を知る必要があります。私はすでに、すべてのプロセス DLL をリストする関数 EnumProcessModules を使用しようとしましたが、成功しませんでした。ハッキングはプロセス メモリ (スタックの最後?) に直接挿入されるように思われるため、検出されません。現時点では、いくつかのオプションに行き着きました。
ファイル、ファイル パターン、プロセス名、メモリ パターンのブラックリストを作成して、最もよく知られている公開されたハッキングをプログラムでスキャンします。これに関する問題は、ブラックリストを維持し、利用可能なすべてのハックを保持するためにプログラムの更新を作成する必要があることです。また、この有用な回答Detecting memory access to a process を見つけましたが、既存の DLL が既にこれらの呼び出しを使用している可能性があるため、誤検知が発生する可能性があります。
ReadProcessMemory を使用して、よく知られているメモリ オフセットの変化を監視します (ハッキングは通常、同じオフセットを使用して何かを達成します)。いくつかのハックを実行し、動作を監視し、通常の実行と比較してハック動作のサンプルを取得する必要があります。
起動後にプロセスメモリを何らかの方法で再配置することは可能でしょうか? プロセスメモリをスタックにプッシュするだけで、ハックが混乱する可能性があります。これはハック コールの例です。
WriteProcessMemory(phandler,0xsomeoffset,&datatowrite,...);
したがって、ハックがプロセスの実際の開始を検索するためにもう少し賢くなければ、それはすでに大きな成功を収めています. メモリを別の場所に書き換えたり、何らかの方法でスタックの前に null データを挿入したりするシステム コールがあるのではないかと思います。
では、これを行う最善の方法は何でしょうか? それはプログラミングの本当に面白くて暗い領域なので、できるだけ多くの興味深いアイデアを聞きたいです. 目標は、ハッキングが機能しないようにするか、検出することです。
よろしくお願いします