東方に学ぶ解析
なんか最近これ系のタイトル多いな・・・。
ネタ切れ?
さて、実行ファイル中にLzssUtil.cppというソースファイル名が見つかったことから、圧縮アルゴリズムを自前で用意していることが分かっていましたが、thbgm.dat(BGMデータ)が全曲のwavサンプリングデータそのままのカタマリ(暗号化等一切なし、サンプリング周波数等固定)と分かってから、画像・スクリプト・効果音・デモプレイリプレイデータが入っていると思われるthxx.dat(xxは0詰め10進バージョン番号)に使われていると踏んでいました。
thbgm.datはバイナリエディタで開くと"ZWAV"という特徴的なデータで始まるのに対して、thxx.datは本当にぐちゃぐちゃ。予想は当たっているようです。
ここでまさかの展開ツール発見。東方 Tools Wikiあたりをご覧ください。
ソースまであったので入手(欲しかったらアップローダで検索してください)。
コメントで情報が書いてあったけどこれはひどい。
圧縮どころか至る所に暗号化がかかってる。
暗号化パラメータ
unsigned char key, unsigned char step, int block, int limit
意味は名前からだいたいお察しください。
基本的にkeyとxorして暗号化/復号化します。
ただし1フェーズごとにkeyがそのときのいろいろな変数の剰余を足したり定数を足したりぐちゃぐちゃに変わります。
解析屋にかかればxorとハッシングくらい(ハッシングっていうのかこれ)朝飯前なのだろうか・・・?
暗号パラメータは箇所によって違います。
定数でソースに直書きです。
ただし(パラメータ番号+暗号化データ)というセクションもあります。各番号に対するパラメータも直書きです。
(マジックナンバー+パラメータ番号+暗号化データ)全体をLZSS圧縮してるんです。
パラメータリストも全部ばれちゃってますが・・・。
基本的にあまりこういうの見ないんですが、解析屋さんってすごい。怖い。
ついでに英語で今までのほとんどのバージョンのデータに対応してるGUIつきのツールもあるみたいですね。ええ、海外なら当然でしょう。もう慣れました。
手に入ったものはだいたいこちら
- .anmファイル
- .rpyファイル
- デモプレイのリプレイデータ。入力を抽象化すればリプレイも簡単に作れるよ、とかリプレイできればデモプレイも簡単に作れるよ、などと脳内講義していたものでした。
- .wavファイル
- 効果音。そのまんま。結構稀有なそのまま使えるファイル・・・。
- ピチュ音もあるよ!
- .msgファイル
- 名前から察するに会話文だと思うんだけど暗号化かなにかで読めない。
- .stdファイル
- StageDataファイルと読んだが・・・?
- 最初にanmファイル名がありタイトルアニメーション、その後敵の出現データ・・・?
- .eclファイル
- こちらも似ているがサイズが大きい。こちらがステージデータ・・・?
- Bossとかそういう文字列があってそれっぽい
- thbgm.fmt
- thbgm.datの切れ目データのようだ。実はソースに直打ちではなかったとか。
- th10_02.wavなどのBGMの元のファイル名が見える。
- .verファイル
- バージョンとよくわからない数値がテキストで。よくわからない。
- musiccmt.txt
独自形式を独自圧縮して独自暗号化をかけてあり、thbgm.datと比べるとかなりすさまじいです。うーん、確かにBGM以外は正規利用が考えにくいか・・・。
"未定義の関数名"や"Script stack over/under"が\src\script\sptcmd.cppの周りにあることから関数呼び出し機能つきのスクリプトがあるはずだが、どうやらテキスト形式ではないらしい・・・。
Spt FileHeader ID error
とか
Spt FileHeader Version error
とかあるし・・・。
どうもスクリプトのコンパイル(?)のためにcygwinを使っていると見た。
ついにつながったか・・・。
ここらへんのことあんまりやらないんだけど燃えるね。やっぱり。
さて、EXを攻略する作業にでも戻るか・・・。