第七章

以勇者斗恶龙之游戏为说明 ,以前第一代保护和解法 :
保护 :           解法 :
  设定磁盘参数 N=6      设定磁盘参数 N=6
  设定磁盘参数 N=6      设定磁盘参数 N=6
    ↓              ↓
  读取坏磁道数据        读取 DQ.DAT (坏道数据文档)
    ↓              ↓
  比对数据           比对数据
由于两者都能读到坏道数据 ,只但是第二者要事先将坏道数据存为一个文档
(DQ.DAT) 较麻烦 ,但是以后可免 KEY DISK ,省事多了 !
弟以市面上的解密版举例说明 ,兹列出其 EGA 版程式一部份。
-D CS:385
4B70:0385 44 51 2E-44 41 54 00 88 44 03 B9    DQ.DAT..D.9
4B70:0361 1E       PUSH  DS
4B70:0362 0E       PUSH  CS
4B70:0363 1F       POP  DS
4B70:0364 90       NOP
4B70:0365 90       NOP
4B70:0366 90       NOP
4B70:0367 B8003D     MOV  AX,3D00  ┐
4B70:036A BA8503     MOV  DX,0385  ┃ 开启 DQ.DAT
4B70:036D CD21      INT  21     ┘   (坏道数据文档)
4B70:036F 06       PUSH  ES
4B70:0370 1F       POP  DS
4B70:0371 31D2      XOR  DX,DX
4B70:0373 B90020     MOV  CX,2000  ┐
4B70:0376 89C3      MOV  BX,AX   ┃ 读取文档
4B70:0378 B43F      MOV  AH,3F   ┃
4B70:037A CD21      INT  21     ┘
4B70:037C 72F3      JB   0371
4B70:037E B43E      MOV  AH,3E   ┐
4B70:0380 CD21      INT  21    ┘ 关文档
4B70:0382 1F       POP  DS
4B70:0383 EB0A      JMP  038F
4B70:0385 44       INC  SP
以上程式取代了原来的 INT 7Fh(13h) 的读取保护道数据过程。
弟再举例例说明 ,该游戏是勇者斗恶龙 ][ 的一部份程式 :
4B70:6E01 33C0      XOR  AX,AX     ┐
4B70:6E03 8ED8      MOV  DS,AX     ┃
4B70:6E05 A14C00     MOV  AX,[004C]   ┃ 将磁盘读取之 N 值
4B70:6E08 A3FC01     MOV  [01FC],AX   ┃ 改为 6 (正常为 2)
4B70:6E0B A14E00     MOV  AX,[004E]   ┃
4B70:6E0E A3FE01     MOV  [01FE],AX   ┃
4B70:6E11 C5367800    LDS  SI,[0078]   ┃
4B70:6E15 B006      MOV  AL,06     ┃
4B70:6E17 884403     MOV  [SI 03],AL  ┘
4B70:6E1A B80000     MOV  AX,0000    ┐ Reset Driver
4B70:6E1D CD7F      INT  7F      ┘
4B70:6E1F BF0800     MOV  DI,0008
4B70:6E22 1E       PUSH  DS
4B70:6E23 50       PUSH  AX
4B70:6E24 B83658     MOV  AX,5836
4B70:6E27 8ED8      MOV  DS,AX
4B70:6E29 C606E22800   MOV  Byte Ptr [28E2],00
4B70:6E2E 90       NOP
4B70:6E2F 881E7E28    MOV  [287E],BL
4B70:6E33 58       POP  AX
4B70:6E34 1F       POP  DS
4B70:6E35 57       PUSH  DI
4B70:6E36 B80001     MOV  AX,0100 ┐
4B70:6E39 050101     ADD  AX,0101 ┃ 读取第 27h 道第 72h 号扇区
4B70:6E3C B97227     MOV  CX,2772 ┃ 第零面 ,将数据放到 ES:BX
4B70:6E3F BB0000     MOV  BX,0000 ┃ (9800:0000)
4B70:6E42 BA0000     MOV  DX,0000 ┃
4B70:6E45 CD7F      INT  7F    ┘
4B70:6E47 5F       POP  DI
4B70:6E48 80FC10     CMP  AH,10  ┐ 若是坏道则跳越
4B70:6E4B 7403      JZ   6E50   ┘
4B70:6E4D 4F       DEC  DI
4B70:6E4E 75E5      JNZ  6E35
4B70:6E50 B002      MOV  AL,02     ┐
4B70:6E52 884403     MOV  [SI 03],AL  ┃
4B70:6E55 B90001     MOV  CX,0100    ┃ 比对数据
4B70:6E58 BB0017     MOV  BX,1700    ┃
4B70:6E5B B04E      MOV  AL,4E     ┃
4B70:6E5D 263A07     CMP  AL,ES:[BX]  ┃
4B70:6E60 7503      JNZ  6E65     ┃
4B70:6E62 43       INC  BX      ┃
4B70:6E63 E2F8      LOOP  6E5D     ┘
4B70:6E65 268807     MOV  ES:[BX],AL   ┐ 结果放到此位址
4B70:6E68 26884701    MOV  ES:[BX 01],AL  ┘
4B70:6E6C B80098     MOV  AX,9800   ┐
4B70:6E6F 8ED8      MOV  DS,AX    ┃
4B70:6E71 B80000     MOV  AX,0000   ┃
4B70:6E74 B9001A     MOV  CX,1A00   ┃ 二次比对数据
4B70:6E77 33DB      XOR  BX,BX    ┃
4B70:6E79 3307      XOR  AX,[BX]   ┃
4B70:6E7B 052301     ADD  AX,0123   ┃
4B70:6E7E 43       INC  BX     ┃
4B70:6E7F E2F8      LOOP  6E79    ┘
4B70:6E81 1E       PUSH  DS
4B70:6E82 50       PUSH  AX
4B70:6E83 B83658     MOV  AX,5836
4B70:6E86 8ED8      MOV  DS,AX
4B70:6E88 C606F32500   MOV  Byte Ptr [25F3],00
4B70:6E8D 90       NOP
4B70:6E8E 58       POP  AX
4B70:6E8F 1F       POP  DS
4B70:6E90 3D7C45     CMP  AX,457C
4B70:6E93 7403      JZ   6E98
4B70:6E95 E95BFF     JMP  6DF3
和第一代的保护法完全相同 ,怎么去解他呢?? 请参考前例
弟附上 CRCEDIT.EXE 二代给您用用,当您执行时请先将原版磁盘 A 放入

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!