マジック:ザ・ギャザリング アリーナをハックして勝率100%を達成
(mayer.cool)ゲームハック:マジック:ザ・ギャザリング アリーナで勝率100%を達成
- マジック:ザ・ギャザリング アリーナで、相手を自動的に投了させる方法が発見された
- 問題を報告する意思とともに、ソースコードおよび解決策の提示を提案
序論
- クライアント側コードの難読化に対する見解:難読化は、投資の少ない人々を防ぐための障壁を高くするが、セキュリティ脆弱性を報告する熱意ある開発者にとっては障害となる
- カードゲームはサーバー側でゲーム状態を全面的に管理し、クライアントは必要な情報だけを受け取る
- クライアントは限られた情報しか持たないため、ハッキングは難しい
始める
- ネットワーク通信の分析を通じてゲームハックを開始
- C#で書かれたMTGAは、ランタイムでゲームオブジェクトを操作しやすい
- 非公開フィールドおよびメソッドにアクセス可能なリフレクションを使用
手がかり探し
- C#のデコンパイルはメタデータトークンを使って人間が読める名前と結び付ける
JoinMatch関数を発見し、ゲームサーバーに最初に接続する場所だと推定
Sparkyの実装
- MTGAのマスコットであるSparkyは、新規プレイヤー向けのチュートリアルと練習用ボット
- ボットロジックはローカルで実行され、あらゆる意思決定プロセスがユーザーのコンピュータ内で行われる
実装の悪魔(詳細)
- ボットマッチ開始時、
HeadlessClientクラスを通じて実際のボットロジックを処理 - ボットはゲームボードをレンダリングする必要なくゲームサーバーに接続し、対戦を進行する
試合の乗っ取り
- リフレクションを使ってゲームオブジェクトの挙動を変更できる
- 自分の席を特定し、別の席にクライアントを接続して相手を投了させるコードを作成
GN⁺の見解
この記事で最も重要なのは、ゲームのセキュリティ脆弱性を発見し、それを改善するために共有する開発者の責任ある行動だ。カードゲームのようにサーバーがゲーム状態を全面的に管理するシステムでも、クライアント側の操作によってゲーム結果を改ざんできる脆弱性が存在するという点は非常に興味深い。このような情報は、ゲーム開発者にとってセキュリティを強化し、ゲームをより公正なものにするうえで重要な教訓を与える。
1件のコメント
Hacker News の意見
Linuxに初めて触れた頃、ネットワークトラフィックを調査した経験
Magic: The Gathering向けAIの驚くべき効率性
Magic: The Gathering AI開発の複雑さと効率性
MTGAに関する個人プロジェクトとゲームハッキングへの関心
息子と一緒に楽しむMagic 93/94
クライアント側ゲームロジックの重要性とサーバー検証の必要性
League of Legendsのバグとその影響
ゲーム中のAI接続と対戦相手の降参処理に対する疑問
Diablo 2でのサーバー接続パケット再利用の経験
サーバーエミュレーター開発とLANマッチへの関心