2017-09-26 4 views
0

ゲームを作っていて、プレーヤーの健康状態が変数float player_hpに保存されているとします。ゲームをプレイしている間、ユーザーはチートエンジンのようなメモリエディタを開き、メモリを使って巧妙な検索を行い、メモリ内の変数の位置を見つけることができます。彼らはそれを編集して、彼らが望むものになるように編集し、事実上、彼らを不正行為させることができます。悪意のあるメモリを編集することによってメモリ内の変数を変更することはできますか?

ユーザーを悪意のあるユーザーが編集することを効果的に防止する変数を格納するための素晴らしい方法はありますか?私はそれらを記憶の中で動かすべきですか?私はそれらを暗号化するか、それらをハッシュすべきですか?

私は主にC++を使用しています。

答えて

0

データを保護する2つの方法:

1)ユーザーにのみバイナリファイルを提供します。コンパイルされたコード。それらにソースコードを与えないでください。

2)ゲームがオンラインゲームの場合、機密データサーバー側を保管してください。

重要なデータが保護されるようにAPIを設計する際に使用する「カプセル化」というアイデアを研究する必要があります。

+0

しかし、ユーザがバイナリファイルとソースコードだけを持っているゲームでさえ、チートエンジンのようなユーティリティを使用して悪意のあるエンドにプログラムのメモリを編集することは可能です。 –

+0

一般に、人々は自分のマシン上でプログラムを編集することができます。あなたができるベストは、しばしば他の人々のマシンを守ることです。 –

0

免責事項:私は経験のプログラミングゲームはありません、彼らのためだけに詐欺を作ります。

健康のような重要な変数を計算して&のサーバー側で、そのデータをクライアントに複製します。また、ピックアップはサーバーによって検証されなければなりません。弾薬をサーバ側に置いた場合、クライアント側であればPickUp(ammoCrate)を呼び出します。

あなたは誰も止めることはありませんが、90%の人々が不正行為をやめようとするのを止めるには十分迷惑なものにすることが重要だと思います。あらゆるゲームに必要な基本的なものがいくつかありますし、一般的なゲームが詐欺師によって破壊されるのを避けなければならないより高度な保護があります。

時間とともに変化する基本的なXORのようなアルゴリズムを使用して、正常性などの一般的に変更された値を暗号化します。キーのアドレスも変更し、ポインタを使用して、ポインタを6層以上深くします。これは、詐欺師がスクリプトを作成し、パターンスキャンを使用して、ほとんどの人を止めるチートテーブルを使用するように強制します。

IsDebuggerPresent()を使用して、接続されているデバッガを検出し、プロセスを終了します。チートエンジンで "Find What Accesses"を実行してデバッガをアタッチすると、デフォルトオプションを使用するとIsDebuggerPresentによって検出されます。

PEB* GetPEB() 
{ 
#ifdef _WIN64 
return (PEB*)__readgsword(0x60); //64 bit 

#else 
return (PEB*)__readfsdword(0x30); //32bit 
#endif 
} 

は、デバッガフラグを読む

これは夢中にしてパッチを適用することができ、次のステップは、手動でPEBポインタを取得しますProcess Environment Block

にBeingDebuggedフラグをチェックすることです

bool IsDebugFlagSet(PEB* peb) { if (peb->BeingDebugged == 1) return true; else return false; } 

もし彼らがIsDebuggerPresにフックしているなら最初のバイトをチェックし、それが相対的なjmp(x86の例)であるかどうかを調べることができます。

チェックすると、ディスク上のバイトをメモリのバイトと比較して比較することができます。フック:

bool IsHooked(char* functionName, char* dllName) 
{ 
    BYTE* functionAddress = (BYTE*)GetProcAddress(GetModuleHandle(dllName), functionName); 
    return (*functionAddress == 0xE9); 
} 

その他のトリック:

フックのLoadLibrary()& LDRLoadDLL()と不正のDLLをメモリーするためのプロセスを実行している

スキャンをロードするからそれらを停止デバッガは、あなたがあなたのゲームを保護するために、商業anticheatまたはカーネルモードドライバを使用することができますこれらのトリックを越えて

を添付することはできませんので、ブラックリスト

に対してCreateToolHelp32Snapshotを()を使用して、イメージ名またはイメージのパスを比較することにより、編集者は、すべてのデバッグレジスタを埋めます上記のヒントは平均的な人を止めるでしょう。

関連する問題