
2026/02/02 19:21
**PCフロッピー・コピー保護:Vault Prolok**
RSS: https://news.ycombinator.com/rss
要約▶
<|channel|>final <|constrain|>## Japanese Translation:**
Vault Corp. は1980年代に UNILOK、CHRONOLOK、COMMLOK、ROMLOK のコピー保護デバイスの Prolok 系列を製造し、ProLoader と呼ばれるディスク複写機(当初価格 3,495 USD;ProLoader II は 1989 年までに 1,595 USD)も販売しました。
Prolok 保護ディスケットは最後のトラック(シリンダ 39)に「指紋」を三つ保存し、弱ビット穴を作ってバッドセクタとして機能します。PROLOK.EXE ユーティリティは高度に難読化されており、XOR 復号ブロックを使用し、ビデオメモリ内の特定文字列(“quaid”や “noguard”)を確認し、有効な保護ディスケットかどうかを検証します。ディスクが書き込み禁止の場合は失敗します。
実行ファイル(例:Alley Cat)を
で保護すると、サイズが約55 KBから約70 KBに増え、起動遅延と CGA 雪が追加されますが、製品固有のデータは埋め込まれません。同じ Prolok パッケージ内の任意のディスケットで保護されたプログラムを実行できるため、多製品ライセンス化には制限があります。prolok c:\games\cat.exe a:catprot.exeRAMKEY などの Anti‑Prolok ユーティリティは Quaid CopyWrite を用いて INT 13h コールを傍受し、損傷領域をシミュレートします。これにより保護されたディスクをコピーして、新しいディスク上でプログラムを通常通り実行できます。
1985 年 5 月、Vault は Quaid Software を 1 億ドルで訴え(Vault Corp. v. Quaid Software Ltd.)、この事件は Title 17 のバックアップ権に関する判例を確立し、ルイジアナ州のソフトウェアライセンス執行法を覆しました。
Prolok Plus がハードディスクをフォーマットしたりワームを仕込めるという噂が広まり、消費者信頼は低下しました。Ashton‑Tate は年末までにプロダクトから Prolok を削除しました。
Prolok のエミュレーションには弱ビット(NFAs)と損傷領域を符号化したディスクイメージが必要です。MFI、86F、TransCopy などのフォーマットはこれらを表現でき、TransCopy は無効な MFM シーケンスで弱ビットを示します。MartyPC では TransCopy イメージに弱ビットマスクをサポートすることで、Prolok 保護タイトル(Alley Cat、dBase III v1.0)が実行可能になりました。NEC Read Sector ID コマンドの初期不備が「キー・ディスケットを挿入してください」というエラーを引き起こしましたが、後にセクタ ID の進行をシミュレートすることで解決されました。
Vault は 1988 年 1 月にチャプター 11 から復帰し、1993 年に指紋ロゴ商標を更新しました。その最終的な運命については詳細が不明です。Robert McQuaid のインタビューでは法廷闘争の費用(10 万ドル以上)と Vault が実施した厳重な秘密保持策(暗号化コード層、NDA、日次シュレッダー処理)が強調されました。
このエピソードはハードウェアコピー保護からより柔軟なライセンスへとシフトを促進し、バックアップコピーに対する消費者権利を強化しましたが、同時にユーザーを海賊行為のリスクやデータ損失の可能性にさらしました。
本文
その他の製品
1980年代を通じて、Vault は Prolok 系列に属する多様な他製品を発表しました。例としては UNILOK、CHRONOLOK、COMMLOK などがあります。
Unilok はマルチキー磁気ディスク方式で、同一指紋のディスクセットがあれば、同じシリアル番号を持つ任意の二枚のディスクで保護対象タイトルを起動できました。
Chronolok は保護されたタイトルが実行されるたびにカウントし、事前設定された上限に達すると期限切れになる仕組みでした。
Vault はまた ROMLOK と呼ばれる並列ポート用ドングルを製造し、1985 年にはより高度なハードウェアへ進出しました。ディスク複写機「ProLoader」を発表したのです。このマシンは当初 3,495 ドルで販売されていましたが、1990 年までに ProLoader II はわずか 1,595 ドルで購入できました。
Prolok ソフトウェア保護ディスクの解析
私は元々未開封の Prolok 保護ディスクパッケージを手に入れることができました。これにより、実際にどのように機能していたかを確認できます。
物理的な検査では、各ディスクに 3 つの指紋があり、すべてのディスクで指紋は同じ位置にあります。しかし、各ディスクに保存される PROLOK.EXE はそれぞれユニークであり、円筒 39、ヘッド 0、セクタ 1 のデータも異なります。
3 つの指紋があることは興味深いです。商用製品として Prolok を使用した数少ないものの一つに dBase III v1.0 があり、そのディスクには 1 つだけ指紋があります。
指紋はディスクの最後のトラックと重なり、3 つの不良セクタを作ります。以下の図では、指紋の概略位置を円で示しています。外側トラックに対してコントラスト変化が見られますが、これはディスク上に書き込みスプライスがあるためです。つまり PROLOK.EXE ユーティリティは、空白でフォーマットされたフロッピーをプロフェッショナルな複製後にのみ書き込まれるよう設計されていると考えられます。ディスクの残りは未使用です。
PROLOK.EXE は有効な保護ディスクが検出されない限り実行を拒否します。さらに、ディスクが書き込み禁止の場合にもエラーで終了します。
引数なしで PROLOK.EXE を実行する
このユーティリティは非常にシンプルです。入力ファイル(保護したい実行可能ファイル)と出力ファイル(生成される保護済み実行可能ファイル)を指定します。また、カスタムユーザー名やシリアル番号も付与できますが、出力先は保護ディスク上にある必要があります。
試しに Alley Cat の保護版を作ってみました。コマンドは次のとおりです:
prolok c:\games\cat.exe a:catprot.exe
ユーティリティは確認を求め、少しドライブのノイズを伴った後で完了通知します。生成された catprot.exe は元の 55 067 バイトから 69 944 バイトへと増加しました。
catprot.exe を実行するとゲームが正常に起動しますが、軽い遅延と CGA 雪(フレームバッファ上のランダムな雪のようなエフェクト)が表示されます。さらにディスクへのアクセス頻度も通常より多くなるようです。ハードディスクへコピーして実行した場合でも、保護ディスクがフロッピドライブに挿入されている限り動作します。別のディスクを挿入すると次のエラーが表示されます:
Please insert key diskette and try again
興味深いことに、同一パッケージ内の任意の保護ディスクでも実行できます。トラック 39 のユニークなデータや PROLOK.EXE の内容が暗号化に使用されているとは思っていたものの、別の説明があるようです。
もし小規模ソフトウェアパブリッシャーで異なる製品を販売していたなら、この制限は非常に残念でした。1 つのディスクで複数の製品を盗用できるため、各製品ごとに別々の指紋付きディスクセットが必要になります。
PROLOK.EXE の解析
PROLOK.EXE は非常に難読化されています。トラップやシングルステップ割り込みベクタを頻繁に上書きしてデバッグを防止します。
プログラムは自分自身の一部を XOR で暗号化し、後で再び XOR することでメモリ内に完全に解読された状態が残らないようにしています。これは単純なメモリダンプ攻撃から守ります。
各ブロックのコードが復号されるたびにコードセグメントをダンプし、少なくとも 5 レベル深くデバッグしました。プロセスはまるで玉ねぎを剥ぐようでした。
メモリブロックを解読するルーチンはレジスタから呼び出され、最近復号された関数内のアドレスがロードされます。以前の復号ステップを見逃した場合、クリッカーは重要なエントリポイントさえも把握できません。
興味深い発見として、ビデオメモリに対して「quaid」と「noguard」という文字列をケースインセンシティブで検索する処理がありました。Quaid Software はバックアップソフトウェアを開発した会社で、NOGUARD は Central Point Software の Copy II PC に付属し、Prolok への対策として宣伝されていました。
Prolok がこれらのユーティリティを検出することは、コピー保護技術とバックアップソフトウェア開発者間で進行中だった猫と鼠ゲームのヒントです。空白期間にビデオメモリをスキャンする仕組みはありませんでした。このため、保護タイトル起動時に CGA 雪が出る理由が説明できます。
また、0xCA000 というメモリ領域(多くのサードパーティフロッピコントローラが拡張 ROM をマウントする場所)を解析します。Prolok は「BIOROM」という文字列と特定バイトを探しますが、具体的に何を検出しているかは不明です。いくつかのフロッピコントローラ ROM を調べましたが一致する文字列は見つかりませんでした。Copy II PC オプションボードが対象だったと考えていましたが、Trixter によるとそのようなボードには拡張 ROM が存在しないとのことです。
後半ではオーバーフロー割り込みハンドラからバウンスしてスタックに値をプッシュし、戻り時にトラップフラグを設定します。無意味コードへ戻ると見えても、各不思議な命令の後で呼び出されるトラップハンドラが正しいコンテキストを提供します。最終的にセクタ 39 の指紋を読み取る int 13h 呼び出しへジャンプする部分は非常に複雑です。
全体として、当時のツールで逆解析するには大変難解でしたが、決して止められないクリッカーも存在します。
Prolok 保護タイトルのコピー
Prolok のソフトウェアトリックと物理的なディスク改変にもかかわらず、最終的に回避は可能でした。保護コードは標準のディスク割り込みベクタ 13h を使用しているため、int 13h をインターセプトし、破損領域をシミュレートする anti‑Prolok ユーティリティをメモリに残すことができました。保護されたプログラムは何も感知できませんでした。
より頑丈な保護(Superlok 3.0)ではフロッピコントローラへ直接アクセスしてインターセプトを防止しますが、互換性に問題が生じる可能性があります。
Central Point Software の NOGUARD や Quaid Software の RAMKEY は Prolok を回避できると宣伝されていました。インターネットアーカイブで入手可能な 1990 年版 Quaid CopyWrite(RAMKEY ユーティリティ付き)は、1989 年版 Prolok に対しても更新済みであると期待できます。
RAMKEY を使用する前に、CopyWrite で保護ディスクをコピーします。CopyWrite のインターフェイスは次のようになります:
[CopyWrite screen]
A ドライブに Prolok ディスク、B ドライブに空白ディスクを置き、Enter を押すだけです。
コピーはスムーズに進みますが、トラック 39 に到達するとドライブが大量のノイズを発生させ、しばらく進行しません。最終的にトラック 40(標準フロッピでは存在しない)まで進むとコピーは完了します。
CopyWrite completed successfully.
RAMKEY をロードしてから実際に保護ディスクを取り外し、catprot.exe を新しいコピーで起動すると、読み込みが少し遅くなるものの CGA 雪などのエラーは発生せず正常に起動します。
Quaid Software がこの歴史的な対決で勝利したようです。
Vault Corporation と Quaid Software
Vault は自社製品を完全にバイパスする商用ソフトウェアが販売されることに非常に不満でした。1985 年 5 月、Vault は Quaid Software を相手取り、1 億ドルの損害賠償を求めて訴訟を起こしました。このケースは著作権法上重要な先例となり、Wikipedia にも記事があります:Vault Corp. v. Quaid Software Ltd.
Quaid Software は裁判で勝利し、米国著作権法第 17 条に基づきユーザーがソフトウェアのバックアップコピーを作成する権利を確認しました。また、ルイジアナ州の「Louisiana Software License Enforcement Act」を覆し、Prolok ソフトウェアの逆アセンブルやリバースエンジニアリングを「消費者権利実現に不可欠なステップ」とみなし違法と定義しました。
訴訟は Quaid の創業者 Robert McQuaid に多大な費用(10 万ドル以上)をかけさせました。裁判資料から、Vault が Prolok コードの秘密保護に取った手段は以下の通りです:
- PROLOK プログラムを 4 層の暗号で保護
- 開発者間を分離し、情報漏洩を防止
- 従業員全員に機密保持契約を締結させる
- 営業終了時に紙資料をシュレッダーで破棄
- マスター PROLOK プログラムを金庫に保管
このような極端な秘匿策の下、Vault が Prolok を簡単に回避されたことに対して非常に苛立っていたことは理解できます。
Robert McQuaid へのインタビュー
Robert McQuaid の Vault と戦った経験や裁判の詳細について、インタビューを行いました。こちらで読むことができます(リンク付き)。
Vault の企業破綻
ビジネス判断の失敗は会社全体を崩壊させることがあります。Vault は「Prolok Plus」製品発表でその典型例を示しました。PC Magazine から抜粋した記事は次の通りです:
「自分のリスクで無視してください」と Vault Corporation の会長 W. Krag Brotby は警告し、ハードディスクを搭載しているときにデータや OS を即座または遅延して破壊する「ワーム」を仕込み得ると述べました。
この発表は Vault へのネガティブな消費者認識を一気に拡大し、Prolok 製品そのものも批判の対象となりました。Prolok Plus は実際には製品化されていないようですが、噂だけでも「Prolok 保護タイトルはコンピュータを破壊または消去する恐れがある」と広まりました。
Ashton‑Tate はこの問題を嫌悪し、年末までに Prolok を使用した製品から撤退しました。Vault Corporation は評判と大きな顧客を失い、業界での存在感を徐々に失っていきました。Softguard Systems が Ashton‑Tate の一部ビジネスを引き継ぎました。
面白いことに、数年後に W. Krag Brotby は情報セキュリティに関する複数の書籍を書きました。
Prolok のエミュレーション
計算機史を保存する上でエミュレーションは不可欠です。Prolok もその歴史の重要な一部でした。私は MartyPC で Prolok 保護を利用・解析できるようにしたいと考えています。
ディスクイメージフォーマット
ディスク表面に関するメタデータ(弱ビットマスクなど)を定義できる画像形式が必要です。一般的なメタデータはコピー保護スキームの「弱ビット」情報ですが、まだ説明していません。
弱ビット
フロッピドライブは磁気媒体に 1 と 0 を直接書き込むわけではなく、磁場の反転(フラックス遷移)を連続で検知し、その間隔からビット列を解読します。MFM エンコーディング規格では「3 つ未満の 0 の後に必ず 1」が保証されており、定期的なフラックス遷移が生まれます。
もしフラックス遷移が無ければドライブは増幅率を上げて弱い磁気信号を検出しようとしますが、実際にはノイズになり、ランダムデータが返ります。こうした領域を「No‑Flux Areas (NFAs)」と言います。
コピー保護作家の中には、ディスクに意図的に NFAs を作り、読み取り時に毎回変化することを検出して保護に利用しました。これらは通常の PC フロッピドライブでは生成できません。
Prolok の指紋は実際に弱ビットを作りますが、書き込み後に再びフラックス遷移が生まれない「破損領域」として扱われます。したがって単なる弱ビットとは異なります。
弱ビットのエンコード
弱ビットと意図的な欠損(ホール)を同時に表現できるフォーマットは数種類あります。MAME の MFI は可能ですが、現在サポートしていません。私たちが扱う 86Box エミュレータのネイティブ形式である 86F はそのような「破損」情報を持つ画像が存在しません。
Prolok 指紋をディスクイメージにエンコードする方法として、PCjs が 2019 年に行ったアプローチがあります。PCjs は JSON ベースのカスタムフォーマットで、必要なメタデータを追加できました。ただし手動で各ディスクに付与する必要がありました。
「Deluxe」版の Copy II PC オプションボードは Prolok 保護の複製をサポートしていました。レーザーで穴を開けるわけではなく、破損領域を特定し、コントローラチップにその領域をシミュレートさせていました。
残念ながら私自身はオプションボードを所有していないため、自身で TransCopy 画像を生成できません。
NewRisingSun が作成した flux2tc.exe は KryoFlux または SCP フラックスイメージから TransCopy 形式のディスクイメージを作成できます。Prolok 保護された dBase III の TransCopy イメージは、DosBox‑TC で動作することが報告されています。
例として、Alley Cat 保護ディスクの KryoFlux ダンプを次のコマンドで変換しました:
flux2tc "T:\gw\prolok_alleycat00\prolok_alleycat00.0.raw" catprot.tc --droptracks
その後 DosBox‑TC を起動し、ディスクイメージをマウントします:
imgmount a -t floppy catprot.tc
A ドライブに切り替えて catprot.exe を実行すると、
DosBox‑TC fooling Prolok
と表示されます。
しかし TransCopy 形式は他の保守が進んでいる DosBox フォークではサポートされていません。そこで私は fluxfox(MartyPC のディスクイメージライブラリ)に TransCopy 形式を追加しました。
TransCopy は弱ビットや破損領域のメタデータを持たないため、DosBox‑TC が Prolok 指紋をシミュレートする方法は「不正な MFM シーケンス(長い 0 の連続)」を直接データストリームに埋め込むことです。これが flux2tc の動作であり、インポート時に弱ビットマスクを生成します。
図で示すと:
Prolok fingerprint, visualized – magenta represents weak bits.
指紋は Cylinder 39 周辺に集中しています。
「ホール」と「弱ビット」を区別する
実際には、破損領域(書き込み不可)と弱ビットを区別する必要はないかもしれません。Prolok の NFAs は必ず Cylinder 39 に現れ、ヘッド 0 が主である可能性があります。指紋の「穴」は非常に大きく、内側エッジに限定されるため、他のトラックを覆い尽くすことはありません。
したがって次の仮定で進めます:
- Cylinder 39 の弱ビットセクタは書き込み可能とみなす(ただし、書き込むと保護が破壊される恐れがあります)。
- もしも強固に保護されたコピーを作成する場合は、Weak‑bit マスクを保持し、読み取り時にランダムデータを返します。
このヘリスティックで TransCopy 画像の弱ビットサポートを有効化し、Prolok 指紋セクタへの書き込みテストが成功することを確認しました。
Read Sector ID の問題
catprot.exe を実行すると「オリジナルディスクを挿入してください」というエラーが出ました。調査の結果、プロトルックは Cylinder 39, ヘッド 0, セクタ 4 に書き込み後に複数回 Read Sector ID コマンド(ドライブが回転中に次のセクタ ID を返す)を発行し、その戻り値がインクリメントされないと実際のフロッピでは起こらないことを検出します。現状、MartyPC には回転シミュレーションが無いため、このコマンドは常に同じ ID を返していました。
対策として、Read Sector ID が呼ばれるたびに「次のセクタ ID」を計算し、順序を進めるよう実装しました。これで catprot.exe は正常に起動します。
dBase III v1.0(Prolok 保護)も MartyPC で動作し、86Box チームは 86F ファイルの表面記述フィールドに関するバグを修正しています。現在 (バージョン 4.3) は Prolok 保護タイトルをサポートしています。
Vault Corporation の最終的な運命
Vault の結末については詳細が不明です。1988 年 1 月に Chapter 11 再編成から脱却し、数年は継続しました。最後の活動は 1993 年に指紋ロゴの商標更新でした。もし Vault の終焉を知っている方がいればコメントしてください。
Robert McQuaid へのインタビュー(再掲)
Vault と戦った経験や裁判の詳細について、Robert McQuaid にインタビューしました。非常に興味深い内容ですので、ぜひご覧ください(リンク付き)。