DOS文書プログラムのコピープロテクションを解析してみた。なお、私は当時の事情は知りませんが、調べたことを知ったかぶりで書いています。

免責事項:日本国の法律では、コピープロテクションを回避および除去すること、コピープロテクションを除去したプログラムをそれと知りながら使用することは私的利用も含め著作権法で禁止されています。この記事は著作権法で認められている研究目的のためだけに提供されます。

DOS文書プログラムは、1980年代に日本IBMがワープロ専用機に劣らないワープロ機能をパソコンのマルチステーション5550に持たせようと開発したワープロソフト。欧文ワープロ専用機のDisplayWriterをベースに開発されたという経緯から、専用OSで動作し、その時点では「文書プログラム」という名前だったが、後年に日本語DOSで動くよう改良されてこの名前になった。ソフトウェアの名前に「プログラム」なんてつけるとは、なんという無骨さ。コンシューマーなど意識にない。その反省からか、1993年頃に開発された後継製品は「織姫」というおしゃれな名前になった(が、簡易版の「織姫Lite」が1バージョン発売されただけでこのシリーズは終息した)。

DOS文書プログラムにはⅠ、Ⅱ、Ⅲがあって、ⅢでPS/55(MCA機)のJDOSに対応した。また、DOS文書プログラムⅢの中でもバージョンが1から3まであって、さらにそのマイナーバージョンもあって、1990年11月末に出荷が開始されたバージョン3.03からDOS/V対応のバイナリが追加された。

どのバージョンでコピープロテクションが追加されたかは分からないが、私の手元にあるファイルを調べた限り、DOS文書プログラムⅢバージョン1.0(1988年)の時点では既にあったようだ。→読者から頂いた情報によれば、文書プログラム バージョン5.0(1985年9月発表)にはコピープロテクションがあるとのこと。

DOS文書プログラムⅢ(確認したのはバージョン3.09)のコピープロテクションは環境に応じて3通りの方法がとられている。

隠しキーファイルにマシン固有値を保存する方法

ハードディスクにインストールした場合はこの方法がとられると考えられる。DOS文書プログラムⅢのデフォルトのインストール先はC:\WP3だが、この中に$JWP_075.$$$というRSH属性(読み取り専用、システムファイル、隠しファイル)のファイルが作られる。この中の0x0Aと0x0C番地にWORD値でマシン固有の値が記録されている。この固有値はドライブ構成か何かから算出されるようだが、それが何なのかは分からない。

この後、偶数番地に0x7580というマジックナンバーが記録されていないかサーチする。両方が一致すればコピープロテクションはパスしたものとみなされる。

マスターディスクに細工されたデータを読む方法

上記の方法が利用できない場合はこの方法がとられる。ディスケット・ドライブのドライブ番号1から3まで順に、ヘッド番号0、トラック番号79(最内周)、セクター番号50にアクセスする。

フロッピーディスクに詳しい人は「ん?」と思うかもしれないし、コピープロテクション技術に詳しい人は察しがつくかもしれない。フロッピーディスクのセクター数は一番多い2EDディスクでも1トラック36個までであり、セクター番号50は普通のフロッピーディスクには存在しない。しかし、特殊なフォーマットデータを書き込むことで、セクター番号50を作ることは可能である。この場合、DISKCOPYコマンドなどの通常の方法でディスクの複製を試みてもエラーが出て中断されるため、複製することはできない。

このセクターにはマジックナンバーが記録されており、キーファイルと同様にサーチして一致すれば、コピープロテクションはパスしたものとみなされる。

ハードディスクの特定番地にデータを書き込む方法

この方法は秘匿性が高いので、最初はこれを予想していたが、ハードウェアの互換性や他のソフトウェアとの競合などを考えるとあまりいい方法ではない。しかし、調べていくと驚く発見があった。

キーファイルを読みに行く前にBIOS ROMの機種判別コード (アドレスFFFF:000Eの1バイト)から機種判定を行っているようだ。この判定の対象が3AhとE0hからEDhまでとなっている。機種判別コードはIBM PCやPS/55にも存在するが、IBM PC/ATはFCh、PS/2やPS/55はF8hで統一されている。ここに機種コードの一覧があるが、この中で該当するのはPS/2 Model 55-5530 Laptop(PS/55 5530の間違い?)くらいか。

となると、これらの機種コードはマルチステーション5550を指しているのではないか?この判定の対象機器では、この後にINT 13H, AH=82Hが呼び出される。INT 13HはディスクBIOSと予想できるが、AH=82HというファンクションはIBM PCやPS/55には存在しない。02Hであればセクター読み取りというファンクションが存在する。この中途半端なIBM PCとの互換性も5550と似ている。

この後の判定はマスターディスクを使った方法と同じ。

コピープロテクション回避の痕跡

てっきり私はJDOS版のDOS文書プログラムにはコピープロテクションがないものだと思っていたが、DOS/V版のファイルと比較した結果、私が持っているファイルはコピープロテクションの検証結果から条件分岐する部分がNOP命令で上書きされていることが分かった。ファイルのタイムスタンプが同じ1993年でありながら妙に中途半端な日時だと思ったら、そういうことだった。

しかも、バージョン1.0のファイルにも同じくNOP命令で上書きされていることが分かった。こちらは更新年が1990年なので、その頃からバージョンアップの度に同様にパッチしていたと考えられる。そうまでしてでもDOS文書を使いたがる人がおったんだな😏


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!