ねこープロジェクトII 

 

 プロテクトについて


プロテクトについて
PC-98系のサイトを回っていると エプソンプロテクトの解除(DISPELL)の説明はあるのに コピープロテクト解除については「違法行為です」の一言で済ませられています。
この2つは目的が違う以外は全く同じ「プロテクト解除」であり、何故片方のみが解説され、もう片方は全く解説なられないのでしょうか?

そんな連中はさっさと無視して(笑)、とりあえずプロテクトについて。



サンプルプロテクト
既存のプロテクトの解除方法は流石に言及出来ませんのでサンプルとして、プロテクトを作成しました。

np2d_m.zip (10KB)

中味は MS-DOSのファイルシステムで プロテクトを加えたフロッピーのD88形式イメージです。
このプロテクトは Neko Project II ver0.28でプロテクトの再現が可能となっています。

とりあえず、ブートしてみましょう。
 Neko Project II


今度は他のエミュレータで起動してみましょう。
D88形式から、他形式への変換に VFICを使用します。

D88→FDI D88から FDI(Anex86で使用するイメージ)には変換できません。

D88→TFD D88から TFD(一般的なベタイメージ)には変換できません。

D88→NFD D88から NFD(T98-Nextで使用するイメージ)には変換できます。

 T98-Next

変換したイメージをブートすると思惑通りにプロテクトに引っ掛かりました。
VFICでは様々な形式へ変換出来る代りに D88依存な箇所までは変換出来ないのでしょう。



プロテクトの解除
Wizard98 V3とりあえず、過去 このアプリケーションのファイラーがあったとして WIZARD V3/98で解除します。

ここで使用したファイラーは np2d_m.zipのディスクイメージに含まれています。

WIZARD V3/98をお持ちの方は これを使用して外してみて下さい。

WIZARD V3/98で FILER\NP2D.W3M を指定して、バックアップを取ります。

 T98-Next

…で バックアップを取ったディスクでブートすると マスターディスクと認識するようになりました。


続いて、このプロテクトを解除したイメージを見てみます。

 マスターを変換した NFDは 1,329,936バイト。
 バックアップの NFDは 1,329,680バイト。

とサイズが小さくなりました。

プロテクト解除した事により マスターかコピーかを判別しているチェック領域(4C:01:F6:01 256バイト)が不要になり その分サイズが減ってます。
早く言うと WIZARD V3/98でプロテクトを解除した為、特殊フォーマット部分が外れてノーマルフォーマットになりました。その為…

NFD→FDI

先程失敗した FDIへの変換も可能となっています。

 Anex86

勿論、正常動作します。

この様に MS-DOSベース(MEGDOS等も)のソフトウェアでは プロテクトを解除 及び ノーマルフォーマット化する事により、MS-DOSと同様 Windows上(Anex86, ディスクイマージュ)からの吸い出しが可能になるケースが殆どです。



自力で解除〜
ここら辺は 80x86コードが読めないとダメなので…

合言葉は CD 1Bなのですが、これは 80x86で言えと int 1bhに当たります。
この int 1bhは PC-98の場合ディスクアクセスファンクションなので これを中心に調べて行きます。

1000:0072 B94C01         MOV    CX,014C

1000:0075 BAF601 MOV DX,01F6
1000:0078 BB1000 MOV BX,0010
1000:007B CD1B INT 1B


とりあえず該当部分。
CX, DXレジスタは 読み込む場所指定で この場合 4C:01:F6:01を読み込みます。
というか これは NP2D_M.D88のチェックセクタっすね(笑)

これがどこから呼ばれてるかと言うと…

1000:0018 E84300         CALL   005E

1000:001B 7316 JNB 0033
1000:001D BA0400 MOV DX,0004
:
1000:0033 BEB900 MOV SI,00B9
1000:0036 EB03 JMP 003B
1000:0038 BE9C00 MOV SI,009C
1000:003B AC LODSB


CALL 005E で 次の JNB 0033で分岐してます。
005Eをコールしてセクタを読んで、失敗したら 0033番地へ、成功ならそのまま続行で 001D番地へ飛びます。
で、失敗したらプロテクトに引っ掛かりますので 失敗しても強制的に続行させるように書換えて…
その先を追っていくと結局 成功の場合は 0038番地、失敗の時は 0033番地が通るコードになってます。
面倒なので 最初の分岐で 強制的に成功ルーチンへ飛ばしてしまいましょう。

1000:001B 7316           JNB    0033

↓ ↓ ↓
1000:001B EB1B JMP 0038


これでプロテクト解除です。
NP2D.W3Mはこのように書換えています。

これはかなり簡単な例で、実際にはどこでリードしてるか解りづらくしたり、暗号化させたり、書換えたらプロテクトに引っ掛かるようにしたりと、色々トラップがあるでしょう。

8086コードが読めて PC-98のハードがちょっと解れば…あとは時間と根気だけの世界です。



WIZARD V3/98がやっている事
NP2D.W3M では 通常コピー(プロテクトに引っ掛かるコピー)をしながら、特定コードを書換えています。

    ad=mscn(ad,MEM2+0x1fff,0x73,0x16,0xba,0x04,0x00,0x8b,0xfe,0x83,0xc7);

if(ad<=(MEM2+0x1fff)){hstr(ad+0x00,"eb,1b");++sw;}


上のスクリプトは 73 16 BA 04 00 8B FE 83 C7が見つかったら 先頭2バイトを EB 1Bに書換えています。
結局 上の書換えの通り 7316(JNB 0033) を EB1B(JMP 0038)にしてるだけなのですが、 73 16だとプロテクトと関係ない部分も書換えてしまう可能が強いので プロテクト部分だけヒットできるように 検索コードを広げています。

まぁ乱暴に言えば ディスクイメージをバイナリエディタで開いて 73 16 BA 04 00 8B FE 83 C7を検索して EB 1Bに書換えても良い訳ですね。


 BZ
 ▲ np2d_m.nfdだと 1362B番地〜


この場合、WIZARD V3でコピーした時と比べると 例のCRC Errorのセクタ 4C:01:F6:01 は残りますが動作は同じです。
結局、コピー(複製)と言っても、プログラムにパッチをしてるだけなのです。



最後に…
まぁ、著作権の解釈については各自に任せます。

ただ 一つ考えて欲しいのは 今貴方が持っているマスターディスクが壊れた時のこと。

メーカーに問い合わせてもサポートは殆ど期待できないでしょう。
ヤフーオークションでおおっぴらに中古販売してますが、これも著作権の侵害です。
かといって友人から貰おうが借りようがコピーしようが著作権の侵害です。

早い話、今のマスターディスクが壊れ再度入手しようとすれば 必ず著作権侵害はつきまといます。

「だからバックアップ」と私は考えています。
フロッピーディスクという壊れ易いメディアならなおさら…。
日本国の著作権…守らなくていいなんてとても言えませんが、ハッキリ言ってクズ同然です。


戻れません