花咲ワークスプリングのBGMデータを解析するお話

花咲ワークスプリング』とかいうえっちなげぇむが来週金曜日発売らしい。

体験版を落としてみると、ゲームデータの中のBGMフォルダにowpというファイルがあるのがわかる。これがBGMのデータっぽいが、いかんせんそこらへんのソフトでは再生できないようだ。

というわけで解読をしよう。

スクリーンショット 2015-03-21 9.29.28

どうせ音声データはOggVorbisだろうという軽い推測のもと、普通のOggと並べてバイナリをじっと眺めてみよう。左がowpファイル、右がoggだ。右のoggはoggenc2.87 (libVorbis v1.3.5)を使っている。

左右を見比べると、どうやら1バイトが1バイトに対応しているっぽいのがわかる。一番最初、oggでは「OggS」の「g (67)」が2つならんでいるが、左でもその位置で「^ (5E)」が2つならんでいる。さらに、oggでNULL (00)の部分は左では9 (39)、FFの部分は左でC6となっているっぽいこともわかる。

これを対照表にしてみよう。上がowp、下がoggだ。

どうやら、右から1桁目、4桁目、5桁目、6桁目が上下でそれぞれ違うっぽい。特に00とFFの対照だとよくわかる。とりあえず各バイト、39とXORを取ってみることにしよう。39とXORをとれば、1桁目、4桁目、5桁目、6桁目だけを反転させることができる。

ただ3MBぶんもこんなことをやっていたら地球が滅亡してしまうので、プログラムを書こう。今回はCで書いた。

XORを取るときに0xを忘れないようにしよう(ここで詰まった(ザコ))。

後はコマンドライン引数にowpファイルを指定してやれば、oggファイルがぽいぽい生成される。

試しに再生してみると、なんとまあ軽快な音楽が流れてきた。

bgm81.owpは主題歌のGirl meets Loveのインストになっているようである。

早くえっちげのBGMをラクに聞きたい方は、どうぞコンパイルして使ってください、ということで。

ちなみにカルマルカ*サークル製品版のBGMデータもこれによって復号できる。あと、XORの性質的に、このコードにoggを渡してやればowpが作れる。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です