●PerlでONS バイトコード私見1
~ 吉里吉里のようにシナリオファイルがそのまま人間に理解出来るタイプではなく、
バイトコードで記述されている場合における私なりの移植方法まとめ ~
※ 素人のざれ言ですと予防線ぺたぺた。用語なんかも割と適当です。
※ 以前にも少し触れましたが、場合別にもう少しまとめてみたく。
※ ちなみに暗号化は展開ツールやメッセージローダ等で既に復号されているとします。
復号、メッセージ抽出についてはnota様の解析補助汎用チェッカー・方法論が多大な参考になると思います。
ここではあくまで復号してメッセージは出たけど、制御コードはそれ以上弄りようがないものが対象。
※ ダンプしたもの、引用の範囲内ということで勘弁願います。
さて、私の場合とっかかりは基本的にバイナリエディタでシナリオファイルを眺めるだけです。
何かしらの法則性を見つけるまでただただ。いや、デバッガとかよう使えないです…。
エディタはフリーのStirlingを使用していますが、眺めるだけなのであまり機能は使ってません。
ここで面倒なのが、元々はバイトコードを上からガリガリ処理する仕様なので
一々制御文ごとに区切りを設けていないものが多いこと。
もしアドレスやら特定の文字列やら番号やらで明確に区切られていると非常に助かります。
またメッセージ部分がシナリオスクリプトの中にそのまま記述されている場合は その付近の制御コードなどが比較的楽に推測できます。 分からなくても台詞で実プレイと照らし合わせればいいですしね。例)こんにゃく 01 00 00 (略) 1A 00 00 00 02 00 00 (略) 1A 00 00 00 03 00 00 (略) 1A 00 00 00 04 … 1A 00 00 00 で終了し、次の制御文が通し番号付きで開始している
例)Bullet Butlers05 00 00 45 00 50 00 81 40 83 43 83 93 83 4F 83 ...E.P. イングリ 8A 83 62 83 68 82 CD 88 EA 93 78 82 CD 82 BB 82 ッドは一度はそれ EA 82 F0 8B 91 82 F1 82 BE 82 AA 81 41 8F 5D 8E を拒んだが、従者 D2 82 CC 90 E0 93 BE 82 C9 89 9E 82 B6 81 41 82 の説得に応じ、そ BB 82 CC 90 67 82 F0 90 B9 8C 95 82 C5 8A D1 82 の身を聖剣で貫い A2 82 BD 81 42 5F 72 06 04 00 01 00 0D 00 73 65 た。_r.......se 5C 53 45 66 30 30 37 2E 6F 67 76 06 05 00 01 00 \SEf007.ogv..... 00 00 00 02 0E 00 00 00 01 00 02 00 04 00 00 0C ................ 00 65 5C 45 56 48 4F 30 34 2E 6D 67 72 02 01 04 .e\EVHO04.mgr...06 04 で始まるのが効果音だと推測出来る
問題なのは、特に制御の区切りがなく、そしてメッセージが制御コードと切り分けられているタイプです。
例) おとボク
制御コード部分 (ファイル前半)00 14 00 00 00 F4 01 0A 06 00 00 00 F4 01 0C 06 ................ 00 EC FF 00 00 F4 01 09 00 23 00 08 0A 09 00 00 .........#...... 00 FF FF 04 09 00 24 00 00 00 00 00 0A 09 00 64 ......$........d 00 F4 01 09 14 25 00 00 26 00 00 27 00 14 28 00 .....%..&..'..(. 00 29 00 08 0A 08 00 00 00 FF FF 04 08 00 2A 00 .)............*. 00 00 00 00 0A 08 00 64 00 F4 01 09 14 2B 00 00 .......d.....+.. 2C 00 14 2D 00 00 2E 00 0A 08 00 00 00 F4 01 14 ,..-............ 2F 00 00 30 00 00 31 00 0A 09 00 00 00 F4 01 02 /..0..1......... 06 00 02 07 00 02 08 00 08 0A 08 00 00 00 FF FF ................
メッセージ部分 (ファイル後半)E9 88 A5 8E 41 82 CD 82 A0 82 AD 82 DC 82 C5 82 挨拶はあくまでも E0 97 44 82 B5 82 AD 81 41 97 44 89 EB 82 C9 81 優しく、優雅に。 42 00 73 74 62 30 30 5F 00 53 54 43 30 30 30 30 .stb00_.STC0000 00 8F 97 90 B6 93 6B 81 75 82 A8 81 63 82 A8 82 .女生徒「お…おは CD 82 E6 82 A4 82 B2 82 B4 82 A2 82 DC 82 B7 81 ようございます、 41 82 A8 8E 6F 82 B3 82 DC 81 76 00 73 74 63 30 お姉さま」.stc0 30 5F 00 53 54 44 30 30 30 30 00 8F 97 90 B6 93 0_.STD0000.女生徒 6B 81 75 82 A8 91 81 82 A4 82 B2 82 B4 82 A2 82 「お早うございま DC 82 B7 81 63 82 A8 8E 6F 82 B3 82 DC 81 63 81 す…お姉さま…… 63 81 76 00 4D 49 5A 30 30 30 30 00 90 90 95 E4 」.MIZ0000.瑞穂
ひたすら謎のバイトコードとひたすらただのテキストがそれぞれ羅列されています。きゅう。続く。
(CSSが上手く行かないので弄り中。ローカルだとちゃんと等幅で表示されるのに)