レトロPCは最初は安価なカセットテープを記憶媒体として使っていました。その後に登場したのがフロッピーディスク(以下FDと略す)です。カセットテープが何分もロードに必要なところを数秒から数十秒で完了し、かつ、ランダムアクセスが可能なFDは、当時は高価な周辺機器だったにもかかわらず、あっという間に一般に浸透していきました。また、ドライブの価格も一気に値下がりしていったのを覚えています。
ところが、この便利なFDは便利であるが故の問題を抱えていました。それが不正コピーです。ゲームソフトハウスが発売した製品も、簡単に複製できてしまい、かつ、カセットテープと違い劣化がない。このため、各社はコピー防止のために知恵を絞る事になります。これがコピープロテクトです。今回はこのコピープロテクトに関して、私の知る範囲でお話ししたいと思います。
※ 今回の戯れ言はかなり長文です。
- FDの基本
まず FD の物理的な大きさからです。今から凡そ45年前は 8inch が主流でした。というか、8inch しかありませんでした。そのサイズはびっくりするほど大きくて、大きい団扇ぐらいと言えば大きさがイメージできますでしょうか。その後 5inch が発売となります。サイズが変わっただけで内容的には同様と記憶しています。そして、PC-6601 や MSX で採用されたのが 3.5inch です。これはプラスチックケースに格納されていて、見るからに堅牢でしたが実は固定部分に歪みが生じやすく、個人的には壊れやすい印象でした。
FD はその記憶容量によって規格が違っていました。1D, 2D, 1DD, 2DD, 2HD という感じで種類があり、それぞれ記憶容量と磁性体が異なっていました。最初の数字は片面なら 1、両面なら 2 という区別です。D は Density(密度)の略です。では DD はというと Double Density の略となります。日本語で言えば倍密度ですね。HD は High Density の略です。高密度という意味みたいです。密度に関してはこのぐらいまでが私が扱った事がある FD です。
※ 2022/05/20 15:30 上記の記載は間違いで正しくは下記の通りと指摘が入りました。
- 2D : 2 sided Double density(両面倍密度)
- 2DD : 2 sided Double density Double track(両面倍密度倍トラック)
- 2HD : 2 sided High density Double track(両面高密度倍トラック)
自分は長らく PC-8801 担当でしたので、ここからは自分に馴染みのある 2D を前提として話をしていきます。
FDは円周状にトラックが刻まれています。その数は80。これを80トラックと称しています。FD読み取りのヘッドの位置を動かすのはトラック番号変更ですね。この動作をシークと言います。1トラックは16セクタに分解されます。そして、1セクタは256バイトのバイナリデータを保存できます。つまり 2Dメディアは 80×16×256 = 320KB が保存できるのです。
※ 2022/05/20 15:00 指摘されて気がつきました。PC-8801 は 2D です。なぜ2倍に…💦セクタは連続してトラックに配置されているわけではありません。セクタとセクタの間には GAP3 と呼ばれる緩衝地帯があります。GAPは特に決まりがあったわけではありませんが、だいたいは $4E で塗りつぶされていたと思います。
あと、セクタの配置ですが、1,2,3 と順番に並べると読み込み時の待ち時間が結構大きかったので、PC-8801 では主流としてインターリーブ13がよく採用されていました。インターリーブ13 は、隣り合うセクタが +13 となる並びです。具体的には
01, 14, 11, 08, 05, 02, 15, 12, 09, 06, 03, 16, 13, 10, 07, 04
こんな並びとなっています。この並びだとディスクから1セクタ分のデータを読み取って転送して、次のセクタの読み取りタイミングで、ちょうど次のセクタ番号がヘッドの位置まで回転してきているので、ほぼ待ち時間がないので高速読込が出来る…という仕組みでした。一度 FDD の回転を止めると再始動して回転が安定するまで若干時間が掛かるので、少なくともゲームでは電源が入っている時はずっとディスクを回しっぱなしにしていました。
一番最初のトラック1※セクタ1の256バイトは、電源投入時に自動的に読み込んでその先頭から実行されます。このトラック1セクタ1の事を特別に IPL(Initial Program Loader)と呼びます。この部分に関してもプロテクトと切っても切り離せない関係にあったりします。
※このブログではトラックやセクタの数えを1からとしています。
ゲームは正しく動くがコピーできない。複製するには「全てのデータが正しく読める」「全てのデータを正しく書き込む」という作業が必要です。この全てをどこまで含むかというのが、コピープロテクトの基本的な考え方となります。
全てのデータをセクタ内のデータとせず、周辺のGAPまで含めると、正しく読むのは難しくなります。また、先に述べたインターリーブの順番もデータの一部と考える事が出来ます。読み込み速度に支障が出ない範囲で、変則的に並べる事でもプロテクトになります。つまり本来のフォーマットとは異なるフォーマットを採用する事がプロテクトの基本となります。
※ これはレトロPCのフロッピー置き換えに使える!…かもしれません💦
※ これはレトロPCのフロッピー置き換えに使える!…かもしれません💦
- GAP3 に任意のデータを入れる
通常 GAP3 は $FF で埋め尽くされて意味はありません。この GAP3 に特定の文字列などを書き込んで、その文字列が存在するかどうかを確認するプロテクトです。普通にコピーすると GAP3 は複製対象外となりますので、コピー防止になります。
この方法はトラックまるごとコピーという手法により、いとも簡単にコピーされますが、複製にはそれなりのコピーソフトを使用する必要がありました。
- 1トラックまるごとデータ
GAP3 とかそういうのをほぼ無くして、1トラックに全てデータをぶち込む方法です。データの読み込みが 4KB 単位になるため、使い勝手が悪く、実際の採用例は少ないです。これもなかなかアイディアとしては素晴らしかったのですが、トラック丸ごとコピーの前には簡単に破られてしまいます。
- 1トラック内のセクタ情報を変更する
通常、1トラックには16セクタが含まれています。そのため、普通のコピーでは、1 ~ 16 を順番に複製する動作となっています。そこで、1トラック内に16あるセクタ数を増減させる事でプロテクトとしました。正しく読み込める数を調べるだけなので、チェックも簡単ですが、それ故に簡単にコピーされました。
上記の派生として、GAP3 の数を極端に減らして1トラック18セクタとする技法があります。これだと普通にはコピーできませんが、前出のトラック丸ごとコピーで、複製されてしまいます。
その対策として、書き込む時に物理的に回転数を落として、1トラックに通常では焼く事が出来ない数のセクタを1トラックに配置する方法が生まれました。これだと読み込めるけど書き込めないというディスクが出来ます。これを複製するためにコピーソフト側が用意したのがファイラー(の一部)となります。※後述
さらに1セクタ256バイトという長さを変更したプロテクトもありました。この辺りのプロテクトは読み込み速度や使い勝手に直結するのと、開発中のディスク制作に専用のツールが必要になるなど、開発効率的には手間が掛かる方法でした。故に最終最後にプロテクト処理を施す事が殆どでした。プロテクト強度としてはかなり弱い部類となります。
- セクタ CRC エラー
1セクタ 256バイトの直下には2バイトの CRC が格納されています。これは、読み出したデータの正当性を確認するチェックサムのような役割をしていますが、これを任意に破壊して、読み込み時に CRC エラーが出たらマスターと判断する手法です。この方法は、通常は書き込む時に正しい CRC値が書き込まれてしまうために、エラーセクタを作るのが出来ません。
これはトラック丸ごとコピーで複製していたと思っていたのですが、ネット検索するとセクタ書き込み時に FDCリセットを送るとか。うーん、それだとCRCの値が不定なるのと、書き込んだセクタの内容がリセットタイミングで不正になる可能性もあると思うけどどうなんでしょうかねぇ。
私はこのプロテクトは経験無いので憶測で話しますが、私ならトラックまるごと読み込みして、エラーのCRC値もチェックします。GAP3 に特定の値と同じですね。トラックまるごと書き込みがどこまで融通が利いたかは、ちょっと正確なところを覚えていないので、この辺りは皆さんの突っ込みどころかと思います💦💦💦
- コロコロプロテクト
これは読み込む度に値が変化するトラックを作って、読み込む度に値が変化すればマスターと判断する手法です。某社が製品のデュプリケートでプロテクトを付けますよと、サンプルで持ってきたのが、このコロコロでした。自分でこのプロテクトを維持しながら製品開発を進めるのが厄介だったので、プロテクトルーチンそのものは業者が掛ける事になります。つまり IPL さえ突破してしまえば(ゲームが起動さえしてしまえば)後はプロテクトが無い事が保証されてしまうので、あまり良いとは思えませんでした。
もはや普通にフォーマットしてもコピーされるのであればと、ディスクに物理的な穴を空けてしまったプロテクトがあります。リードするとそのトラックがまるごとエラーになります(不定値になるという話もあります)。これは違う意味で凶悪でした。何しろディスク表面を読み取る繊細な FDD 読み取りヘッドに、穴の断面で高速にヤスリがけをするようなモノです。ドライブの破損や故障が起きる事は容易に想像できます。
また、ディスクそのものの耐久性も一気に落ちます。結果、この方法はすぐに市場から消えた…と私は思うのですが、その辺りはどうなんでしょうね。こういう極悪な方法には、私は手を出さなかったので詳細不明ですが、あまりにも極悪すぎて今でも話題に上るのは皮肉なモノです。
これらのプロテクトは、後ほど解説するファイラーによって簡単にコピーされるようになりました。寧ろ、コピーして使うのが当然になったような気がします。
これは知らなかったのですが、ダブルインデックスホールプロテクトというのがあったそうです。トラックの先頭位置はこの物理的な穴によって検知されていましたが、それを二つにする事で、マスターかどうかを見分けるとの事。いや、それ、どうなのよって記事を読んだ時に思いました。さらに時分秒プロテクトなるものもあるようですが、これに関しては FM系なので私は未経験なので割愛します💦
- 物理デバイスプロテクト
ゲームソフト以外の何かを見たり聞いたりあるいは使わないと、先に進めないトラップ的なプロテクトです。FD をコピーしてるだけでは、先に進めなくなります。
多かったのはマニュアルの n ページを見て言葉を入れろというヤツです。あるいは、パッケージの裏の写真を見て、そこに描かれているのはなんだというクイズ形式もあります。某ゲームでは、メロディモジュールを同梱して、あるタイミングでそのメロディが奏でるように鍵盤を弾けってのもありました。これだと難聴者がゲームを進められなくなり、そのような人に大変ご迷惑をおかけする事になりました。
ビジネス系のソフトで多かったのはドングルです。PC に特定のドングルと呼ばれるデバイスを差し込んで、それがあるかどうかで進行を決めていました。場合によってはドングル内にシリアルが打ち込まれていて、そのドングルと、ソフトウェア側のシリアルが一致しないと起動しないという仕掛けもありました。
これらは正規ユーザーでも物理的なデバイスを無くしてしまうと起動しなくなります。複数のソフトがドングルを必要とすると、同時に使う事になりPCによっては並列して使用が出来なくなりました。また、これまたファイラーによるパッチでチェックルーチンを回避する事で簡単に対応されてしまいました。
※ なんとまだ売ってた!ROM吸い取り機としても使えるみたいですね。うちにもあるんですが、まだまともに触っていないや💦
- コピー側の決定版/ファイラー
プロテクトはある意味ディスクの信頼性を落として成り立っています。そのため、メーカー側が強固なプロテクトを掛ければ掛けるほど、起動が不安定になりマスターであっても、コピー品と見なされる事件が発生する事になります。また、コピーしたら、コピーした状態でしか見られない仕組みがあって、それが逆にコピーを冗長させました。
私が知っている範囲では、マスターだと PRESENTS と表示されるところを COPYDISK と表示したり、デモの画像が上下反転で表示されたりとかがあります。あと、割と多かったのが、ゲームを途中まで遊ばせて停止する、あるいはゲーム進行を進ませない、所謂体験版にしてしまうモノがありました。
プロテクトチェックははっきり言えば余分な事をしているので、間違いなくゲームの起動速度には影響を与えました。プロテクトを外したら起動が2倍速くなったという話もざらにあります。そのため、コピーツールを製造販売する輩にとっては、ゲームメーカーがプロテクトを強めれば強めるほど売り上げが伸びるという皮肉な結果になっていったのです。
そして、極めつきがファイラーの登場です。これは、ゲームのタイトル毎に専用のコピーを用意するという、なんていうか正直どうにも対策できないモノです。おそらくプロテクトを破る人たちは ICE(In Circuit Emulator)を導入していたかと思います。これは、今のエミュソフトがやっている事をハードウェアで実現したモノで、今から30年以上昔からあります。具体的には、例えばターゲットが PC-8801 だとすると、その 88 の Z80 CPUを抜いて、代わりに ICE のプラグを差し込みます。ICE の電源を入れてから、88 の電源を入れると、88 のマザーボードは CPU が本物の Z80 CPU と思って動作を始めます。
ICE は命令のフェッチ単位で、動作を一時停止する事が出来ました。また、その時点でのメモリの状態を可視化する事も出来ました。そして、Z80 の命令をステップトレースして、レジスタが変化する状態も可視化できたのです。メモリライトやリードブレークなんてのもあります。80S31 側の CPU にも ICE をぶっ差す事が出来たのであれば、FDC に対する命令発効の様子もまさに一目瞭然でしょう。そこからプロテクトをチェックしている箇所を特定して、パッチを当てて潰してコピーするという専用ツールをファイラーとしてライブラリ化していったのです。
そしてこれが最終奥義なのですが、解析の結果、パッチが多くて手に負えないと判断すると、なんと IPL を独自のモノに置き換えて、セクタ内のデータを自分たちで勝手にメモリに配置して、起動する番地にジャンプさせるという手法を採り出しました。簡単に言うと乗っ取りです。暗号化しても暗号化解除部分は ICE で丸わかりなので、同じモノを組み込んでいます。そして、一旦ゲームが起動してしまえば、ゲーム中は起動時と同じような重たい判定はされないので、残ったチェック部分はパッチで潰すという形でコピーしていきます。暗号化が複数あっても判定して復号して新たに動くディスクを生成してしまうのでどうにもなりません。
このような状況でしたので、私は自分で最後に掛けたプロテクトでは、PC-9801 のFM音源ドライバとBEEP音源ドライバの2カ所にも仕掛けるようにしました。通常、ファイラー作成担当は、自分のマシンで起動チョックをします。ゲームのコピーがメインだとおそらく FM音源ボードは搭載したままだと思います。そして、パッチで潰して起動したーと思ったそれには、BEEP音源ドライバに仕掛けられたプロテクトルーチンは残ったままとなります。98 で FM音源ボードを付けていないユーザーは、コピーできないと怒りをファイラー屋に向けますが、ファイラー屋では正しく動作するので、しばらく原因がつかめないというワケです。昔はインターネットとかはなかったので、情報共有が遅かったので、このプロテクトはしばらく残ったままになりました。
これを最後に私はプロテクトを掛ける事を断念して、以後はデュプリケート業者にプロテクトを委託するようになります。プロテクトに費やす開発時間が勿体ないんですよね。そして、ファイラーが横行してから数年で、98 市場は衰退していく事になります。ゲームの新規開発が減った事もありますし、ちょうど Windows が発売されて IBM-PC/AT互換機が台頭し始めた時期とも重なります。コピーだけが原因では無いと思いますがコピー横行が衰退の一因になったとは思っています。
- コピープロテクトの将来
私の身近なところでは Steam 等の PCゲームが、不正利用と戦っています。プロテクト技術のでぬぅぼとかが忌み嫌われています。私も気持ちは凄く良く分かります。何しろ正規ユーザーが起動が遅くなったり FPSが低下するなどのデメリットを受けてしまうのですから、本当に気持ちはよっく分かるのです。反面、コピーによる売り上げの低下も事実としてあると思います。それを少しでも延命したい、今はゲーム開発にとんでもないお金が掛かるので、それを最低でも回収しないと会社として成り立たない。ちゃんと正規で購入して応援してくれるユーザーも多いのですが、残念な人がいるのも事実です。
Steam 等でよくあるアクティベーションは、PC がネットに接続されている事が前提となります。ただ、一度認証が通ってしまえば、以降はネット接続が無くても動作はするようになります。この仕組みは一見素晴らしいように見えますが、PC ローカルに全てのデータが残っているので、認証部分が潰されてしまうと、以降はコピーフリーとなってしまいます。
現在実用化が研究されているのが、ゲームの実行そのものはサーバー側で行い、入力の送信と表示結果の受信だけを PC で行うというリモート実行です。私にはこれがコピープロテクト対策の延長線上にあるように見えて仕方がありません。遊ぶ際には身元をメーカー側に提示して保証して、自分だけのアカウントを取得します。コピーが身バレに繋がれば自分がヤバい事になるので、自分のアカウントは自分で守るようになります。この考え方があるので、ネットにデータを配置して、ローカルだけでは動かないようにしたゲームが流行っているのだと思います。
レトロゲームはモノとして価値がありましたが、今後はよりサービスに変わっていくのも、今の流れなのかもしれません。これは個人的な見解だと文化の崩壊です。「モノ」としての価値がなくなると、どうなるのでしょうか。簡単な事で、サーバーが停止してサービスがなくなると、その瞬間にそのゲームは存在しなくなります。過去の歴史としては残りますが財産としては無価値です。長年ゲーム制作に携わってきた身としては、少し寂しい気もしますが、この流れは止まりそうにありません。
最後に簡単に著作権についてです。著作権には著作権(財産権)と著作人格権があります。コピーしても良いかどうかは、このうちの財産権が定めており、ほぼ全ての市販ソフトウェアは発売元開発元メーカーが複製をユーザーに禁止しています。禁止している(許諾していない)のにコピーしたら著作権違反となります。著作権違反は犯罪です。著作権違反は昔は親告罪でしたが、今は改正されて著作権侵害は非親告罪となりました。つまり、メーカーが告訴しなくても刑事事件として扱われます。こんなんで人生を棒に振りたくないですよね…。
※ 単なるUSBハブとしても優秀らしいです。¥893とかなり安い!
(2022/05/21 08:00現在)
(2022/05/21 08:00現在)
コメント
コメント一覧 (4)
当時Formula 68KというX68000用のコピーツールがありまして、そのanalyzeモードで色々なプロテクトを作成出来たのです
所謂コロコロフォーマット等、作ってて面白かったです
内藤時浩
が
しました
途中でクイズが出るけど、どこにもそのものの答えは書いてなくてきっちり説明書を読みこまないと答えを導けないものがあった。
FD5枚組でそれぞれFDの色が違ってた。物語内でも5枚のFDが出てきて指定した色のFDを入れるよう要求された。
内藤時浩
が
しました