🎮

【教育目的】ゲームで学ぶアセンブリ|『Squally』で始めるゲームセキュリティ入門

に公開

はじめに

チート絶対ダメ

みなさんこんにちは、m(@the_art_of_nerd)です。
チーターからゲームを守るためにはチーターの攻撃手法を知る必要があると私は考えます。
「攻撃手法を学び防御に活かす」これはセキュリティ業界でよく耳にするオフェンシブセキュリティという取り組みや考え方です。

しかし、ゲームセキュリティやアセンブリ言語を学ぶには、専門的な教材や高度な知識が必要とされがちです。
そんな中で、Steamで購入できる『Squally』というゲームを使えば、そうした難しい技術を楽しみながら体系的に学ぶことができます

ここで気をつけなければならないことは、ゲームセキュリティを学ぶ過程で、自分自身が「ミイラ取りがミイラになる」ようなことにならないよう、常に意識しておく必要があります。

今回は、「Squallyがどんなゲームか」「どのように学べるのか」という視点で、実際にプレイしながら学べた内容を紹介していきます。

※Twitterでこの内容を軽く投稿したところ、意外と反響があったので、詳しくまとめてみました。

対象読者

この記事は、ゲームセキュリティやアセンブリ言語に興味がある方、またはゲームセキュリティエンジニアを目指す初学者に向けた内容です。Squallyという合法な学習環境を通して、「ゲームを改変することで仕組みを理解する」を目的としています。

注意点

本記事で紹介する内容は、教育目的のゲーム『Squally』を使った合法的なセキュリティ学習です。Squallyは、ゲームハッキングの仕組みを安全に理解するために設計されています。

本記事では、学習用に許可された環境でのアセンブリ改変やメモリ編集の例を紹介しますが、実際の商用ゲームに対してこのような手法を使うことは不正行為にあたります。

内容を正しく理解し、あくまでセキュリティの学習用途の範囲内で活用してください。

Squally

ゲームタイトルはSquallyです。
Steamにて2025年7月現在、2,800円で販売されています。
https://store.steampowered.com/app/770200/Squally/?l=japanese

ゲームの世界観

どのようなゲームかSteam公式の説明をかいつまんで説明すると、Squallyはビデオゲームハッキングを学ぶ目的で作成された2DパズルRPGです。通常、ゲームハッキング(チート)は低レイヤーの知識といったCSで最も難しい部分の知識が求められますが、本ゲームではそのような部分を簡易的に表現してくれています。

ゲームの世界観としては、奇妙な惑星に不時着したSquallyが、その惑星に住む住人を助けて彼らの敵となる存在と戦う物語です。Squallyはx86/x64アセンブリを使ってゲームの世界を操作できます。
Squally

学べること

ゲームハッキングに必須知識となるアセンブリ言語(x86/x64)がゲームを通じて学べます。
私自身はアセンブリ言語はマルウェア解析やOffsecのOSED(EXP-301)を学ぶ過程で理解を深めました。その経験の上で本ゲームをプレイした感想としては、とっかかりとしては非常にいいと感じました。

例えば、ゲーム上で敵が10回復することが事前にわかっている場合、負の値に書き換えることで逆にダメージを与えることができます。
イメージとして以下のような書き換えがゲーム上で可能です。

・敵のHPが10回復する処理

mov eax, [enemy_hp]   ; 敵のHPをeaxに読み込む
add eax, 10           ; HPを10回復
mov [enemy_hp], eax   ; 新しいHPを保存

add命令で10を追加しているため、逆のsub命令に書き換えることで逆にダメージを与えることができそうですね。

・敵のHPに10ダメージを与える処理に書き換え

mov eax, [enemy_hp]   ; 敵のHPをeaxに読み込む
sub eax, 10           ; 回復の代わりに10のダメージを与える
mov [enemy_hp], eax   ; 新しいHPを保存

実際のゲームではこのような簡単な命令ではありませんが、あくまでゲームで学習を目的としているため簡略化されています。

ストーリモード

では実際にゲームのストーリモードの序盤を一部ご紹介します。
下図は通常の操作画面です。

そして、Tabキーを押すことで「ハッカーモード」に切り替えることができます。

ハッカーモード中に表示されている歯車マークをクリックすることで、命令の書き換えができます。

ケース1:砲台を無効化

今回書き換える対象は砲台です。この砲台は短いスパンで弾を発射しており、Squallyを進めることができません。そのためハッカーモードで命令を書き換えます。

右下のロボットが攻略方法をアドバイスしてくれています。
nop命令に書き換えることでロケットから弾がでなくすることができるみたいですね。

既存の命令を消して、nopを追加しApplyを選択することで保存できます。

これにより特定の時間内は砲台から弾が出て来ず、通過することができました。

ケース2:自動回復の改ざん

次はバトルモード中にハッカーモードを用いて敵を倒します。
今回の敵は体力が一定減少すると自動回復(+255)するため、正攻法では必ず負けてしまいます。

ハッカーモードを起動すると、「Add health」関数を改ざんできそうです。

命令を確認してみるとadd命令を用いてHPを255回復していることが判明しました。

add edi, 255

そのため、sub命令に書き換えてApplyしてみます。 

これにより本来であれば敵がHPを255回復するタイミングで逆に255のダメージを与えることに成功し、無事に倒すことができました。

このようにマップ上のオブジェクトや敵のステータスなどをアセンブリ言語で書き換えることで自分に有利な状態を作り突破していくゲームです。

Hacking Tutorialsモード

こちらは特定のチート手法に挑戦できるモードです。

  • Memory editing
  • Hex editing
  • Pointers
  • Assembly editing

Memory editing

最後に1問だけどのような問題かご紹介します。
本モードでは、ゲーム内のハッカーモードでは改変できない敵のステータスに対処する必要があり、実際のメモリ操作の流れを学ぶコンテンツとなっています。

今回の敵はある一定のダメージを受けると自動回復するため永遠に倒せません。

そして、ハッカーモードで場を有利にすることもできないため、CheatEngineを用いてメモリを改ざんします。
CheatEngineの説明は省きますが、こちらも取り扱いに十分注意が必要です。
なお、Cheat Engineを使用したメモリ改変は、本来は商用ゲームなどでは禁止されている行為です。しかしSquallyでは明示的に学習用途としてその使用が想定されており、合法的な範囲で活用することができます。

本記事の内容はすべて、この許可された環境下で行っています。

まずはSquallyのプロセスをCheatEngineにアタッチした状態で、メモリスキャンを行い敵のHPのメモリアドレスを探っていきます。
HPは100であるため、Valueに100を入れた状態でFirst Scanをクリックします。

その結果、候補が1,343個見つかりました。多すぎるため追加でスキャンを行い絞ります。

まず、HP100の状態の敵にダメージを与えて残りの体力を確認します。

この結果、84であることが確認できたためCheatEngineに戻り、先ほど100としていた値を84に変更しNext Scanをクリックします。

これにより綺麗に1個だけ候補が残りました。
(あくまでゲームなのでこのような試行回数の少なさで完了します)

では、この値を書き換えてみましょう。
下図はHPの値を100から1に変更した結果です。

見事敵のHPを大きく削ることに成功しましたね。
そして攻撃してみると・・・・

+99回復されて再度全回復されてしまいました。
つまり、HPは0に書き換えることでこのモンスターを倒すことができそうですね。
改めてメモリ上に存在するHPを0に書き換えた結果、無事に敵を倒せました。

さいごに

繰り返しにはなりますが、今回の学習で得られる知識は、ゲームセキュリティを理解するうえで重要な概念です。ただし、このような技術を本来許可されていない環境で使うことは不正行為であり、法律や利用規約に違反する可能性があります。

あくまでSquallyのように学習目的で設計された環境でのみ使用すべきであることを強く意識してください。

本記事が、セキュリティやバイナリ、アセンブリに興味を持つきっかけになれば嬉しいです。
Squallyのような合法的な教材を使って、決してチーターにはならず正しくゲームセキュリティを学ばれてください。

Discussion