エミュレーター紹介

エミュレーターでこんな事ができちゃいます!

エミュレータとは?
エミュレータで出来ること!
エミュレータサーチの、その前に?
エミュレータサーチやってみた!
サーチしたコードを試してみる。

エミュレーターとは?

エミュレータ (Emulator)とは・・・
コンピュータや機械の模倣装置あるいは模倣ソフトウェアのことです。

模倣装置(ソフト)と言うとかなり聞こえが悪いので、シュミレーターと言うニュアンスで付き合いましょう。

今回、このBCSCで取り扱うのは、主にNintendoのDSのソフトです。
この場合、PC上に仮想DSを作り、その上でDSのゲームを稼動させる。
その稼動しているゲームを使い、コードサーチをしたり、チートコードの検証をしたりするわけです。
この、PC上に仮想DSを作り上げるのが、エミュレーターと言われるソフトなんですな。

一般的には、ideasというエミュレーターが知られていますが、
稼動の安定性や軽快性を考えると、現在はNO$GBAというエミュレータの方が良いように私は思います。
その他にも、DeSmuME等もありますが、まだまだマトモにゲームが稼動するレベルではありません。
日本語化されていない・・・という使いにくい部分もありますが、NO$GBAを使っていきたいと思います。




エミュレーターを使うと、TrainerToolkit等の専用のツール(ハード)を用意しなくても良いという利点がありますが、
ゲームROMをDSソフトから吸い出してPCのHD上におかなくてはならない。
また、場合によっては、ゲーム状況を再現させるためにも、savデータを吸い出して、
これまたPCのHD上に置かなくてはなりませんから、
ROMやsavの吸出しの為のツールが別途必要になります。

 ※ROMの吸い出し方等は、RYOさんのホームページに詳しく記載されています。

私の場合、ROM吸出し機としてNEO3−TF、 NEO3−TFを起動させる為のパスカードの代わりとしてR4、
savデータ吸出しには、NDS−AdaptorとDatel DataMAXがあります。
その他、NDSの実機でコードを使用する為、プロアクションリプレイも持っています。



エミュレーターで出来ること!

吸い出したゲームROMを使って、ゲームが楽しめます!
 ただし、PCのパワーやソフトにより
 バリバリと音が割れたり、画面がカクカウしたり、処理落ちが発生したりすることもあるので、
 ゲームで「遊ぶ」のならば、DS本体を使いましょう。

emuhasteや、hastedsといったコードサーチツールと連動して、
コードサーチや、直接のメモリ書き換えによる改造などが出来ます。
また、作成したチートコードを試すこと等も出来ます。



また、PC上で稼動している訳ですから、ゲーム画面をエミュレーターから直接スクリーンショットが取れます。
これは、けっこう重宝していますw
↓こんなん撮ってみましたw

  
エミュレーター上のスクリーンショットだから、処理落ちでカートの影がきえちゃってますねw


エミュレーターサーチの、 その前に?
さて、エミュサーチの行い方の紹介です。
しかし、実際にエミュとコードサーチツールを使う前に、知っておかなければならない事があります。

私は殆ど独学で色々やってみたものですから、必ずしも正しい知識やベストな方法等を
紹介できるわけではないかもしれません。
ただ、こんなかんじー!と言うのを掴んでもらえれば、それでよいかな?と・・・

私のPC環境のせいかもしれませんが、
色々あるエミュレーターとサーチツールですが、
私が用意したツール類は、
エミュレータはNO$GBA_version2.6 、iDeaS_version1.0.2.2
サーチツールはhasteds_version1.3 、EmuHaste_version1.21
の四つです。
NO$GBAは、最近ゲーラボやARといった雑誌にも紹介されており、
エミュとしてはなかなかパワフルで気に入っています。
ただ・・・デバッガ機能が搭載されているという特徴があるので、
サーチにおいて便利なのは、iDeaSかもしれません。

実は・・・2007年度の暮れに、BCSCを企画したころは
TOOLKITでのサーチを考えていたのですが、
メンバーを募る上で、エミュレータサーチ必要だな・・・
と感じて調べ始めましたから、hastedsとEmuHasteの明確な違いや使い分け方等
良くわかっておりませんでした。
それどころか、TOOLKITに比べ、なかなか直感的にサーチ出来ませんでしたので、
「使い方わからーん!」な時期も結構ありましたw(恥
・・・と言うのも、色々組み合わせを試すと、サーチ出来る組み合わせと、
サーチ出来ない組み合わせがあったからです。

原因は、NO$GBAでエミュレーション起動したROMを、サーチツールによって、ベースアドレスが違うという
妙な症状が出ていたからです。


(私のPCでは、iDeasならば、このような事はおこりませんでしたが、iDeasにhastedsはハングアップして使えませんでした。)

やっかいだったのは、hasted_1.30では数値サーチが出来るのですが、サーチしたコードを
エミュのチートファイルにコードを登録しても、サーチツール上でメモリ書き換えをしたのと同じ効果が得られなかったのです。
・・・というか、なんか近いパラメータがデタラメになります。

また、hasteds_1.31や、EmuHaste_1.21に至っては、サーチさえマトモに出来ません。
どうサーチしても必ずヒット0になり、お手上げです。
まれにサーチにかかっても、サーチしたアドレスに、目的の数値が入ってないし・・・

で・・・色々調べた結果、configを書き換えてEmuHaste_1.21が快適に使えるようになった!というブログを見つけ、
いろいろ試してみた結果、
NO$GBAのconfigをBASEADDR_TRY=2をBASEADDR_TRY=1と書き換えることで、
サーチが行えるようになりました。
見つけたコードも、エミュのチートファイルに登録して有効に使えるようになりました。

私が、エミュの構造を理解できていない為、config指定内容の正当性を証明できないのですが、
サーチ内容も、TOOLKITと同じになるので、たぶんOKなんでしょう。

あと、ベースアドレスを見る限り、hasteds_1.30は、アドレスが”8”だけずれているようなので、
サーチしたアドレスに8を足してやれば有効になることも解りました。

imaha486さん(hastedsや、EmuHasteの作者)に問い合わせた結果、
私のケースは稀であり、他では同様の報告が無いとのこと。
また、なんらかの原因で、私のPC上に展開されるメモリが、ARM9、ARM7、ROMイメージの配置順が
通常とは違う順で配置されてしまっている事が考えられるとの見解を頂きました。

ただ、cofigで対応できるという素晴らしい機能のおかげで助かりましたので、
他の方々もEmuHasteをお使いになる事を私は勧めます。

人それぞれのPC環境があるので、
案外エミュサーチ解らない・・・て人の中には、私のようにベースアドレスズレが原因で、
うまくサーチが出来ない事が原因だったりするかもしれません。
(私が最初、エミュサーチに気持ち消極的だったのは、この為です)

サークルメンバーの中に、もしそういう方がいらっしゃいましたら、
PCやエミュ環境と共に、サーチツールにスナップしたベースアドレスを聞くなどすれば
こういった問題を回避できるかもしれませんね。


あと・・・
サーチを行う上で、必要な知識があります。
まぁツールをダウンロードしてヘルプみれば書いてあることなのですが、
先に知っておかないと苦労しますw(ちょっと苦労した人→papa_parl)

※Hexビュワーに展開されるメモリはリトルエンディアン式であるという事。
サーチするときに使えるコマンド?・・・というより記号があるので、
覚えておくこと!


hasteds 、EmuHaste、両方で使える書き込み命令
16進数 00FFEE1122…   
10進数 0xxxxxxx 000000yy アドレスxxxxxxへ1バイトyyを書き込み
10進数 1xxxxxxx 0000yyyy アドレスxxxxxxへ2バイトyyyyを書き込み
10進数 2xxxxxxx yyyyyyyy アドレスxxxxxxへ4バイトyyyyyyyyを書き込み

hasteds 、EmuHaste、両方で使えるサーチ記号
10進数(直指定) S0 〜 S255 8ビット(00-FF)の値のサーチ
10進数(直指定) M0 〜 M65535 16ビット(0000-FFFF)の値のサーチ
10進数(直指定) L0 〜L4294967295 32ビット(00000000-FFFFFFFF)の値のサーチ


EmuHasteのみに有効な変化量サーチの指定記号
10進数(変化量) +(-)S0 〜 +(-)S255
+(-)M0 〜 +(-)M65535
+(-)L0 〜+(-)L4294967295
10進数指定の頭に+または-の符号を付けると、
「変化量」を調べることができます。
(例)敵に34ダメージを与えた→敵のHPは34減った→-M34
※Papa_parlの独断で抜粋。HELPにはもっと沢山の情報があり、勉強になるので各自かならずHelpに目を通してください。



Hexビュワーを使って、データを書き換える時、


以上、とても大切なので覚えておいてください。
TOPへ戻る


エミュレータサーチやってみた!

それでは、エミュレータサーチの行い方です。
今回は、比較的サーチが簡単で、私のようなコードサーチビギナーにも優しいソフトをチョイスしました。
サーチするROMは、ポケダン/時です。
エミュは上で紹介している、NO$GBAで、サーチツールは、EmuHasteを使用しました。

まずはNO$GBAを起動します。



すると、起動するROMを指定する画面がポップアップし、任意のROMを指定するとエミュでゲームが立ち上がります。

ゲームが始まったら、EmuHasteも起動して、左上の「SNAP PROCESS」をクリックします。



すると、EmuHasteにズラズラっと16進数が表示されました。
このSNAPとは、PC上に展開されたメモリのアドレスを、実際にDSで使用するアドレスに置き換えて表示するものです。
※・・・この説明であってるのかな? 写し撮るという意味で、スナップ写真のスナップの同じなのかも?※
ですので、この02000000から展開されるメモリアドレスは、DSがゲームカートリッジから呼び出したメモリアドレスと同じになるわけですね。
だからこのアドレスを使って改造が可能になるのです。

そして、今回サーチするのは、定番中の定番! お金を増やすコードをサーチしてみます。
ヨマワル銀行の残高をいじってしまいましょう!



現在、私はヨマワル銀行に65, 935円貯金しています。



EmuHasteでは、10進数を直接取り扱うことが出来ます。
上の説明にも書きましたが、数値の前に「S」「M」「L」を付け足すことで、10進数のサーチが出来ます。
まずは、新たにサーチを開始するので、「新規サーチ「New」」をポチっと押します。
そして、預金残高の65935の前にLを足して、L65935をサーチウィンドウに入れて検索Findボタンをポチっと押します。
すると、検索結果が右に表示されました。

今回”65935”という数値をサーチすると9つヒットしたと言うことで、9 Hitの文字と、9個分のアドレスと数値が表示されます。
実際にメモリ上にある数値は、赤線であるとおり、16進数の”0001018F”ですが、
その右に(65935)と10進数表記もされています。べんりですね!

しかし、目的のアドレスは一つ。9つぐらいなら片っ端から数値を書き換えてみることもできますが、
もうすこし絞ってみましょう。

通常(雑誌や他のコードサーチ系のHP等)解説されている絞込み方法だと、「1円預けてみましょう」という感じで、
パラメータを変更させるために最小単位の1円を使う所が多いですが、

私はあえてヘンコな数値を指定します。
・・・と言うのも、プログラム上、1づつ増えたり減ったりするという数値カウントは頻繁に行なわれていると考え、
デタラメな法則性のない数値を指定したほうが、むだにサーチに引っかかることを省けると考えるからです。
ま・・・私の勝手なかんがえなのですがw



で・・・あまり意味は無いのですが、実際にゲーム上で13円預けてみます。
すると、残高は、65935から65948に変化しますね。



なので、今度はL65948を数値ウィンドウに入れてサーチします。
※続きでサーチをおなうので、「新規サーチNEW」は押してはいけません。せっかくヒットした9つ分が消えてしいしますよ※

すると、9つヒットしていたアドレスが、6つに減りました。
これは先ほどサーチした9つの中から、数値が 0001019C に変化したものを見つけ出すオペレーションを行なったことになります。

欲をだして、もうすこしアドレスを絞り込めないか試して見ます。



またまた、ゲームをプレイして、38円お金を預け、預金残高を 65996 に変化させて L65996でサーチします。
しかし・・・もう6件から少なくなりませんでした。
なぜでしょうか?

実際に預金残高として扱われているデータは一つのはずですが、
ゲームを進行する上で、預金残高はいろんなところで扱われている可能性があります。
そのつど、残金をどこかに呼び出して、一時保存されていたら、そのアドレスまで検索にかかってしまう・・・
とか、そういうことなんでしょう。 なんとなくですがw

あとは、自分で一つ一つ数値を打ち変えてみて、ゲーム上で残金が変化するか試すしかないですね。

とりあえず、000101CCの数値をいじくって見ます。
今回は簡単に扱えるように1バイトだけ変えることにしました。
ですので、00 01 01 CC の CCをC0に書き換えてみます。

すると預金残高はいくらに変動するのでしょうか?

関数電卓を使って確かめてみます。


000101CCを16進画面で入力し、10進にチェックすると、



65984になる事がわかります!
そしてEmuHasteを使い、直接メモリを書き換えます。

さて・・・どれから試すのか? 
どれからでもかまわないのですが、私は今回は一番下から試して見ます。
・・・意味は特にないです。
しかし、サーチのツワモノな方々は、どれが有効アドレスなのかある程度予想がつくようになるそうです。
そうなると、もうマトリックスのネオのような感じですかね?

一番下の023757E0 000101CC (65996)をダブルクリックします。
すると二つの変化が起こります。
Hex(16進数)表示されているアドレスが、023757E0がトップになりました。アドレスがジャンプしたんですね。
さらに、CHEAT ENGINEのウィンドウに、 023757E0と、今ダブルクリックしたアドレスが自動挿入されます。
この自動挿入されたアドレスの右側にすでに半角のスペースが入力されていますから、そこに”C0”と打ち込みます。
これは、アドレス023757E0をC0に書き換えなさい!という命令です。
ちょうどこの上でも説明していますが、チートコードで、0から始まる命令は、1バイト分だけ書き換える命令なのです。

そして、「更新&適用 EXE&APPLY」を押すと、Hexビュー画面の
023757E0- CC 01 01 00 00 ・・・・が
023757E0- C0 01 01 00 00に書き換わったのが解ると思います。

  ※リトルエンディアンなので、000101CC は、メモリ上では、 CC010100 となっている※



実際のゲーム画面は?



メモリ上はC0に書き換わっているのに、預金残高は前のままの65996です。 こいつはハズレです。
次をサーチしてみます。

 ※ゲーム画面を確認するときは、リアルタイムに数値は変わらない場合があるので、一度Bボタンで画面を閉じて、
   再度ヨマワルに話しかけるなどして、画面を出しなおすようにしてください。

先ほどと同じ手順を行ないます。
しかし、その前に、CLEARボタンを押して、先ほどのハズレコードを消します。
そして、今度はしたから2番目のアドレス!をC0に書き換えてみます。



同じ手順でメモリの数値を書き換えます。



すると今度は、預金残高が65984に変化しました!ビンゴです! サーチ成功です。
この事から、アドレス0229DA44が預金を変化させるアドレスだと言うことが解りました。

では、このアドレスをつかって、預金を変化させるコードを作ってみます。
しかし、先ほど違うアドレスの数値を書き換えてしまっているので、ゲームを立ち上げなおすことにします。

アドレスは忘れないように、一旦どこかに退避させておきましょう。

to ClipBoardを押すことで、クリップボードにコピーしますから、メモ帳にでもペーストしておきましょう。

サーチしたコードを試してみる。

NO$GBAの場合、アスタリスク 「*」を押すことで、ゲームが再起動します。

※ゲームを再起動する前に一旦EmuHasteを終了してください。
 起動したままだと、先ほどのコードが有効になったままです。


そして、はじめと同じ手順で、再起動したゲームを再起動しEmuHasteでスナップします。
先ほどのコードの効果を確かめるために、ヨマワル銀行までやってきました。



ここで、先ほどサーチしたアドレスからコードを作成するのですが、
先ほどのコードは↓の用になっていました。


これでは、下一桁(1バイト分)しか変化させることは出来ません。
どうせならもっとお金持ちになりたいっすよね?
ですので、すこし先ほどの調べたアドレスのコードを変化させます。

この上の章でも書きましたが、0は1バイト書き換え命令、1は2バイト、2なら4バイト書き換える命令です。
0229DA44 からCC 01 01 00 と4バイトのデータが格納されていますが、これは、16進数で00 01 01 CCということです。
これを4バイト書き換え命令の2を使い、
アドレス指定を、0229DA44から2229DA44にしてやることで、4バイト分の記述命令の出来上がりです。
あとは、この後ろに半角スペースをあと、数値をしてやればよいのです。

  ※メモリにはリトルエンディアンで書き込まれていますから、数値は下の方から1バイトずつ格納されている※

今回は、ひゃくまんえん!を指定!1000000は16進数に直すとF4240になります。
F4240とは、00 0F 42 40 のことであり、書き込むときは、00 0F 42 40としてやらねばなりません。
ですので、コードは、2229DA44 000F4240 となります。

そして、CHEAT ENGINEのウィンドウに 2229DA44 000F4240 を打ち込んで、「更新&適用EXE&APPLY」を押します。



すると、Hexビューで、メモリが書き換わったことが確認できますね。
しかしHexビューでメモリを見ると、40 42 0F 00とリトルエンディアンで数値が格納されています。
これはもう、慣れるしかないですね!



実際のゲームでも、預金残高が1000000円に換わりました。
コード完成です。

※注意しなければならないのは、
PARは、このEmuHasteとは、書き込み命令が、0と2が逆転しています。
これをPARで使おうとすると、
2229DA44 40420F00 を
0229DA44 40420F00 に直す必要があります。 ややこしいですね。
しかし、CHEAT ENGINEの 0-2コード効果反転 というのにチェックを入れると、0と2の効果が入れ替わりますから、
PARコードをEmuHasteでシュミレーションすることが出来ます。

TOPへ戻る

BCSC活動報告ページへ戻る