Squallyでチート学習してみた - バイナリ解析とメモリ改竄の基礎

に公開

Squallyでチート学習してみた - バイナリ解析とメモリ改竄の基礎

はじめに

【教育目的】ゲームで学ぶアセンブリ|『Squally』で始めるゲームセキュリティ入門の記事に触発されて、私もSquallyを使ったチート学習に挑戦してみました。

Squallyで、まずは以下のようななチートを学べました。

  • 敵のスキル(関数)の中身を書き換える手法
  • アセンブラレベルでの関数書き換え
  • バイナリ解析の基礎
  • メモリ書き換えによる所持金・ステータス改竄

学習内容

関数書き換えによる攻略

ゲーム内で敵のスキル(実質的には関数)の中身を書き替えて攻略していきます。
これはアセンブラでやるので、CTFのbinaryの勉強になります...

メモリ書き換えによる改竄

一般的なチート手法として、メモリ上の値を直接書き換えることで以下のような改竄を行いました:

  • 所持金の改竄
  • キャラクターステータスの改竄

実践:うさみみハリケーンでのHex Editing

今回はHex Editingについてうさみみハリケーンで挑戦しました。

問題設定

このステージはHex editingの練習問題として設計されており、以下のような状況でした:

  • クリア条件: 全ての商品を購入する
  • 問題: 所持金が1000しかないのに、すべての商品を買うにはお金が足りない


このようにお金は1000しかないのに、2000の商品があってこのままじゃクリアできません。

攻略手順

1. 初期値での検索

まず、現在の所持金である1000でメモリ検索を実行。だいぶヒットします。

2. 値の変化を利用した絞り込み

XOR(420)を購入することで所持金を580に減らし、この新しい値で再度検索。
これで実際の所持金を格納しているメモリアドレスを特定することができました。


3. メモリ値の改竄

特定できた被疑箇所の値をFFFF(16進数で65535)に書き換え、
ANDを購入したところ、所持金が大幅に増加。
これで残りのNOT商品も購入可能となり、ステージクリア!

今後の学習課題

今回は一般的なチート手法を学ぶことができましたが、
次のステップとして以下の防御手法についても学習したいところ。

防御技術の学習

  • 改竄検知機能: 値が不正に変更されたことを検出する仕組み
  • 暗号化による保護: メモリ上の重要な値を暗号化して保護する手法
  • サーチ阻止技術: メモリ検索を困難にする技術
  • サーバーサイド検証: クライアントサイドの値をサーバーで検証する仕組み(オンラインゲームだけど)

Discussion