動機 #
色々あって必要だったので。
利用するもの #
- Ghidra
🔗https://ghidra-sre.org/ - Ghidra-GameCube-Loader
🔗https://github.com/Cuyler36/Ghidra-GameCube-Loader
情報 #
時間をかけられないので校正せずに環境構築情報をdumpしておく。
日本版のマリオカートのディスクで試した。
🔗https://wiibrew.org/wiki/Using_Ghidra_with_the_Wii に書いてあるとおり、Ghidraのローダーがないとwiiのバイナリを読み込めないのでGhidra-GameCube-Loader
をビルドして導入。
ビルド&インストール方法はGhidra-GameCube-Loaderのreadmeに書いてある。
上のwiibrew.orgの記事内に記述されているwiiのpowerpc32アセンブリ拡張をGhidraに認識させるghidra-gekko-broadway-langはGhidra-GameCube-Loaderに統合されている(情報ソース ghidra-gekko-broadway-langのreadme)ので別にインストールする必要なし。
ゲームの実行ファイル、staticライブラリの場所は以下を参考にした。 🔗https://mariokartwii.com/showthread.php?tid=1193
マリオカードなどはシンボルもそれなりに割れているようだ。
流石にデバッグシンボルはshipされていないだろうから解析者が自力でつけたのと一部バイナリに残っているゴミをデマングルしたものがほとんどだと思う。
シーンを知らないのでなんとも言えないが。
🔗https://mariokartwii.com/showthread.php?tid=922
海外版と日本語版では別々にコンパイルされていると思うので、その場合関数のアドレスなどは、ずれることになるので注意が必要。
一応書いておくがGhidraを利用するにはJDKが必要なので注意。
Windowsなら 🔗https://learn.microsoft.com/en-us/java/openjdk/download 、 🔗https://adoptium.net/ あたりが使えるかもしれない。
自分は別環境なので確かめたわけではないので注意。
まあググって自分で調べることをおすすめする。
マリカwiiではゲームのロジック関連のコードの大部分はStaticR.rel
内にあるらしい。
🔗https://wiki.tockdom.com/wiki/Main.dol
.rel
は使われ方的にいわゆるshared libraryなのだが、StaticR
とは。
main.dol
はWiiScrubberで抜き出した。(dolphinのプロパティからは不可視)
いくつか同名のファイルがディスク内にあるので注意。(親切)