DQバイナリ改造 @Wiki

ゲーム解析講座

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集
この記事ではDQに限らず一般的なゲーム解析の手法について書いていきます。
(どちらかというと先人達が書いたページのリンクや主流ツールをまとめるのが趣旨ですが)

筆者自身あまり詳しくないので編集どしどしお願いします。

リンク切れを起こしているサイトがあっても消さないで下さい。
Internet Archiveで復元できる可能性があります。



0.ROMの中を覗いてみる

バイナリエディタを使うことで、機械語で書かれたROMの中を見ることができます。
コンピューター内では、人間が使う「10進数」より、「16進数」を使った方が都合がいいのでその表記になっています。

▼10~15はアルファベットを使用し、16に達したら繰り上がる。
10進数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
16進数 1 2 3 4 5 6 7 8 9 A B C D E F 10


▼一番左のADDRESSは場所を示している。その右にはADDRESS1桁目の0~Fの番地に実際に収納された値(1byte)を表す、一番右は値を文字コードに変換したものとなる。

ちなみに、FC・GB・SFC・PS等のゲームは、数字を1byteずつ下位側から収納する「リトルエンディアン」を用いていることが多く、例えば16進数で「12C」なら、バイナリ上では2C 01と収納されます。
(逆はビッグエンディアンで、01 2Cになる)

例題として、次のページを参考にSFC版DQ1・2から、DQ1版スライムベスの特技スロット3を調べてみて下さい。(サイト上部に小さく書いてありますが、ヘッダに+200hされている点に注意が必要です。このページ下部のSMCヘッダ付加・削除ツールで確認。)
+ 答え
E5 → 111 00101 → 逃げる(5)


1.改造コードを作ってみる

ゲームをしているとき、ゲーム機は一時保存領域であるメモリ(RAM領域)の中にゲーム上の様々な情報を書き込みます。
そこで、改造コード(チートコード)を使うとメモリを強制的に書き換えることができ、
例えば強制的にLvを99にする、攻撃力を999にするということが可能になります。

▼これがメモリ領域。どこかにLvや攻撃力等を示すアドレスがある。

エミュには「サーチ」という、特定の値が割り当てられたメモリを検索する機能があります。
例えば、現在HPのアドレスが知りたかったら、まず現在HPの値で検索してみます。

▼現在HP15のときに検索してみる。

アドレスが多すぎてどれか分からないので更に絞り込む必要がありますね。

▼HPを14に減らして再検索

これで、7E0C09が現在HPを示すアドレスということが分かりました。

ハードやツールにより改造コードの表記が異なることがありますが、snes9xはxxxxxxyy(xx=メモリアドレス, yy=入れる値(16進数))と表されます。
この場合、7E0C09FFがHPを最大の255にする改造コードとなります。

特定のアイテム・モンスター・イベント・メッセージ等を呼び出すコードを作れば、没データを呼び出せる可能性もあります。


2.ゲーム内テキストを解析してみる

以下を参照。

3.逆アセンブラしてみる

機械語で書かれたROMデータを、人間に(まだ)理解の可能な「アセンブリ言語」に変換し、
それを読み解くことで実際のゲーム内の処理や、色々なデータがどういう形式で、ROM内のどこに収納されているかといったことなどが解析可能になります。
デバッグモードや一部の没データはこの方法じゃないと発見は難しいのではないでしょうか。

ちなみに、ハードによりアセンブリ言語は異なります。

使用するツールは下部「ハード別おすすめツール」にまとめてあります。
デバッガーが充実しているエミュを使うと、動作中の逆アセコードを見れたり、ブレークポイントで特定のアドレスの読み取りまたは書き込み時に停止させたりさせたり、トレースログで実行中コードのログを記録するといったことが可能になります。

ハード名 言語(CPU) 補足
FC/FDS Ricoh "2A03" 6502をベースに音声機能などを同梱したカスタムCPU。
SFC Ricoh "5A22" 65c816がベース。
GB/GBC Sharp "LR35902" 8080に似ていて、Z80の追加命令がいくつか存在する。詳細詳細2
N64 MIPS "R4300カスタム" R4300を元に微調整を行ったもの。
GBA ARM7 (ARM7TDMI)
Sharp "LR35902"
LR35902は恐らくGBとの互換用。
GC PowerPC "Gekko"
NDS ARM9 (ARM946E-S)
ARM7 (ARM7TDMI)
ARM7は恐らくGBAとの互換用。
Wii PowerPC "BroadWay"
3DS ARM11
ARM9
ARM9は恐らくDSとの互換用。
WiiU PowerPC "Espresso"
Swtich ARM64 "Cortex-A57"
PS1 MIPS "R3000"
PS2 MIPS "R5900"
PSP MIPS "R4000"
PS3 "Cell Broadband Engine" PowerPCベース
PSVita ARM "Cortex-A9"

逆アセンブラや解析に関するリンク集
















Ex.ROMを改造してみる

以下を参照。

データ部分の構造が分析できたら、「BNE2」用の定義ファイルを書くと、表組み上で簡単に編集ができます。

SFC専用ですが、「SFCGENEditor」での定義ファイルを書くと、値だけではなく、逆アセンブルを行ったコードの編集や、固定長データ部分の参照・変更等も可能に

改造を行った後は、「WinIPS」を使うことで、差分ファイル(ips)を作成できます。
ROMファイルそのままの配布はマズいですが、差分ファイルだけなら問題はありません。


ハード別おすすめツール

逆アセンブラツールやデバッガー付きエミュはそれぞれいくつかあるので、おすすめツールやメリット・デメリット等特徴の追記を出来る方はお願いします。

総合


  • IDA Pro
    • 汎用的な逆アセンブルツール。有料。プラグイン導入でゲームROMも対応可能になるが、デフォルトでいくつかの形式がサポートされている。

  • ROM Checker
    • FC、SFC、GB等のROMのヘッダや不良ROMの確認が可能。

FC

  • Mesen
    • デバッガー、ブレークポイント設定、ステップ実行、逆ステップ実行等がついたエミュ。
    • 説明書


SFC


  • Mesen-S
    • デバッガー、ブレークポイント設定、ステップ実行等がついたエミュ。
    • 説明書

  • Geiger's Snes9x Debugger
    • 一番更新されているエミュSnes9xを解析用に特化させたもの。ゲーム実行をしながらの解析が可能。
    • 起動できない場合は、release notes.htmlにあるランタイムのインストールが必要。

  • no$sns
    • デバッガーが付いたエミュ

  • DiztinGUIsh
    • 逆アセンブルツール。エミュを使いコード部分とグラ・音楽等の非コード部分の仕分けをすることが可能。

  • DisPel
    • 逆アセンブルツール。



  • Lunar Address
    • バイナリエディタ上で見れるアドレスとメモリ上のROMのアドレスを変換できる。
    • ROMの種類がわからない時は「Auto-Detect Type」で選択すればOK。

GB

  • Mesen-S
    • デバッガー、ブレークポイント設定、ステップ実行等がついたエミュ。
    • 説明書

  • BGB
    • デバッガ機能が充実しているエミュ。使い方

  • TGB_Dual_Kai
    • TGB_Dualにデバッガ機能を追加したエミュ。


N64


GBA



GC


NDS

  • DeSmuME(beta版)
    • beta版だとdisassemblerやmemory viewerにbreakpoint機能が追加されている。

  • ndsdis2
    • 逆アセンブルツール。

PS2

  • ps2dis
    • 逆アセンブルツール。同じMIPSのCPUが使われていて互換性がそこそこあるのでPS1、N64、PSPでも大体使える。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

記事メニュー
目安箱バナー