筆者がCDイメージファイルのバイナリ編集に手を出してまだ間もないため、
現段階で分かっている範囲での記述になる。
イメージファイル内のファイルの書き換え
イメージファイルを仮想CDとしてマウントすると、エキスプローラで中のファイルを閲覧できることは周知の通り。
- さらにこの中の任意のファイル(Aとする)をバイナリエディタで開き、
- CDイメージファイルそのものもバイナリエディタで開いた上で、
- ファイルA内の長めのバイナリデータ列をキーにしてCDイメージのバイナリを検索すると、
一致している箇所(アドレスBとする)がヒットする。
恐らく、ここでAのデータとアドレスB周辺のデータは多くの場合完全に並びが一致していることだろう。
同じ検索データが複数個所でヒットする場合は要注意だが、
ヒットする箇所が単一の場合、ファイルAの場所はアドレスBあたりで間違いないと分かる。
ということは、Aのデータをファイルサイズはそのままで編集・改造したものをコピーし、
アドレスBに上書きすれば良いのではないか。
…という方向性は間違っていないが、それだけでは成立が難しい場合がある。
書き換える場所が比較的小規模な場合ならそれで十分な場合が多いが、
大規模な書き換えになると一つの問題にぶつかる。
304バイトの仕切り版で区切られた2048バイトのデータ
さらにファイルAとアドレスBの一致確認を進めていくと、途中で全く一致していないデータと遭遇する。
よくみると、ファイルAのデータの途中に全く別のデータが割り込んでいて、その後にファイルAのデータの続きが現れる。
これを自分は「仕切り板」と呼んでいる。
▼
以下が仕切り板の見本。仕切り板のほとんどはランダムなデータだが、冒頭と末尾に0000・・・とFFFF・・・が固定された部分があるため、
ファイルAがよほどランダムなデータでない限り、慣れればある程度見分けることができる。
XXの部分にはランダムな16進データが入っている。
XX XX XX XX 00 00 00 00 00 00 00 00 XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX FF FF FF FF FF FF FF FF FF FF XX XX XX XX XX
仕切り板のサイズは全て304バイト、仕切られている領域は全て2048バイトと判明。
調べてみると、これがCD-ROMのフォーマットだということが分かった。
セクタ1つのデータ領域が2048バイト、そのセクタのヘッダが304バイトというわけだ。
つまり、バイナリを書き換えようとしたときに、この仕切り板(セクタ領域)を避けるようにして編集する必要があるということ。
手作業なら、2048バイトずつ元データを区切って上書き貼り付けを繰り返していかなければいけない。
書き換えが大規模になればなるほど、非常に面倒な事になるのは確かだ。
この辺の作業を自動化できるプログラムがあれば良いのだが、現状は特に見当たらないため難しい。
今のところ、キーマクロツールを利用した自動化を思いついている。
だが、もしかしたら
上記を知らない頃に、仕切り板なしデータを直接CDイメージに上書きして、しかもそれが成功してしまったことがある。
仕切り板によるアドレスのズレを考えると、本来あるべきでないアドレスにデータがあることになるので、
ゲームで実行した時の表示はグチャグチャになるはずなのだが、そのデータはゲーム上で全く整合性がとれていた。
本来のファイルAと完全に同じファイルと見なせているかどうかは未検証である。
だがもしそうだとすると、仕切り板なしデータの貼り付けが上手くいってしまう可能性もあり得る。
今のところ、その条件は不明である。
個別のファイルのサイズを定義する場所は判明しているので、もし上記が上手くいくのであれば、
ファイルサイズを他のファイルに影響を与えることなしに、ある程度増やすことも可能かもしれない。
WAD(S)の場合、これは特に重要になりうる。
最終更新:2021年02月04日 21:46