メモリ変更チートを防ぐにはどうすればよいですか?


10

今日では、多くのメモリ変更プログラムがあります(Cheat Engine&co)。定数変数を実際に一定に保つ効率的な方法はありますか?

私には2つのアイデアがありました。

  1. 定数変数を定数値、たとえば200分ごとに更新する別のスレッドを作成します。問題:2番目の値を変更することもできます。
  2. 値をサーバーに保存します。問題:ネットワークトラフィックをできるだけ低く抑えたいのですが。

定数と変数の両方が特定の範囲の値のみを含むことができるようにするために、このメカニズムが必要です。

これを行うより良い方法はありますか?


1
どちらも機能しません。状況1では、不正行為者はコピーする値「200」を上書きするだけでよく、元のファイルを上書きするのと同じくらい簡単です。状況2では、不正行為者は、ネットワークで受信したバイト数を変更するだけで(たとえば、ローカルプロキシを使用して)プログラムを変更することなく、値を変更できるようになります
Jimmy

6
ハッカーが無効にできないチートプロテクションはまだ見ていません。正当なユーザーにとっては、不正

1
関連 ; より具体的ですが、それ以外は同じです。
Anko

1
ほとんどのゲームには「トレーナー」があります。つまり、地獄、さらにはMass Effect:Andromedaにはトレーナーがいて、1週間ほどしか出ていない。気にしないで。大手ゲーム会社がこれを避けられないのなら、あなたはあなたにチャンスがあると思いますか?
Krythic

回答:


21

ゲームがシングルプレイヤーの場合:それは不可能ですが、気にしないでください

ゲームがマルチプレイヤーの場合:重要な状態をすべてサーバーに保存する必要があります。これは、ローカルマシンよりもハッキングがはるかに困難です。


4
権限のあるサーバーを作成し、クライアント側の状態のみを予測することで、マルチプレイヤーの不正行為から簡単に保護できます。基本的に、プレイヤーの入力をクライアントからサーバーに送信するだけで、「xダメージを与えましたy」ではありません。
jmegaffin 2013

確かに@BorealGamesは、「サーバーにすべての重要な状態を保存する」という意味です。
jcora

少し明確にしたかっただけです:)
jmegaffin

11

それは行うことができないhttps://security.stackexchange.com/a/4639 DRMについてですが、同じことは、ユーザーがアンチチートメカニズムを含む彼のコンピュータに望んでいないものに適用されます。(これは、DRMよりも実行が困難になる傾向があります。)

しかし、なぜあなたは本当に、なぜあなたはなぜでしょうか?それはあなたの顧客のコンピュータであり、あなたのコンピュータではありません。顧客は彼がそれを使って好きなことを何でも自分のコンピュータで行います。あなたにはそれについての権利がありません。顧客が気に入らない場合、プログラムは削除されます。

マルチプレイヤーゲームの場合は、実行中のバイナリを設計することではなく、コミュニケーションを設計することです。ユーザーに「私は20000ポイントで勝った」と送信させるだけでは機能しません。また、「私は2000ゴールド」も機能しません。ゲームを自分でシミュレートして、プレイヤーに「私が兵士にポイントX / Yに移動するように命じた」または「アイテム番号43を購入した」などの結果を送信するだけでよいので、その結果ではありません。アクションです。サーバーは結果とは何か、最終的に誰が勝ったかを決定します。

それがオンラインのハイスコアのシングルプレイヤーゲームである場合、オプションはプレイヤーにあなたにリプレイを送ってもらい、それをシミュレートして、その結果を決めることです。


11
小さな修正の提案:クライアントは「アイテム番号43を購入しました」ではなく、「アイテム番号43を購入したい」を送信する必要があります。サーバーは、「OK、200 GPを失い、Item43を1つ獲得します」、「いいえ、ゴールドが足りません」、または「いいえ、現在閲覧しているショップにはアイテム番号43がありません」と応答します。サーバーは、ペンとペーパーRPGのゲームマスターのように動作する必要があります。プレイヤーはやりたいことを言い、サーバーは成功したかどうかを伝えます。
フィリップ

また、私は、パソコンの使用メモリに変更するにはわからないけど、(でも、そのコンピュータ上でも)ゲーム自体のバイナリを変更することはEULAに対して通常であり、さらに法令などを著作権を定義することができる
lozzajp

ジェイウォークのデジタル版であるEULAに違反しているわけではありません。
jkmartindale

3

最初の方法は効果的ではなく、特定の人物がゲームを攻撃するのを阻止することはできません。また、エラーが発生しやすくなります。ただし、必要に応じて、完全な証拠ではなく、よりタフなものにすることができます。いくつかの一般的な戦略はウェブ全体で利用できますが、他の人々が述べたように-それは価値があるかどうか自分自身に尋ねなければなりません。

議論のために、シングルプレーヤー環境でのハッキングを防ぐためのいくつかの方法を次に示します。

  1. ユーザーマシン上の他のすべてのプロセスへのハンドルを開き(侵襲的で移植不可)、ダミーの関数または警告でWriteProcessMemory上書きします。選択はあなた次第です。これは、 アプリケーションが同じようにしてハンドルをもう一度上書きするか、またはこれを防ぐために何かをすることが自由であるため、無効にすることができます。
  2. アプリケーションをチェックサムし、ハックシールドを介して自身を検証します。これは、アプリケーションに対する多くの永続的な編集に役立ちますが、一般的なメモリ攻撃を阻止しません。これは...ので、敗北することができ ADA、OllyDbgのようなツールをしても、簡単な六角編集が問題のあるコードを削除するには、アプリケーションに永続的なパッチや変更を行うことができます-これはあなたのネジ付きタイマーのアイデアが含まれています!
  3. 既知のハッキングツールをスキャンします。これは、ツールを再コンパイルするか、クライアントを直接攻撃することでも無効にできます。なぜなら、... 再コンパイル、アプリケーションの名前変更、またはスキャナーがヒューリスティックとして使用するものを変更すると、これが役に立たなくなるためです。これを選択した場合、アプリケーションが使用することがわかっているメモリの特別な部分を使用することを検討してください。

もちろん、代わりにすべてをサーバーに保存し、マスターとなるゲームサーバーを作成することもできます。これは高価であるだけでなく、維持が必要であり、開発時間も長くなります... Diablo IIIのような人気のあるゲームの実装にファンはそれほど感心していません。またはここ。ただし、アドベンチャークエストのようなオンラインフラッシュRPG では、このモデルは実際にはかなりうまく機能しています。

このタイプのアプローチは非常に広範であり、多くの計画を必要とするため、この方法を実装する方法についてはあまり多くのガイダンスを提供できません。知っておくべきことは、サーバーがすべてを決定し、クライアントが単なる入力および表示コンソールにすぎないということです。


3

多くの人がこれらのプログラムを使用して、変数に保存されているスコアを検索します。

int score = 10;

これを行うには、通常、ゲームに表示されるスコアから、スコアを知る必要があります。

私は考えていました、これは彼らを先送りにするのに役立ちますか...

public static float randomVal; // at start of level generate random float

private float 1a3sf5vhh4; //represents score

void hjgkkj4(int val) //add score method
{
   var 5vhh4 =  1a3sf5vhh4/randomVal+val;
   1a3sf5vhh4 =  5vhh4*randomVal;
}

次に、スコアを表示する必要がある場合は...

string displayScore = ""+ 1a3sf5vhh4/randomVal;

これにより、詐欺師はスコア(スコアが表示されている)と考えているものを検索し、表示された値のみを見つけます。

実際のスコアは、Score * randomValとなり、他の場所に保存されます。表示されている値を変更してスコアを変更することはできません。

これは役に立ちますか?

PS私は専門家ではないので、気楽に笑ってください。


このvidを見つけただけで、いくつか興味深い点があります... youtube.com/watch?v=G25YhoE04Xc
Raimi

チートツールは、そのようなことも検出するように構成できます。これは、追跡するのに時間がかかります。
Kromster 2014年

しかし、小規模なオフラインのシングルプレーヤーゲームの場合、このようなもので問題ありませんか?少なくともいくつかのアプリを停止できるように見えます
Raimi、2015年

ええ、それはEffortSpentとProtectionAchievedの場合に過ぎません。
Kromster 2014年

1
ソースコードのランダムな名前も、少なくともほとんどの場合は役に立ちません。プログラムは、通常、IL /バイトコードにまたはストレート・バイナリなどにコンパイルされる
lozzajp

2

シングルプレイヤーゲームに関して不正行為を防ぐことはできませ


自分のゲームでの不正行為を防止できないのはなぜですか?

他の回答が指摘しているように、最善の努力でさえ、1人のハッカーによって潜在的に迂回され、プレーヤーベースの残りの部分に提供される可能性があります。あなたはまだこれに対して努力することができますが、提案方法については他の答えを見てください。この回答は、ゲームがシングルプレーヤーのゲームプレイを提供することのみを目的としている場合に、トラブルを回避することを意味します。

シングルプレーヤーゲームでプレーヤーにカンニングをさせる必要があるのはなぜですか?

サムを引用すると、

優れたゲームの作成により多くの時間を費やし、独り言が彼ら自身の楽しみを台無しにするのを防ぐためにより少ない時間を費やす-簡単です。

これは要点を完全に逃してます。ゲームは娯楽の一形態です。一般に、プレーヤーベースはゲームをプレイして楽しんでいます。プレーヤーがゲームでチートを使用する場合、チートを使用している理由があります。個々のプレイヤーの楽しみの定義を保証することはできないと仮定しても安全です。彼らがチートを使用する場合、おそらくそれが彼らにとってあなたのゲームをより楽しいものにする彼らの方法です。

不正行為はゲームをどのように楽しくしますか?

すべての個人はユニークですが、チートがゲームをより面白くするいくつかの条件があります。

  • ゲームは少し遅く、プレイヤーはチートを使用してアクションを完全に延期する前にアクションを引き出したいと考えています。
  • プレイヤーは特定の課題を乗り越えることができません。彼らは通常ごまかすことはありませんが、フラストレーションの中で、あきらめようとしています。彼らはあなたのゲームのプレイを止めるか、チートを使って障害物を迂回し、ゲームの後半をプレイすることができます。
  • プレイヤーは、ゲームが意図したエクスペリエンスのために必要な時間を費やすことができません。チートを適用することにより、ユーザーは「実行開始」を取得し、ゲームの意図したコンテンツを楽しむことができます。これがもっともらしいと思わない場合は、これが私がフォールアウト4で個人的にプレーしたことがほとんどない理由だと考えてください。複数のプラットフォーム用に購入。私はゲームが大好きです。時間はありません。
  • あなたのゲームにはバグがあり、これによりプレイヤーはそれ以上進むことができなくなります。チートはバグを回避するので、プレーヤーはプレイを続けることができます。最近のElder Scrollsゲームはこの状況で悪名高くなっています

なぜこれはシングルプレイヤーゲームにのみ当てはまるのですか?

これはシングルプレイヤーゲームでのみ機能することを強調することが重要です。プレイヤーがチートを使用してゲームをもっと楽しみたいと言った場合、害はありません。ゲームに複数のプレーヤーがいるとすぐに、その最初のプレーヤーの悪用は他のプレーヤーにとって不当な不利益になる可能性があります。これは、不正行為を許してはならない唯一の実際の状況です。


0

メモリハックツールは何をしますか?

ハックツールを操作するには2つの方法があります。

  1. プレイヤーの変数が保存されている既知のアドレスを受け入れます。
  2. 変数の変更をフィードすると、メモリで変更がスキャンされます。

あなたはそれについて何ができますか?

  1. 動的に割り当てられた変数を使用してプレーヤー変数を保存し、起動時にアドレスが変化し続けるようにすることができます。チートWebサイトがリストできる固定アドレスはありません。

  2. プレーヤー変数の暗号化:値のスケーリング、定数の追加など。これは新しい問題を引き起こします。ハードコアハッカーがプログラムを分解し、プレーヤー変数の暗号化に使用する数値を見つける可能性があります。これには、乱数を使用します。また、プレーヤー変数の値をスケールアップしてから、乱数を追加して、追加した値によって値が大幅に変更されないようにすることもできます(2000のスケールアップした値に10または20を追加しても、大きな違いはありません)。

もちろん、深刻なハッカーの中には、これらのハードルを克服する方法を見つけることができる人もいますが、簡単ではありません。

  std::default_random_engine myRNG;
  std::uniform_int_distribution<int> myDist_padding(10,100);
  class Player
  {
      public:
          Player()
          {
              Health = new float;
              Armor = new float;

              std::uniform_int_distribution<int> myDist_scale(1000,10000);
              scale = myDist_scale(myRNG);
          }
          float GetPlayerHealth() const;
          void SetPlayerHealth(float health);
      private:
          float *Health;
          float *Armor;
          int scale, constant;
  }

  //wrappers for Set/GetPlayerHealth
  void Player::SetPlayerHealth(float health)
  { 
      this->Health = health * scale + constant + myDist_padding(myRNG);     //random padding; adding 10 or 100 to a number that is scaled up by 1000 will cause an increase in 1%
      //1% of error is ok I guess?
  }
  int Player::GetPlayerHealth() const
  {
      return (this->Health - constant)/scale;
  }

上記のコードはいくつかの深刻な問題を解決しますが、それでもなおクラック可能です。ハッカーが必要とする唯一の情報は次のとおりです。プレーヤー変数はポインターを介してアクセスされます(彼はまた、ゲームを分解して見つけることもできますが、煩わしくて難しいでしょう)。ハッカーが他の秘密のランダム変数と一緒にプレーヤー変数へのアドレスを取得すると、彼がチートを開発するのは簡単な作業になります。

私の意見では、分解しないと、このようなシステムのハッキングツールを実際に作成することはできません。変更されるたびにプレーヤーの変数に乱数を追加するため、結果は予測できません。プレーヤー変数が保存される範囲は、すべての起動で同じではありません。

これ以上何ができますか?

時々、プレーヤー変数のアドレスを変更してください。コードの可読性を妨げていますか?まあ、それはある程度はしますが、十分に説明されたコメントを持つ単一のクラスでプロセス全体を抽象化できます。クラスによって提供されるインターフェースには、単純なSet / Get関数があります。フロントエンドのプログラマーは、根本的な複雑さについて心配する必要はありません。


0

経済:

詐欺師に対するゲームを強化したい場合、最善の方法は、それを行うソフトウェアソリューションを購入することです。いくつかのプロバイダーがあり、「アンチチートが私のゲームを壊す」とググるだけでかなりの数を見つけることができます。

プロはあなたよりも実際にチートを防ぐのがはるかに得意で、あなたよりもゲームを壊さない方がはるかに得意です(それでもこれらのいずれかで100%成功することはありません)。したがって、そのようなソリューションをゲームに組み込むことに価値があると感じた場合は、それを購入してください。自分で行うと、はるかに費用がかかります。

関連する質問は、「チート対策ソフトウェアを使用することに価値があるか」というものです。答えは、ゲームの適切な部分がオンラインの競争モードに依存していない限りではありません。


0

ゲームを改造やメモリ編集から保護する唯一の方法は、ゲームをオンラインのみにして、サーバー側で重要な値を処理することです。

多分あなたは値を暗号化して新人のメモリのedoitsがそれらに到達しないようにすることができますが、チートエンジン、Android用のGameGuarian、ArtMoney、ゲームハッカーなどのすべてのコミュニティはあなたがクライアントで処理したものをハッキングできる人を持っています-サイドし、それを行う方法やトレーナーを公開する方法を他の人に示します

それは私の考えでは、不正行為者のクリント側を試みて阻止するための無駄な努力です。それは彼らのデバイスであり、彼らが彼らのデバイスで起こっているものをメモリ編集したいのであれば、なぜあなたはそれらを妨げるのでしょうか?結局のところ、顧客は王様です。


0

そんなに難しいことではありません。メモリ編集の詐欺師(ゲームガーディアンチートエンジンなど)の99%を単純な乗算値でベイに保持できます。メモリ内で10を乗算しても、ほとんどのベイが保持されます。

昔のフラッシュゲームの多くは8倍または6倍になることを覚えています。または、本当に真剣に考えている場合は、いくつかのチェックをコーディングするか、メモリ内の値を暗号化します。


-2

できません-繰り返すことはできません。良いハッカーが元に戻すことができないこの質問に対する答えはありません。

しかし-それで何ですか?誰かがあなたのゲームをごまかしたいと思っているなら(金銭的な損失や実績が関与していないと仮定して)、誰が気にしますか?彼らは自分をだますだけです。

優れたゲームの作成により多くの時間を費やし、独り言が彼ら自身の楽しみを台無しにするのを防ぐためにより少ない時間を費やす-簡単です。


この回答では楽しみが重要な役割を果たすと私が思うので、反対票を投じますが、完全に見逃されています。さらに説明する代わりに、私は別の回答を提出しています。
Gnemlock 2017年

-3

地獄を暗号化しましょう!重要な数値を他の値と組み合わせて複数の場所に分割して保存し、常に変化するようにします!ダミーの番号を使用して、改ざんされた場合、それが詐欺師であることを伝えます。

すべてがクラックされる可能性がありますが、ほとんどの場合、時間がかかることはありません。


4
...そして、あなたのソースコードは、判読できず、維持できない混乱になります。全体を爆破することなく、バグを見つけたり、バランスを変更したりしてがんばってください。
フィリップ

このようなチート防止を実装しなければならなかった場合、ハッカーが私の邪悪な計画に追いついて、あきらめただけでも心からがっかりします。それは、私だけの時間を無駄にしていないことを意味します。
Marcks Thomas

@MarcksThomasまあハッカーがあきらめた場合、あなたはあなたの時間を無駄にしていませんでした。結局、それが目標でしたね。
Dan

その@Philippについてはあなたに完全に同意しません。ソースコードを明確に保ちながら、プロダクションコードがスクランブルされたままにする方法があります。実際には、暗号化といくつかの数値的、特にタイミングとスレッド化を含むmambojambo :-)。変更されていないソースコードを使用してテストし、本番用コードにエラーがある場合は、それを残酷にクラッシュさせます(少し遅れて、邪悪になるだけです:-))。どこかで小さな変化もそれを引き起こします。
Stormwind 2016

私はこれをこのチェーンの最良の回答として賛成しますが、私はすでにそれをしているようです。使用する数学のルールはたくさんありますが、複雑さと何よりもタイミングのためにリバースエンジニアリングすることは不可能です。たとえば、アプリケーションに遅延クラッシュのマークを付けたり、アプリケーションの感度を役に立たない(再生できない)状態にしたりできます。もちろん、あなたはこれの正当な理由でなければなりません。
Stormwind 2017

-4

私がオンラインゲームでそれを扱う方法はこれです。

私はハッカーが私に耐えるのをそんなに手助けするつもりはありません。これを行うために使用するプログラムについては触れません。あなたはそれを理解する必要があります。それらを本当に止める唯一の方法は、一つのことを知ることです。彼らは自分のハッキングプログラムが検出されることを望んでいません。

これまでのところ、私が打ち負かしたすべてのハッカー/トレーナーユーザー。ハックの開発者は、何かを監視しているかどうかを確認するために、その上に検出器を配置します。何かがある場合、ハッカー/トレーナープログラムは、終了時に自動的に終了するか、半分しか機能しません。

たとえばダート3では、トレーナーユーザーは車のスピンアウトを自動的に作成できます。しかし、あなたがあなたの端に検出器を置くならば、チート自身の検出器はそれを検出し、それはチートの一部を閉じます。すべてではありません。

私が干渉の影響を受けたトレーナープログラムの唯一の部分は、スーパーブレーキ(完全なブレーキ)とスピンアウト(理由もなく車がコントロールを失う)です。あなたが見ることができるように、私は主にレースゲームを持っています。それらはすべてコードマスターからのものであり、残念なことに、これらのゲームは不正行為者によってかなり頻繁に乱用されます。

私はプレイ中にお互いをつなぐ方法があるので、私はそれらを止めることしかできないと信じています。これは、セキュリティについて何の手掛かりもない通常のプレーヤーにスピンアウトを引き起こす可能性があるのと同じ理由です。

私の最大の提案は、非常に優れたインターネットセキュリティアンチウイルスを入手することです(Norton、Mcafee、Avast、および他のすべてのくだらないAVはあなたを助けにはしません)。私がリストしていない非常に良いavに$ 50から$ 90を費やして、それを試してオンラインプレイに影響を与える方法を学びます。

それは多くの忍耐とモルモットを必要とします。私はこれで多くの成功を収めてきましたが、トレーナーユーザーの扱いにおいても長年の経験があります。私はコードをまったく知りません。それとは何の関係もありません。コード部分はロックダウンされており、何もすることはできません。あなたはできると思うかもしれませんが、彼らが彼らの終わりにやっていることを実際に止めることは不可能です。

Vacはシグネチャ、特定の動作、およびすでに認識しているファイルの変更を検出するため、VACなどでそれらを禁止することもできます。チートに関連付けられたアカウントのみを禁止します。

彼らは実際にチートを止めません。彼らはそれで気にすることはできません。彼らはあなたのアカウントを禁止するだけです。もう1つ、私が言及したいのはWolfenstein ETに関することです。非常に古いゲーム。しかし、私にとっては、すべての中で最高かつ最も厳しいセキュリティ対策がありました。

彼らがどうやってそれをしたのか私は見たことがなかった。私は実際に不正行為を阻止するものについての考えを彼らに与え、ジェイモッド・デボローパーの一人にガイドとして禁止することを提案しました。ゲームをプレイするときに簡単にアクセスできるガイドは何ですか?グラフィックカード。彼らが実装した理由は、人々がIPアドレスを変更するだけで、ゲームのアカウントが必要なかったため、名前とMACアドレスを変更するだけで、IPアドレスも変更されるためです。

しかし、彼らがグラフィックカードを禁止したとき。もう一度プレイしたい場合は、カードをRMAするか、新しいカードを購入する必要がありました。それは主題から外れています。これは検出に関することになっているので、私は接線に出ました。残念ながら、私は今ほどゲームをしていません。しかし、私はすべてのグネア豚を愛していました。特にプロジェクトカーのもの。コードマスターではなかった唯一のレーシングゲーム。しかし、それでも同じナンセンスによって影響を受けます。


この回答にはいくつかの問題があります。1.フォーマット。構造上、文法の不一致により読みにくい、言いたいことが理解できない箇所があります。2. 他の不正行為者と対戦するプレイヤーとして、あなたは主題について多く話しているように見えます。それはArqadeに関連しますが、私たちはゲーム開発により関心があります。3.アンチウイルスに関して、「私が述べたものを使用しないでください」と言います。あなたは、「ノートン、mcafe、アバスト、言及し、すべてのくだらないのものをこれが私たちに教えてくれていません。使用に何をあなたは最高ランクの一部に名前を付ける場合は特に、。
Gnemlock

後半全体、ビデオゲーム会社があなたのアドバイスをどうとったかについての逸話のようです(あなたはそれがどのように行われたのかわからないというあなたが言う努力に行くので、私はそれがどのように行われたかについてのあなたのさらなる説明が必要であると解釈します事実ではなく、推測に基づいていること)。
Gnemlock 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.