13

初め、

クライアントから送信された情報は、なりすましの可能性があるため信頼できないことを知っていることを示したいと思います。私は潜在的な詐欺師の 99.9% を抑止するための隠蔽によるセキュリティの方法と、セキュリティを回避するプログラムをリアルタイムで検出する能力に興味があります。

これについて私が持っていたいくつかのアイデアには、保護しているゲームと、クライアント側がサーバーからの要求に応じて (TCP 経由で) スキャンできるようにすることで、潜在的なチートアプリの両方のファイルとメモリのチェックサムを検証し、両方ともメモリインジェクションを検出することが含まれていました。チートおよび/またはチート メモリ フットプリント。したがって、バイパス ハックは、SSL で送信されるすべての TCP 情報をリッスンし、暗号化/復号化機能を逆アセンブルしてメッセージの暗号化を解除し、必要なものを理解する必要があります。同様に、クライアント自体が自己変化し、必要に応じて機能をランダムに追加/削除できるようにすることができます (ただし、サーバーによって保持されます)。これは無意味かもしれませんか?

これは経験豊富な人にとっては中程度に難しいと思うだけなので、バイパスするのが難しいかもしれない他の方法を受け入れます.

私は可能な実装にのみ興味があり、クライアント側のアンチチートを持つことがいかに不可能であるかではなく、それを本当に本当に難しくしたいだけです。

minecraft と java タグを追加しました。これは Minecraft 用です。コミュニティが十分に大きいため、誰かが私のシステムを打ち負かす可能性が高いことはわかっていますが、絶え間ない更新と変更を使用して、創意工夫と忍耐力によって彼らを打ち負かすことができることを願っています。

編集: この投稿を見つけました: (マルチプレイヤー) ゲームでチートを防ぐには? そして、明白なものよりも多くのアイデアを探しているので、重複しないように彼の提案を追加しています(そして、彼がバイパスできないかどうかはわかりません)

1) 他のすべてのプロセスを開き、それらの WriteProcessMemory 関数をフックして、ゲームのプロセスでメモリに書き込めないようにします。この 1 つの手順を正しく行うと、すべてのチートとチート エンジンの 90% がブロックされます。

2) さまざまなマウスとキーボードのエミュレーション機能をフックして、同じことを行います。これにより、多くのエイムボットやその他のタイプの自動化ボットを防ぐことができます.

3) ゲーム自体のプロセスで VirtualProtectEx/VirtualAllocEx/etc 関数にフックし、どのモジュールが保護レベルを変更しているか、新しいメモリ チャンクを割り当てているかを監視します。ゲームが多くの割り当てを行う場合に CPU を集中的に使用しないようにするには、これを巧妙に行う必要がありますが、それは可能です。

4) LoadLibrary 関数にフックし、動的にロードされているすべての DLL を監視して、DLL インジェクションを防ぎます。

5) ゲーム接続で軽量のポリモーフィック エンコーディングを使用します。

6) アンチデバッグ手法を使用して、デバッガーがプロセスにアタッチするのを防ぎます。Google のアンチデバッグと、多くのものを見つけることができるはずです。

7) カスタム独自の PE パッカーを使用して、ゲームの有用な分解を防ぎます。

8) 透明度とアルファ ブレンディングを処理する OpenGL または Direct3D 関数とメソッドにフックします。

9) シェーダーを使用している場合は、シェーダーとシェーダー定数値のチェックサムを計算します。

10) プレイヤー キャラクターに追加のオクルージョン カリング手法を使用して、プレイヤー キャラクターへの視線が他のジオメトリによってブロックされている場合にレンダリングされないようにします。パフォーマンスにも役立つ場合とそうでない場合がありますが、多くのウォールハックを防ぐことができます.

4

3 に答える 3

8

顧客にあなたとゲームを尊重してもらいたい場合は、顧客に敬意を払い、ゲーム クライアント マシンと見なされるものが貴重な情報を保存するために使用される可能性があることを理解する必要があります。

サーバーによってランダムに与えられたメモリの任意の部分をクライアント側でスキャンできるようにする

クライアント自体が自己変更する可能性があり、必要に応じてランダムに機能を追加/削除できます

クライアント マシンへの攻撃経路を開かないように注意してください。「無作為に与えられた記憶の任意の部分」を読むと恐ろしく聞こえます。メモリの (小さくない) ブロックをハッシュし、既知の値をチェックすることで、それを少なくすることができます。

サーバーに「ランダムな」コードを送信させると、ウイルス対策ツールやセキュリティ ツールにとって、ソフトウェアがウイルス/ボットネットのように見える可能性があります。また、潜在的なエクスプロイトに対してクライアントを広く開放したままにします。

アップデート:

1) 他のすべてのプロセスを開き、それらの WriteProcessMemory 関数をフックします。

これを行った場合、挿入されたコードにバグがあると、顧客のマシン全体が不安定になる可能性があります。これは攻撃的なようです。また、実行している Windows のバージョンは何ですか? どの権限で?クラッカーは、フックする権限のないプロセス (通常のユーザー プロセスで実行している管理プロセスなど) からエクスプロイトを実行できると確信しています。GetProcAddressまた、明らかな理由でフックする必要があります。

4) LoadLibrary 関数にフックし、動的にロードされているすべての DLL を監視して、DLL インジェクションを防ぎます。

これは、ローカル プロセスでのみ実行する必要があるため、思ったほど悪くはありません。

6) アンチデバッグ手法を使用して、デバッガーがプロセスにアタッチするのを防ぎます。

確かにやる価値はありますが (時間があれば)、経験豊富なクラッカーにとってはスピード バンプにすぎません。彼はいつでも起動からコードを追跡し、アンチデバッグを監視またはバイパスできることを忘れないでください。(時間はかかりますが、これを楽しむクラッカーもいます。)

7) カスタム独自の PE パッカーを使用して、ゲームの有用な分解を防ぎます。

これは、ウイルス対策ソフトウェアによって注目されるもう 1 つの問題です。

于 2012-12-11T19:14:21.390 に答える
1

個人的には記憶などを観察しても意味がないと思います。誰かがプロトコルを実装し、サーバーをクラッシュさせる可能性のあるがらくたを作成した場合にも、それを処理する必要があると想像できます。

しかし、エゴシューターのウォールハックのように、詐欺師が通常使用する悪いソフトウェアのメモリをチェックすることが可能であることは間違いありません。

私見では、クライアントからのデータが有効に見えるかどうかを確認し、不正行為よりも反応する必要があります。

あなたの更新について:
他のすべてのプログラムをフックしないでください。これは少しおかしなことです。また、あなたのプログラムがルート キットなどとして検出される可能性があります。

于 2012-12-11T19:10:12.577 に答える
0

ここにいる他の人々の言うことに完全に同意します-これらのいくつか(他のすべてのプロセスを開き、WriteProcessMemory、マウス/キーボードエミュレーション関数をフックする)はクレイジーでばかげています-特に、ユーザーが特権をプロセスにドロップすることでこれをバイパスできるためです。これを行うと、間違いなく一部のユーザーから怒りを引き起こします.

しかし、本当に全力でマルウェアのようなクレイジーなことをしたいのであれば、Protected フラグ (Windows Vista 以降用) や OpenProcess にパッチを当てるカーネル ドライバーを作成してみませんか? 後者はより一般的なアプローチです (AV ソフトウェアとマルウェアで見られます)。前者はあまり一般的ではありませんが、それでも実行可能です。KMD をロードできる場合は、フラグにパッチを適用して、Microsoft の署名要件をバイパスできます。

于 2012-12-22T04:43:14.183 に答える