精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>汇编语言>>各种教程>>解密教程>>解秘教程5

主题:解秘教程5
发信人: shangbings()
整理人: cobe(2001-08-06 13:03:58), 站内信件
第五章 保护法
5-1 无缝锁介绍
  方法 : 因为一个磁道无法容纳 N=6 ,所以会格式化出坏道(BAD CRC)      同时利用软驱无法正确写入索引孔附近数据,因此拷贝卡等硬件拷被工具也无法拷贝,但如果仍要读该道时,磁盘就会顺便将索引孔的数据读出,只要比对其数据即可知是否原版。
  流程 :      ┌━━━━━━━━┐
           ┃ Reset Driver ┃
           └━━━┬━━━━┘
           ┌━━━┴━━━━┐
           ┃ Read a Track ┃
           └━━━┬━━━━┘
           ┌━━━┴━━━━┐ 不是 →
           ┃ 比对是否坏道 ├━━━━━━┐
           └━━━┬━━━━┘      ┃
               ┃ 是         ┃
           ┌━━━┴━━━━┐ 非预设数据 ┃
           ┃  比对数据区  ├━━━━━━┤
           └━━━┬━━━━┘    → ├━━━━━━━┐
           ┌━━━┴━━━━┐      ┃  失败结束  ┃
           ┃  成功的执行  ┃      └━━━━━━━┘
           └━━━━━━━━┘
  [[[ FORMAT A磁盘第29h道,第零面,第1个扇区 ]]]
   ***** FORMAT UTILITY *****
       MOV AX,0000 ; 重置磁盘
       INT 13    ;
       MOV AX,0501  ;
       MOV BX,200  ; FORMAT 参数
       MOV CX,2901  ; 请查 DOS 手册
       MOV DX,0000  ;
       INT 13
       JB 'FORMAT ERROR'
       JMP 'FORMAT COMPLETE'
    ES:200 29 01 01 06  (ID 栏值,请看第二集)
   ***** TRACK DATA *****
       MOV AX,0000
       INT 13
       MOV BX,0000   ; ┐
       MOV DS,BX    ; ┃ 磁盘参数表,放在 0000:0525
       MOV BX,0525   ; ┘
       MOV AL,06    ; N=6
       MOV [BX],AL   ; 将 0000:0525 磁盘参数改为可读 N=6 的扇区
       MOV AX,0201   ; ┐
       MOV BX,300    ; ┃ 读取 29h 道,第 0 面,第一号扇区
       MOV CX,2901   ; ┃ 读到的数据放到 ES:BX
       MOV DX,0000   ; ┃ 请查 DOS 手册
       INT 13      ; ┘
       CMP AL,10    ;  是否 BAD CRC
       JZ 'TEST OK'  ;  如果是则跳越到比对数据
       JMP 'ERROR'
     由于 N=6 已超过一个扇区所能容纳的范围,因此变成 BAD CRC
     AL 的返回代码请参考 DOS 技术手册。

5-2 雷射保护
     方法 : 将磁盘上某一道用雷射将之破坏,使得该道原磁盘特性全毁        雷射准确性高,可100%破坏特定道,而一般使用者不会有雷射,也不会花钱买,而造成无法拷贝。
     流程 :
            ┌━━━━━━━━━━━┐
            ┃ 格式化该磁道(Format) ├━━┐ 格式化失败
            └━━━━━┬━━━━━┘  ┃
              ┌━━━┴━━━━┐   ┃
              ┃ 写入该道数据 ├━━━┤ 写保护
              └━━━┬━━━━┘   ┃ 或写入失败
              ┌━━━┴━━━━┐   ┃
              ┃ 读取该道数据 ┃   ┃
              └━━━┬━━━━┘   ┃
            ┌━━━━━┴━━━━━━━┐┃
            ┃ 比对是否与写入数据相同 ├┤ 完全相同
            └━━━━━┬━━━━━━━┘┃
              ┌━━━┴━━━┐  ┌━┴━┐
              ┃  Test OK  ┃  ┃ 失败 ┃
              └━━━━━━━┘  └━━━┘
      ***** TEST PROGRAM *****
          MOV AX,0000
          INT 13
          MOV AX,0509   ;
          MOV BX,0200   ;
          MOV CX,XXXX   ; Format a Track
          MOV DX,XX00   ;
          INT 13     ;
          JB 'ERROR'
          MOV AX,0201   ;
          MOV BX,0200   ;
          MOV CX,XXXX   ; Read a Track
          MOV DX,XX00   ;
          INT 13     ;
          JNB 'ERROR'
          JMP 'Compare DATA'

5-3 Weak Bits
   方法 : 使用微弱的写入信号,造成磁盘上有介于0与1之间的讯号      软驱每次读取时会读到不同数据,一般软驱无法写入介于0与1的讯号,只能利用写入时突然 Reset 造成 Weak Bit ,旦准确度不高,只能靠外来硬件拷贝程序(拷贝卡)
   流程 :
        ┌━━━━━━━━━━┐
        ┃ 读取该道放入"A"区 ┃
        └━━━━┬━━━━━┘
        ┌━━━━┴━━━━━┐
        ┃ 再读一次放入"B"区 ┃
        └━━━━┬━━━━━┘
        ┌━━━━┴━━━━━┐
        ┃ 比对"A"与"B"的数据 ├━┐
        └━━━━┬━━━━━┘ ┃ 数据完全相同
             ┃       ┃┌━━━┐
           ┌━┴━━┐    └┤ 失败 ┃
           ┃ 成功 ┃     └━━━┘
           └━━━━┘
      ***** Weak Bit Test *****
        MOV AX,0000
        INT 13
        MOV AX,0201    ┐
        MOV BX,0200    ┃
        MOV CX,0000    ┃ 读数据到 ES:200
        MOV DX,0000    ┃
        INT 13      ┘
        MOV AX,0000
        INT 13
        MOV AX,0201    ┐
        MOV BX,0400    ┃
        MOV CX,0000    ┃ 读数据到 ES:400
        MOV DX,0000    ┃
        INT 13      ┘
    LOOP:  MOV BX,200      ┐
        MOV AL,ES:[BX]    ┃ 比对是否相同
        CMP AL,ES:[BX+200]  ┃ 若相同则 LOOP
        JZ LOOP       ┘
        CMP BX,3FF      ┐ 是否比对完毕
        JZ 'ERROR'     ┘
        JMP 'TEST OK'    ; TEST OK
   以上的保护都是从软件上抄下的,将之简化后登出,不过上述例子都是使用   磁盘 I/O (INT 13h) 方式读取保护,因此很容易被拦截而解密,所以最好的方法就是将 ROM (BIOS) SAVE 到程序内,如果须要使用到 INT 13h 时,就调用自己程序内的 BIOS ,这样就没有问题了,但是由于 ROM 有 32K ,请自行抓出可用的程序,摆在自己程序内,这样就算有XX写保护程序也不能防止被写入数据,但由于此方法必需考虑程序是否过大、版权问题,所以少有人用之,例如目前市面常见的 SoftGard 2.00~3.01 都是自己写磁盘 I/O ,所以程序庞大,因此将其功能分成三个小文件,分别工作之。
   SoftGard 3.00 保护简介 :
    被 SoftGard 保护住的磁盘有两个隐藏文件,分别为 CML0300.HCL 以及   VDF0300.VDF。首先由一个主文件启动磁盘,经过自我检测程序,然后再把把 DEBUG 要 TRACE 用的 INT 0~INT 3 全部换成 SoftGard 所用的程序使得 DEBUG 等程序完全当掉,然后再读取 CML0300.HCL 将自己程序完全解码,使得SoftGard有正确程序可继续执行(防单步执行),然后将保护道数据与解码后的 VDF0300.VDF 数据比对,若正确的话就将原主文件解码,并还原各中断向量,然后执行该文件。
  对于该种保护的强度可能只有那些真正解过的人才知道了,但是不管保护如何强劲,都有其致命伤,就是不管何时都禁止按 Ctrl-Break ,因此如果你在 DEBUG 下执行原版的软件,那就在键入"G"后,连打 Ctrl-Break,因为就在它解开密码的那一点,就会将程序中断向量还原,然后执行其真正的程序,而因为它是最后一个步骤才还原中断向量,因此您可以中断其程序也就代表它正执行到保护与正确程序的交接点,就被你的快手中断掉了,此时记忆体只留下来真正的程序,再写回磁盘就解密了,说穿就是这么诈。由于笔者手上有一个类似被 SoftGard 保护的软件,相当强撼,将在下一集为您大略说明,想写一些防止被 TRACE 的保护,不能错过。


[关闭][返回]