はむのブログ Ver.4.8.6 ~= Irregular child

Imaha486の雑記用ブログ。ツイッターもやってます http://twitter.com/Imaha486

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

マリオカートDS海外版

2005-11-30 21:06:21 | Weblog
※写真と記事は関係ありませぬ。

---

先日「マリオカートDS(海外版)」のアドレス2004000以降が暗号化~とお伝えしましたが、
実験的にDSEmuのデバッガでステップしながらルーチンを見たところ、アドレス2000A00周辺に、
ARM9のプログラムコードのアドレス末端から先頭にかけてデクリメントし続ける処理がありますなぁ。
DBxSTANDでメモリ丸ごとダンプしたものの復号化されている様子も無いので、エミュレーションの精度の問題でしょうか。
それとも単純に私の予想が外れているだけでしょうか。
うーん、悩ましい。

2005/11/30 PM22:13追記
とりあえず情報だけうぷうぷ。

// 復号化ルーチン???
:020008B0 EE070F9A mcr 15,0,r0,cr7,cr10,{4}
:020008B4 EE071F35 mcr 15,0,r1,cr7,cr5,{1}
:020008B8 EE071F3E mcr 15,0,r1,cr7,cr14,{1}
:020008BC E2811020 add r1,r1,#0x20
:020008C0 E1510002 cmp r1,r2
:020008C4 BAFFFFF9 blt 020008B0 // ループ
(中略)
:020008DC E59F0030 ldr r0,[r15, #+0x30] ;r15+0x30=*(02000914)=#33521664(0x01ff8000)
:020008E0 E5810000 str r0,[r1, #+0x0]  ;r1+0x0=*(027e0008)=#-1326769572(0xb0eb1a5c)
---最も怪しい部分ここから
:020008E4 EB04CD2F bl 02133DA8 // 逆アセリストに存在しない領域。怪しさ爆発。
:020008E8 EB000096 bl 02000B48 // 分岐先はbx r14が1行あるのみ。
:020008EC EB050713 bl 02142540 // これも存在しない領域。
---ここまで
:020008F0 E59F1020 ldr r1,[r15, #+0x20] ;r15+0x20=*(02000918)=#33566720(0x02003000)
:020008F4 E59FE020 ldr r14,[r15, #+0x20] ;r15+0x20=*(0200091c)=#-65536(0xffff0000)
:020008F8 E12FFF11 bx r1 (Jump to addr_02003000?)

分岐先の処理
:02003000 E92D4000 stmdb r13!,{r14}
:02003004 E24DD004 sub r13,r13,#0x4
:02003008 EB00CD78 bl 020365F0 // 飛んだ先は暗号化されている
:0200300C E59F000C ldr r0,[r15, #+0xc]  ;r15+0xc=*(02003020)=#33791128(0x02039c98)
:02003010 EB00CD69 bl 020365BC // 飛んだ先は暗号化(略)
:02003014 E28DD004 add r13,r13,#0x4
:02003018 E8BD4000 ldmia r13!,{r14}
:0200301C E12FFF1E bx r14 (Jump to addr_02001DF8?)

・・・

やはり「bl 02133DA8」と「bl 02142540」が最も怪しい。
この飛んだ先に本当のメインプログラムが復号化されて配置されているのか、
それとも飛んだ先に復号化プログラム本体があるのか…。
コメント

ユメミルクスリ : 今いる世界にさよならしようか

2005-11-27 02:07:57 | Weblog



某所にてOP主題歌をベタ褒めしており、かなり興味深かったためアクセスアクセス~。
主題歌のダウンロードページ(なんとフル版!)

…ツボ直撃。
ジャンルがダウナー系青春恋愛AVGという、精神的に磨り減る危険性の高いネタのため、
激しくスルーする気だったんですが、気づいたら初回限定特典付通販の注文を済ませてた私('A`;)
全部、Maricaさんの歌声が悪いんですよーーっ。

・・・

友人(のえ)に「登場キャラの南条京香が何か知らんがウザい」と言ったところ、
「それはドリル(注:お嬢様組曲の上原睦子のこと)の声と同じだからだろ?」との意見が。
…うーん、睦子は好きなんだけどなぁ。

さてさて、本編が楽しみですよっと。
願わくば「いたいけな彼女」になりませんよーにーーーーーーー。
コメント (1)

マリオカートDS海外版

2005-11-26 21:35:33 | Weblog
キタ━━━━(゜∀゜)━━━━ッ!!
とりあえずプレイ前に吸い出しじゃっ。

11/27 AM1:05追記
とりあえず各種マジコン&ツールで動作検証してみますた。

マジコン編
× M3-PerFect 転送ツールが強制終了。ファイル直書き込みも不可。
× G6(中文β) 同上。
× SuperCard-SD 転送ツールがviolationエラーを吐いて終わり。
× GBALinkZIP512M 転送ツールが強制終了。

ツール編
× NDSRomPatcher 実行しても無限ループに入り、進行しない。
× LoadMe エラーを吐いて終わり。

ROMのダンプデータを見た限り、ヘッダ領域に何らかの意味を持つプログラムコードがあり、
ARM9のアドレス02004000以降のROMデータが暗号化されている感じです。
詳しく解析したわけでは無いですが、恐らくアドレス02000800~02003FFFの間で
復号化プログラムをユーザ領域に展開し、カートから暗号化データの取得及び複合を行い、
メモリ上に展開しているものと推測されます。
もしそうであれば、解決方法は

・根性と気合いで復号化ルーチンを解析し、暗号化データを全て復号化した後、
 復号化ルーチンを除去し、各種NDSマジコンでパッチを適用する。

・NDSエミュレータで市販ソフトが満足に動くようになったらマリオカートDSを起動し、
 メモリ上に展開された復号化済みのプログラムコードを抽出しROMに書き戻す。

などの手順が必要になりそうです。
まあ、意外と早くMarioKartDS-Decrypterとか出てくるかもしれませんなぁ。
コメント (1)

NDS改造について考察

2005-11-23 10:33:28 | Weblog
・きみのためなら死ねる ミニゲーム1回クリアで必ずポイント+100獲得
・ジャンプスーパースターズ Aボタンを押している間は倒されない

現時点で上記のニンテンドーDSのゲームの改造に成功しています。
やはり難点としては「メモリ空間の参照ができない」ことでしょうか。
PS2DISのような強力な解析ツールも無いため逆アセンブルリストから
地道に探すことになるわけですが、やはり微妙に大変です。

そこふと思うに「SRAMを活用」するのはどうでしょう?
セーブパッチを適用していないNDSROMは、セーブデータ保存先がEEPROMのままで、
実機カードに保存されるわけですが、要はその間、SRAMは何も使われておらず、
フリーな領域が余っていると考えることができます。

メモリダンプしたいレジスタ及びアドレス空間が特定できたら、
そのルーチンの最終リターン(bx r14/lr)命令をb(判定無しブランチ)に変更し、
任意の余剰領域に分岐させ、そこに独自処理を埋め込みます。
ダンプ範囲の内容をロードし、アドレス0x0A000000~に書き込む処理を作れば、
SRAMにメモリ内容を保持することが可能かも…です。

パラメータ変動処理を見つけてもパラメータ格納アドレスがわからない場合は
間接参照用レジスタの格納値を保存してやれば、一発で特定できますし、
これが判明すれば、その周辺10KBほどを吸い出してやれば、
芋づる式に大量のパラメータを発見できる可能性があります。
(HPを見つけた→その後にMP,攻撃力,防御力,素早さ,武器...etc..)

ちょっと研究してみる価値はありそうですな。
コメント (2)

さよなら「はてな」 よろしく「Goo」

2005-11-23 02:25:24 | Weblog
てわけで心機一転スタートです。

・・・

そういえば、SaTa.さん(http://www.pat.hi-ho.ne.jp/sata68/)のとこで、
NDSのカード読み書きのソースコードについての考察がありますが、
私も試しに自作のメモリビューワに組み込んで見たものの、やはり挙動がビミョー。
イニシャライズや命令実行のタイミングとか、サッパリ仕様がわからんぞなもし。

素直にNDSTech wikiの情報見て、自力でアクセスルーチン組むほうが無難かも…。
コメント