和山论坛

 找回密码
 会员注册
查看: 1857|回复: 3
打印 上一主题 下一主题

最全的加密,解密基础教程

[复制链接]
跳转到指定楼层
楼主
发表于 2005-12-10 01:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基础教程 <BR>  <BR>  <BR>第一章 使用规则 <BR>1-1  前  言 <BR>  要学会解密之前 ,您必须了解什么是加密 ,如何加密 ,以及跟踪程序,这样对于解密就再也不是梦想 ,使用的工具只有 DEBUG.COM ,不过现在的程序一般都会检测有无载入 DEBUG ,若有则死机!! <BR>1-2 DEBUG 与文件 <BR>  学过 DEBUG 的人都知道以下的指令 : <BR>    T      --- 单步执行 ,一次执行一个指令 <BR>    G <Address> --- 执行到 <Address> 就停下来 <BR>    G      --- 执行完载入的程序 <BR>或 "W 用) <BR>    L      --- 载入文件(LOAD) <BR>    W      --- 写入文件(SAVE) <BR>    W      --- 写入文件(SAVE) <BR>  大部份解密过程只用到上列指令..... <BR>  ================================================== <BR>  文件分为.COM 与.EXE ,因为.COM 最大只能有 64K 所以演生出.EXE 文件。但是.EXE又有个文件头 ,记录文件放在那儿所以 DEBUG 无法写回此种文件 ,而产生错误信息。 <BR>  ※因此EXE文件必须用 PCTOOLS 将指令码找出来改.... <BR>  <BR>第二章 磁盘格式与保护 <BR>2-1 磁盘格式 <BR>  大多数人认为磁盘只有分几道、两面而已 ,其实又细分了更多的东西2D 的磁盘有 39 道 ,2HD 的磁盘有 80 道 ,每一道又分为9个扇区 ,每个扇区又再分 512 个位元组 ,因此要做保护只要和正常道不同即可。 <BR>  (PS: DOS2.0每道8个扇区 ,DOS3.1以上版本才是9个扇区) <BR>  磁道(TRACK) : 磁盘上分成数个同心圆环 ,便称磁道 <BR>   面(Head) : 软盘分为 0/1 面 ,但硬盘可能超过此数字 <BR> 扇区(SECTOR) : 磁道上储存数据区域之一 <BR>     N 值 : 扇区大小 ,正常为2 (N=1 256Bytes ,N=2 512Bytes) <BR>         2的N次方乘以256,即为该扇区的大小 <BR>         2的N次方乘以256,即为该扇区的大小 <BR>  因此正常的磁道 ID 栏应该为 : <BR>     T  H  S  N <BR>  1   02 00 01 02 10.4%    这是第二道第零面的状况 <BR>2   02 00 02 02 10.4%    "% 代表这扇区占该道的 <BR>  3   02 00 03 02 10.4%    百分比 ,每次皆会有少许 <BR>  4   02 00 04 02 10.4%    差异。 <BR>  5   02 00 05 02 10.4% <BR>  6   02 00 06 02 10.4% <BR>  7   02 00 07 02 10.4% <BR>  8   02 00 08 02 10.4% <BR>  9   02 00 09 02 13.7% <BR> ---------------------------- <BR>  若 N=3 则必需有 17.8% 以上的空间才能制造出正常磁道 ,不然都会造出坏道(CRC ERROR) ,所以该道只能有 5 个扇区 ,否则就变成坏道。这是因磁盘控制卡之故 ,无法要求小又好(NO ERROR)的扇区。 <BR>  <BR>2-2 保护的种类与介绍 <BR>  空白扇区  : 该道不具扇区 ,也就是某一道不做 FORMAT ,这样当读写 <BR>         这个磁道就会造成错误 ,但只能防标准的 DISKCOPY 的 <BR>         拷贝程序 ,是早期的保护方式 『如 疯狂大家乐』 <BR>  非标准扇区 : 就是乱改 T H S N 值 ,变成与正常道不同 ,早期的保护 <BR>         也是利用此法 『如 卡诺夫将 S 值乱改』 <BR>异常大小的扇区 : 占该磁道大小百分比异常 『如 快打砖块』 <BR>   隐藏扇区 : 用 ID 栏错误法 ,使得该扇区必须要用 READ ID 法才能 <BR>         找到该扇区 ,所以可骗过早期的 COPYWRIT or COPYIIPC <BR>         『如 名车大赛』 <BR> 增加额外扇区 : 让某一道扇区超过正常数目 『如 名车二代』 <BR>         磁盘控制卡若能制造出 20h 个扇区就算不错了,但有些却 <BR>         制造甚多个使之无法用软件拷贝 『如 图腾抓图软件』 <BR>   虚拟扇区 : 又名 WEAK BIT ,就是将数据写入时以介于 0 与 1 的磁性 <BR>         写入 ,于是读出来的数据每次都不一样 ,正常软驱无法 <BR>         做出(碰运气可作出,但百分比越大越难做出) ,只能靠外来 <BR>         硬件做拷贝 『如 冲破火网』 <BR>     长道 : 利用转速慢的软驱写入 ,这样写入的数据比较多 ,除非 <BR>         拷贝的软驱转速相同 ,不然拷不下(拷贝卡也无法) <BR>    无缝锁 : 利用 N 值为 6 的扇区 ,因为超过该道所能容纳的空间 , <BR>         所以当您读取该扇区时就会顺便将头尾的数据读出 ,任何 <BR>         软驱都无法处理该区 ,造成不能被拷贝 ,因此市面使用 <BR>         此保护者 ,每片都不一样保护道数据 ,不可能拷贝 ,同时 <BR>         该法会挑软驱 ,故少人用之 『如 风云麻将』 <BR>   额外磁道 : 正常磁盘假如有 39 道 ,但可读写的还有 40 41 道 ,因 <BR>         此有人就在该道做手脚 ,然后以正常方式读写该道 <BR>         『例如 冲风飞车』 <BR>  <BR>2-3 非正常扇区的保护范例 <BR>   FORMAT 磁道的程序        验证该道 <BR> CS:100 MOV AX,0000 \ 重置磁盘   CS:100 MOV AX,0000 \ 重置磁盘 <BR>     INT 13   / 读写前的准备     INT 13   / 读写前的准备 <BR>     MOV AX,0501 - FORMAT 1个扇区    MOV AX,0201 - 读一个扇区 <BR>     MOV BX,0200 - ID 数据放在 ES:BX  MOV BX,0200 - 将数据放在 ES:BX <BR>     MOV CX,2901 - 29h道        MOV CX,29FF - 第29h道,FFh扇区 <BR>     MOV DX,0001 - 零面,B软驱     MOV DX,0001 - 零面,B软驱 <BR>     INT 13   - 起动磁盘 I/O     INT 13   - 磁盘 I/O 起动 <BR>     JB 0100  - 失败再重作      JB TEST ERROR 无特殊道 <BR>     INT 20   - 结束程序       JMP TEST OK  有特殊道 <BR> ES:200 DB 29 00 FF 02 (ID栏数据) <BR>  上例利用到额外扇区 ,DOS 只用到 27h道,而该程序用到 29h道,于是不怕有人 FORMAT 该磁盘 ,因为 FORMAT 不会洗到该道数据 。在29h 道制造一个编号为 FFh 的扇区 ,所以就算能拷到该道 ,也可防一般拷贝软件 ,能防 COPYIIPC(因只拷到28h道) ,但仍不能防 COPYWRIT。 <BR>  <BR>第三章 磁盘控制卡的认识 <BR>3-1 磁碟控制卡的介绍 <BR>  <BR>  磁碟控制卡上的 uPD765A 是整个磁碟作业的核心 ,而 uPD765A 靠著3个I/O 埠的暂存器与 CPU 沟通 ,这三个暂存器如下 : <BR>    &amp;h3F2 : 数位输出暂存器 <BR>    &amp;h3F4 : 主状态暂存器 <BR>    &amp;h3F5 : 资料/状态 暂存器 <BR>  资料传输到磁片时 ,又可分为 DMA 与 非DMA 模式 ,由於与主题无关略过。 <BR>  uPD765A 磁碟控制卡可下达以下指令 : <BR>    ┌━━━━━━━━━━━━━━━━━━━━━━━━━━┐ <BR>    ┃ Read Data (读取资料)                ┃ <BR>    ┃ Write Data (写入资料)               ┃ <BR>    ┃ Read ID (读取 ID)                 ┃ <BR>    ┃ Format A Track (将磁轨格式化)           ┃ <BR>    ┃ Read Deleted Dtat (读取已删除的资料)        ┃ <BR>    ┃ Write Delete Data (写入已删除的资料)        ┃ <BR>    ┃ Read A Track (读取磁轨)              ┃ <BR>    ┃ Seek (找寻磁轨)                  ┃ <BR>    ┃ Scan EQUAL (扫瞄比对相等)             ┃ <BR>    ┃ Scan high or equal (扫瞄大於或等於)        ┃ <BR>    ┃ Scan low or equal (扫瞄小於或等於)        ┃ <BR>    ┃ Recalibrate (校准磁头 ,磁头回到第零轨)       ┃ <BR>    ┃ Sense Interrupt status (感测中断状态)       ┃ <BR>    ┃ Sense Driver Status (感测磁碟机状态)        ┃ <BR>    ┃ Specify (指定)                   ┃ <BR>    └━━━━━━━━━━━━━━━━━━━━━━━━━━┘ <BR>  <BR>3-2 工作方式 <BR>  <BR>             ┌━━━━━┐ <BR>             ┃ CPU ┃ <BR>             └━━━━━┘ <BR>                ↑ <BR>                ↓ <BR>           系统汇流排 (SYSTEM BUS)              <BR>    ↑         ↑ <BR>    ↓         ↓     资料窗  ┌━━━┐ <BR> ┌━━━━━┐ DRQ ┌━━━━━┐←━━━━━┤ RLL ├┬━ ┬━━┐ <BR> ┃     ┃←━ ┃     ┃  RD DATA └━━━┘┃  ┃ 磁 ┃ <BR> ┃     ┃   ┃     ┃←━━━━━━━━━━┘  ┃ 碟 ┃ <BR> ┃  8237  ┃DACK ┃ uPD765A ┃━━━━━━━━━━━━→ ┃ 机 ┃ <BR> ┃     ┃━→ ┃     ┃  WR DATA         ┃ 介 ┃ <BR> ┃DMA 控制器┃   ┃  FDC  ┃  输入控制         ┃ 面 ┃ <BR> ┃     ┃   ┃     ┃            → ┃ ⊙ ┃ <BR> ┃     ┃━→ ┃     ┃            → ┴━━┘ <BR> └━━━━━┘ TC └━━━━━┘  输出控制 <BR>        终结计数 <BR>3-3 中断简介 <BR>  由于汇编高手甚多 ,因此各中断向量便不再介绍 ,只介绍几个与磁盘有关的功能 ,其它中断请自行查书。 <BR>      INT 13h   <BR>             <BR>      (AH)=0 : 重置软驱 ,将磁头拉到 TRACK 0 <BR>      (AH)=1 : 读入磁盘状态 <BR>      (AH)=2 : 将指定扇区读入记忆体 <BR>      (AH)=3 : 将记忆体数据写入扇区 <BR>      (AH)=4 : 查验扇区 <BR>      (AH)=5 : 格式化指定扇区 <BR>      返回代码 (AH or AL 值,以二进位来看) <BR>      00000001 传给软驱 I/O 指令不正确 <BR>      00000010 找不到位址标记 <BR>      00000011 磁盘贴有写保护 <BR>      00000100 找不到指定扇区 <BR>      00001000 DMA 越界 <BR>      00001001 超过DMA边界(有64K)处存取数据 <BR>      00010000 CRC 错误 <BR>      00100000 软驱控制卡损坏 <BR>      01000000 Seek 动作错误 <BR>      10000000 时间超过而软驱仍未动作 <BR>             <BR>      INT 1Eh   <BR>             <BR>      INT 1E 指向的位址就是磁盘参数表 ,一般指向 0000:522-52C <BR>     0000:0522 DF 步进速率 <BR>     0000:0523 02 表 DMA 传输数据 <BR>     0000:0524 25 马达起动时等待 25ms <BR>     0000:0525 02 N值为2 (512Bytes) <BR>     0000:0526 09 可容许最大扇区编 <BR>     0000:0527 2A 间隙(Gap)长度 <BR>     0000:0528 FF 扇区数据长 <BR>     0000:0529 50 格式化时的间隙长度 <BR>     0000:052A F6 填入空白扇区的位元值 <BR>     0000:052B 0F 移动每一道后等待25ms再读写数据 <BR>     0000:052C 02 马达起动时间 <BR>  <BR>第四章 程序跟踪的动作 <BR>4-1 DEBUG 的跟踪程序功能 <BR>  在汇编指令中有数百个指令,程序中又有数以万计的指令,到底那里才是保护的所在地呢,这就要牵扯到 DEBUG 的 TRACE 的功能了。 <BR>  DEBUG 较常用的指令有 : <BR>  "N     = 定义程序名称 <BR>  "L     = 根据定义的文件名作 LOAD 文件 <BR>  "W     = 根据定义的文件名作 SAVE 文件 <BR>  "U     = 列出程序 (相当于 LIST) <BR>  "T     = 执行一个指令码,遇到 CALL 则跳到内部继续执行 <BR>  "P     = 执行到下一行,遇到 CALL 时则执行完那个 CALL <BR>  "G     = 执行程序,又可分成下列几种 <BR>          "G=<Address> 不管现在执行到那,直接跳到<Address> <BR>                  继续执行(不常用) <BR>          "G <Address> 从现在的地方执行到<Address> 后停下来 <BR>          "G      从现在的地方执行到结束为止 <BR>  <BR>4-2 汇编指令简介 <BR>  MOV AA,BB  将 BB 放到 AA 里 <BR>  CALL     调用子程序 (相当于 BASIC 的 GOSUB) <BR>  RET 与 RETF 返回程序  (相当于 BASIC 的 RETURN) <BR>  CMP XX,YY  比较 XX 与 YY <BR>  JZ      若相等则转移 <BR>  JNZ     若不相等则转移 <BR>  JB      若小于则转移 <BR>  JG      若大于则转移 <BR>  JMP     无条件转移 <BR>  J???     (各种转移指令) <BR>  LOOP     循环 <BR>  INT XX    类似 CALL 的中断涵数 <BR>  以后凡是遇到上述指令都停下来查看一下 ,即键入 G&lt;该行号&gt; <BR>  兹举例如下(随压缩文件内附文件) : <BR>   CW.EXE (唯我读尊执行文件) <BR>  A&gt;DEBUG <BR> -N CW.EXE  请您随时键入 "U 键看看程序 <BR>  -L <BR>  -G 37 <BR>  -G 60    ┐ 一个循环,程序在此打转 <BR>  -T (JZ 6B)  ┃ 为了能继续执行,因此最后一定会跳出此循环 <BR>  -G 71    ┃ 前面三个条件转移不管是否成立都跳不出此循环 <BR>  -T (JZ 7C)  ┃ 因此肯定它一定是在 CS:9C 不成立下跳出 <BR>  -G 8A    ┃ 所以我们可以键入 G 9E(CS:9C的下一行) <BR>  -T (JNZ 92) ┃ <BR>  -G 98    ┃ 如果没有把握只能用试的,或您时间多慢慢跟踪程序 <BR>  -G 9C    ┃ 个数圈以后也会跳出。 <BR>  -T (JZ 58)  ┘ <BR>  -G 9E (循环跳出后继续跟踪) <BR>  -G AD    ┐ <BR>或 "CS:C6 JZ DE 跳出 <BR> -G BB    ┃ 于是先假设是 CS:BB ,当您键入 "G CE 时程序执行了,可见 <BR>  -T     ┃ 假设错误,应该是由 CS:C6 跳出,于是再重新 LOAD , <BR>  -G C6    ┃ 前面已 TRACE 过,故直接键入 G37、T、GFE、T <BR>  -T     ┘ (因为 RETF 与 IRET、JMP FAR、CALL FAR 指令会改变 CS  <BR>,如 "CS:37 的 RETF , <BR>         "CS:FE 的 JMP FAR  <BR>  -G DE (循环跳出后继续跟踪) <BR>  -G FE <BR>  -T <BR>  -G 483 <BR>  -T <BR> -G 495 \ 从 495 到 4A9 中间有个 "CALL ,当您执行完此 CALL 竟 <BR> -T   - "问你密码 ... 表示如杀掉此 CALL 则不会再问你密码了 <BR>  -G 4A9 / 但以下程序仍稍追一断试试。 <BR>  -T (JNZ 4AE) --&gt; 如果你密码输入正确,则会转移,若错误就不跳,因此 <BR>           你必须将它改为无条件转移 (JMP) <BR>  -于是将此两位置 ASCII 码抄下后用 PCTOOLS(Find) 修改后执行看看结果执行无误 ,此文件以后就不再须要输入密码了 ! <BR>   PS : 1. 在解的过程中一定要拿支笔来记下已追到那儿了 !! <BR>     2. CW.EXE 必须再配合其它文件才能执行此 Game ,因文件过大       所以未全部压进此文件。
沙发
 楼主| 发表于 2005-12-10 01:27 | 只看该作者
第五章 保护法 <BR>5-1 无缝锁介绍 <BR>  方法 : 因为一个磁道无法容纳 N=6 ,所以会格式化出坏道(BAD CRC)      同时利用软驱无法正确写入索引孔附近数据,因此拷贝卡等硬件拷被工具也无法拷贝,但如果仍要读该道时,磁盘就会顺便将索引孔的数据读出,只要比对其数据即可知是否原版。 <BR>  流程 :      ┌━━━━━━━━┐ <BR>           ┃ Reset Driver ┃ <BR>           └━━━┬━━━━┘ <BR>           ┌━━━┴━━━━┐ <BR>           ┃ Read a Track ┃ <BR>           └━━━┬━━━━┘ <BR>           ┌━━━┴━━━━┐ 不是 → <BR>           ┃ 比对是否坏道 ├━━━━━━┐ <BR>           └━━━┬━━━━┘      ┃ <BR>               ┃ 是         ┃ <BR>           ┌━━━┴━━━━┐ 非预设数据 ┃ <BR>           ┃  比对数据区  ├━━━━━━┤ <BR>           └━━━┬━━━━┘    → ├━━━━━━━┐ <BR>           ┌━━━┴━━━━┐      ┃  失败结束  ┃ <BR>           ┃  成功的执行  ┃      └━━━━━━━┘ <BR>           └━━━━━━━━┘ <BR>  [[[ FORMAT A磁盘第29h道,第零面,第1个扇区 ]]] <BR>   ***** FORMAT UTILITY ***** <BR>       MOV AX,0000 ; 重置磁盘 <BR>       INT 13    ; <BR>       MOV AX,0501  ; <BR>       MOV BX,200  ; FORMAT 参数 <BR>       MOV CX,2901  ; 请查 DOS 手册 <BR>       MOV DX,0000  ; <BR>       INT 13 <BR>       JB 'FORMAT ERROR' <BR>       JMP 'FORMAT COMPLETE' <BR>    ES:200 29 01 01 06  (ID 栏值,请看第二集) <BR>   ***** TRACK DATA ***** <BR>       MOV AX,0000 <BR>       INT 13 <BR>       MOV BX,0000   ; ┐ <BR>       MOV DS,BX    ; ┃ 磁盘参数表,放在 0000:0525 <BR>       MOV BX,0525   ; ┘ <BR>       MOV AL,06    ; N=6 <BR>       MOV [BX],AL   ; 将 0000:0525 磁盘参数改为可读 N=6 的扇区 <BR>       MOV AX,0201   ; ┐ <BR>       MOV BX,300    ; ┃ 读取 29h 道,第 0 面,第一号扇区 <BR>       MOV CX,2901   ; ┃ 读到的数据放到 ES:BX <BR>       MOV DX,0000   ; ┃ 请查 DOS 手册 <BR>       INT 13      ; ┘ <BR>       CMP AL,10    ;  是否 BAD CRC <BR>       JZ 'TEST OK'  ;  如果是则跳越到比对数据 <BR>       JMP 'ERROR' <BR>     由于 N=6 已超过一个扇区所能容纳的范围,因此变成 BAD CRC <BR>     AL 的返回代码请参考 DOS 技术手册。 <BR>  <BR>5-2 雷射保护 <BR>     方法 : 将磁盘上某一道用雷射将之破坏,使得该道原磁盘特性全毁        雷射准确性高,可100%破坏特定道,而一般使用者不会有雷射,也不会花钱买,而造成无法拷贝。 <BR>     流程 : <BR>            ┌━━━━━━━━━━━┐ <BR>            ┃ 格式化该磁道(Format) ├━━┐ 格式化失败 <BR>            └━━━━━┬━━━━━┘  ┃ <BR>              ┌━━━┴━━━━┐   ┃ <BR>              ┃ 写入该道数据 ├━━━┤ 写保护 <BR>              └━━━┬━━━━┘   ┃ 或写入失败 <BR>              ┌━━━┴━━━━┐   ┃ <BR>              ┃ 读取该道数据 ┃   ┃ <BR>              └━━━┬━━━━┘   ┃ <BR>            ┌━━━━━┴━━━━━━━┐┃ <BR>            ┃ 比对是否与写入数据相同 ├┤ 完全相同 <BR>            └━━━━━┬━━━━━━━┘┃ <BR>              ┌━━━┴━━━┐  ┌━┴━┐ <BR>              ┃  Test OK  ┃  ┃ 失败 ┃ <BR>              └━━━━━━━┘  └━━━┘ <BR>      ***** TEST PROGRAM ***** <BR>          MOV AX,0000 <BR>          INT 13 <BR>          MOV AX,0509   ; <BR>          MOV BX,0200   ; <BR>          MOV CX,XXXX   ; Format a Track <BR>          MOV DX,XX00   ; <BR>          INT 13     ; <BR>          JB 'ERROR' <BR>          MOV AX,0201   ; <BR>          MOV BX,0200   ; <BR>          MOV CX,XXXX   ; Read a Track <BR>          MOV DX,XX00   ; <BR>          INT 13     ; <BR>          JNB 'ERROR' <BR>          JMP 'Compare DATA' <BR>  <BR>5-3 Weak Bits <BR>   方法 : 使用微弱的写入信号,造成磁盘上有介于0与1之间的讯号      软驱每次读取时会读到不同数据,一般软驱无法写入介于0与1的讯号,只能利用写入时突然 Reset 造成 Weak Bit ,旦准确度不高,只能靠外来硬件拷贝程序(拷贝卡) <BR>   流程 : <BR>        ┌━━━━━━━━━━┐ <BR>       ┃ 读取该道放入"A区 ┃ <BR>        └━━━━┬━━━━━┘ <BR>        ┌━━━━┴━━━━━┐ <BR>       ┃ 再读一次放入"B区 ┃ <BR>        └━━━━┬━━━━━┘ <BR>        ┌━━━━┴━━━━━┐ <BR>"B的数据 ├━┐ <BR>        └━━━━┬━━━━━┘ ┃ 数据完全相同 <BR>             ┃       ┃┌━━━┐ <BR>           ┌━┴━━┐    └┤ 失败 ┃ <BR>           ┃ 成功 ┃     └━━━┘ <BR>           └━━━━┘ <BR>      ***** Weak Bit Test ***** <BR>        MOV AX,0000 <BR>        INT 13 <BR>        MOV AX,0201    ┐ <BR>        MOV BX,0200    ┃ <BR>        MOV CX,0000    ┃ 读数据到 ES:200 <BR>        MOV DX,0000    ┃ <BR>        INT 13      ┘ <BR>        MOV AX,0000 <BR>        INT 13 <BR>        MOV AX,0201    ┐ <BR>        MOV BX,0400    ┃ <BR>        MOV CX,0000    ┃ 读数据到 ES:400 <BR>        MOV DX,0000    ┃ <BR>        INT 13      ┘ <BR>    LOOP:  MOV BX,200      ┐ <BR>        MOV AL,ES:[BX]    ┃ 比对是否相同 <BR>        CMP AL,ES:[BX+200]  ┃ 若相同则 LOOP <BR>        JZ LOOP       ┘ <BR>        CMP BX,3FF      ┐ 是否比对完毕 <BR>        JZ 'ERROR'     ┘ <BR>        JMP 'TEST OK'    ; TEST OK <BR>   以上的保护都是从软件上抄下的,将之简化后登出,不过上述例子都是使用   磁盘 I/O (INT 13h) 方式读取保护,因此很容易被拦截而解密,所以最好的方法就是将 ROM (BIOS) SAVE 到程序内,如果须要使用到 INT 13h 时,就调用自己程序内的 BIOS ,这样就没有问题了,但是由于 ROM 有 32K ,请自行抓出可用的程序,摆在自己程序内,这样就算有XX写保护程序也不能防止被写入数据,但由于此方法必需考虑程序是否过大、版权问题,所以少有人用之,例如目前市面常见的 SoftGard 2.00~3.01 都是自己写磁盘 I/O ,所以程序庞大,因此将其功能分成三个小文件,分别工作之。 <BR>   SoftGard 3.00 保护简介 : <BR>    被 SoftGard 保护住的磁盘有两个隐藏文件,分别为 CML0300.HCL 以及   VDF0300.VDF。首先由一个主文件启动磁盘,经过自我检测程序,然后再把把 DEBUG 要 TRACE 用的 INT 0~INT 3 全部换成 SoftGard 所用的程序使得 DEBUG 等程序完全当掉,然后再读取 CML0300.HCL 将自己程序完全解码,使得SoftGard有正确程序可继续执行(防单步执行),然后将保护道数据与解码后的 VDF0300.VDF 数据比对,若正确的话就将原主文件解码,并还原各中断向量,然后执行该文件。 <BR> 对于该种保护的强度可能只有那些真正解过的人才知道了,但是不管保护如何强劲,都有其致命伤,就是不管何时都禁止按 Ctrl-Break ,因此如果你在 DEBUG 下执行原版的软件,那就在键入"G后,连打 Ctrl-Break,因为就在它解开密码的那一点,就会将程序中断向量还原,然后执行其真正的程序,而因为它是最后一个步骤才还原中断向量,因此您可以中断其程序也就代表它正执行到保护与正确程序的交接点,就被你的快手中断掉了,此时记忆体只留下来真正的程序,再写回磁盘就解密了,说穿就是这么诈。由于笔者手上有一个类似被 SoftGard 保护的软件,相当强撼,将在下一集为您大略说明,想写一些防止被 TRACE 的保护,不能错过。
板凳
 楼主| 发表于 2005-12-10 01:28 | 只看该作者
第六章 某种超级锁 <BR>6-1 四川省某文件  <BR>-R <BR>AX=0000 BX=0000 CX=786E DX=0000 SP=01FE BP=0000 SI=0000 DI=0000 <BR>DS=4B37 ES=4B37 SS=5267 CS=5267 IP=05B1  NV UP EI PL NZ NA PO NC <BR>-U CS:05B1 CS:05EB <BR>5267:05B1 5D       POP  BP      ┐ <BR>5267:05B2 8C46CF     MOV  [BP-31],ES  ┃ 将程序码从头加至尾 <BR>5267:05B5 8746CD     XCHG  AX,[BP-33]  ┃ <BR>5267:05B8 59       POP  CX      ┃ 因为任何的单步执行 <BR>5267:05B9 03467F     ADD  AX,[BP+7F]  ┃ 都会更改程序码[CC] <BR>5267:05BC 45       INC  BP      ┃ 加完正确值是 F6E2h <BR>5267:05BD E2FA      LOOP  05B9     ┘ 将之放到 AX 暂存器 <BR>5267:05BF FA       CLI         ┐ <BR>5267:05C0 5C       POP  SP      ┃ 从 SS:216-20A 抓数据替换 <BR>5267:05C1 1F       POP  DS      ┃ INT0-3的数据 ,如途中有单 <BR>5267:05C2 59       POP  CX      ┃ 步执行 ,就更改其SS:20A值 <BR>5267:05C3 5B       POP  BX      ┃ 这是因为当 INT0 被改后 , <BR>5267:05C4 8CCA      MOV  DX,CS    ┃ 任何单步执行一旦用到INT3 <BR>5267:05C6 870F      XCHG  CX,[BX]   ┃ 同时也会动到 INT0 ,跟著 <BR>5267:05C8 875702     XCHG  DX,[BX+02]  ┃ 利用此将SS:20C的0C改掉 , <BR>5267:05CB 52       PUSH  DX      ┃ 造成无限循环 ,正常绕三圈 <BR>5267:05CC 51       PUSH  CX      ┃ 后会跳到 INT3 那行 <BR>5267:05CD 83EC04     SUB  SP,+04    ┃ <BR>5267:05D0 83FB0C     CMP  BX,+0C    ┃ <BR>5267:05D3 75ED      JNZ  05C2     ┘ <BR>5267:05D5 CC       INT  3      ━ 直接用将AX与自己数据解码 <BR>5267:05D6 FC       CLD             ┐ <BR>5267:05D7 8FF7      POP  DI          ┃ <BR>5267:05D9 71B4      JNO  058F         ┃ 保护检查程序 <BR>5267:05DB 8103142A    ADD  Word Ptr [BP+DI],2A14┃ <BR>5267:05DF E6EC      OUT  EC,AL        ┃ (不用 INT13h 而 <BR>5267:05E1 52       PUSH  DX          ┃ 直接使用自己的 <BR>5267:05E2 0830      OR   [BX+SI],DH      ┃ 磁盘 I/O ) <BR>5267:05E4 031A      ADD  BX,[BP+SI]      ┃ <BR>5267:05E6 BAB467     MOV  DX,67B4       ┃ <BR>5267:05E9 9F       LAHF            ┃ <BR>5267:05EA 5A       POP  DX          ↓ <BR>5267:05EB F4       HLT <BR>-D SS:220 <BR>5267:0200 40 04 10 02 00 02 00 00-00 01 98 05 0C 00 16 02 @............... <BR>5267:0210 00 00 03 04 04 00 A0 11-48 11 21 C1 1C 30 9A 6B ...... .H.!A.0.k <BR>5267:0220 5C E4 6D 8C D7 F0 EF FF-A3 6D AA B3 24 58 53 45 \dm.Wpo.#m*3$XSE <BR>5267:0230 3F E2 C4 DD 56 ED C1 74-4A 7A D8 8B 77 50 6D 18 ?bD]VmAtJzX.wPm. <BR>5267:0240 1F 1F 54 08 3D B3 48 CC-56 31 F9 85 20 2B AF 9A ..T.=3HLV1y. +/. <BR>5267:0250 DC C2 5A CB F4 95 E1 E4-07 AC 66 8F 8C 4B 98 8F \BZKt.ad.,f..K.. <BR>5267:0260 30 64 19 1A 0C 82 18 C0-33 9F 25 43 42 9F 8D DC 0d.....@3.%CB..\ <BR>5267:0270 00 CC 93 8B DA C7 24 42-C1 88 3F 7C F3 B4 41 9E .L..ZG$BA.?|s4A. <BR> 说明 : 该程序一开始就计算程序码 ,如果您使用了单步执行的话 ,程序就会被 <BR>     夹上[CC]码 ,造成计算总值不对 ,然后再杀掉 INT0-INT3 防止 DEBUG <BR>     之类的程序跟踪 ,如您有单步执行一定会动到 INT0-INT3 ,而造成某个 <BR>     特殊旗标(SS:20C)被改掉。 <BR>        5267:05CD 83EC04     SUB  SP,+04 ┐ <BR>        5267:05D0 83FB0C     CMP  BX,+0C ┃ <BR>        5267:05D3 75ED      JNZ  05C2  ┘ <BR>     一次抓四个位元 ,比对是否有个 +0C 码,如果没有就继续 ,一但单步执 <BR>     行 ,这个 +0C 就会被改掉,造成无限循环(死机) ,最后就跳到下一行去 <BR>     执行INT3(CS:598) ,不做任何比对AX暂存器 ,直接就当做是程序解码用 <BR>     ,若暂存器数据正确则解码后的程序才是正确的 ,不然就无法预知后果 <BR>     解码后 ,开始使用解码后的程序(磁盘 I/O)数据比对 ,如程序正确就把 <BR>     真正的主程序解码和将自己的保护程序清除掉 ,防止被人看见程序解码 <BR>     后的重要数据 ,最后还原 INT0-INT3 执行该程序。 <BR>     换句话说 ,您可以在 DEBUG 下执行该程序 ,但不能单步执行 ,因此您 <BR>     可以在执行当中连打 Ctrl-Break ,当它还原主程序后 ,正好您也取到 <BR>     控制权 ,将它中断掉了 ,这时您可以去找 PSP 去看主程序在那里 ,将 <BR>     解密文件存回磁盘(假如功力够 ,但笔者功力不足 ,无法办到 )。 <BR>  <BR>6-2 Sega 公司的游戏 <BR>4B37:0100 B80000     MOV  AX,0000  ┐ <BR>4B37:0103 CD13      INT  13     ┃ 这是笔者写的一个读取 <BR>4B37:0105 B80102     MOV  AX,0201  ┃ 该保护道数据的程序 <BR>4B37:0108 BB0002     MOV  BX,0200  ┃ <BR>4B37:010B B90000     MOV  CX,0000  ┃ 读取第零道零面第零个 <BR>4B37:010E BA0000     MOV  DX,0000  ┃ 额外扇区。 <BR>4B37:0111 CD13      INT  13     ┃ <BR>4B37:0113 80FC10     CMP  AH,10   ┃ 其数据放到 ES:0200 <BR>4B37:0116 75E8      JNZ  0100    ┃ <BR>4B37:0118 CD20      INT  20     ┘ <BR>第一次读该道的数据如下 : <BR>4B37:0200 44 45 44 30 31 32 33 34-35 36 37 38 44 8A C8 E8 DED012345678D.Hh <BR>4B37:0210 08 C0 00 06 CE 44 23 40-00 38 D0 3C 38 1B 21 DE .@..ND#@.8P&lt;8.!^ <BR>4B37:0220 88 C0 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .@.............. <BR>4B37:0230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ <BR>4B37:0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ <BR>4B37:0250 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ <BR>4B37:0260 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ <BR>4B37:0270 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ <BR>第二次读该道的数据如下 : <BR>4B37:0200 44 45 44 30 31 32 33 34-35 36 37 38 44 EA 0A 0C DED012345678Dj.. <BR>4B37:0210 26 38 84 4D 9C 8C 46 C9-3D 1C 0D 02 AE D4 03 BD &amp;8.M..FI=....T.= <BR>4B37:0220 36 45 BD BD BD BD BD BD-BD BD BD BD BD BD BD BD 6E============== <BR>4B37:0230 BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD ================ <BR>4B37:0240 BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD ================ <BR>4B37:0250 BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD ================ <BR>4B37:0260 BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD ================ <BR>4B37:0270 BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD ================ <BR>除了标头的 "DED0123456789D 以外数据都不一样 ,原来这就是著名的 <BR> 保护 Weak-Bit ,这种保护无法用磁盘介面卡制造出(运气好可以做出) <BR> 但是由于该公司出版的游戏都用此法保护 ,并且使用到 INT13h 很容易 <BR> 被长驻程序骗过去。 <BR>笔者附上 CRCEDIT.ASM 供大家参"拷使用,可骗过该公司的游戏保护。 <BR> (该软件不得贩卖图利 ,使用后有任何后遗症 ,恕不负责)。 <BR>PS : 软件的保护是为了使软件作者的权益受到保护 ,手上有合法软件者 , <BR>   不要到处散播 ,因为国内软件刚起步 ,也希望大家合力去保护它 ,如 <BR>   您是一位写软件的作者 ,就可以感觉出希望大家购买合法软件的心情 <BR>   (笔者不出版软件) ,当您没有能力购买原版软件时 ,使用拷贝版有点 <BR>   愧对于良心 ,如您有能力购买正版软件 ,希望您早日购买 ,不但用的 <BR>   安心 ,也有助于软件更新版本 ,让大家有更好的软件与更多的软件作 <BR>   者头入国内软件市场。 <BR>          CRCEDIT.ASM : 常驻后 ,可以骗过该保护 ,制造出类似 <BR>                 Weak-Bit 的效果,该程序没有检测自己 <BR>                 是否载入过,故可能被载入两次以上。 <BR>                 (可以自己加减用 ,骗骗看好不好玩??) <BR>        
地板
 楼主| 发表于 2005-12-10 01:30 | 只看该作者
拷贝教程第八集 <BR>  <BR>    由于上次弟的软件失败后 ,急忙推出下集 ,所以显得比较简陋 ,请多包涵。 <BR>  原因是弟本来想写无缝锁程序 ,无耐该种软件只有360K DRIVER 能做出来, <BR>  于是弟又将作品抽回来 ,因此弟在此简介如何制作无缝锁吧 ! <BR>  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <BR>  FORMAT 的部份 : <BR>    先将磁盘 ID 设定好 ,然后 FORMAT 即可.... <BR>    有关于磁盘 ID 的部份 ,请参考前几集。 <BR>    FORMAT 就使用 INT 13h 即可 .... <BR>  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <BR>  读取数据部份 : <BR>  0000:0522 这个位址一般都是 02 ,代表扇区 N 值等于 2(512Bytes) <BR>  但是如果您将它改为 6 ,就能够读出该种扇区内的数据 (请参考第五集) <BR>  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <BR>  ※ 弟附上一个软件 ,是一个软件保护的实例 ,让各位练习使用。 <BR>  FORMAT.EXE 这是一个用来格式化您的磁盘片 ,在您执行这个软件前 ,请在 <BR>  软驱A放入一片您不要的磁盘 ,然后再执行这个软件 ,于是它会在第27h <BR>  (39道)的地方做一个额外扇区FFh的扇区 ,一般的拷贝程序无法拷贝该种特 <BR>  别的扇区(COPYWRIT、COPYIIPC 等强拷软件除外) ,于是可达到您的磁盘保 <BR>  护的目地 ,因此本程序只能当做一种在磁盘上做标记的程序。 <BR>  CHECK .EXE 这是用来简查磁盘有没有标记 ,然后判别出结果并显示之。 <BR>  换句话说 ,这是一套上保护的软件 ,但是防拷能力并不强 ,只要稍具拷贝能 <BR>  力的软件皆能拷下来 ,至于若希望软件不能被拷贝 ,似乎只能借助于外部硬 <BR>体才能办得到 ,因此弟只写了简单的程序。  <BR>  <BR>拷贝教程第九集 <BR>  <BR>  经过数天来苦心研究后 ,终于发现所写的无缝锁何以不能执行之 ,现在就 <BR>  展现在您的眼前 (我花了数天才研读出来..您只要看一遍就懂了)。 <BR>  在此为您解说一下磁盘参数吧 ,这个参数对于想玩磁盘保护的人绝对要学 <BR>  起来 ,因为懂了它就可以玩出一堆花样来.... <BR>  0000:0525h 02h ..... 磁盘的N值 ,用以设定目前读取的ID之N值。 <BR>  0000:0526h 12h ..... 每一道18个扇区 ,弟将它改为9,才能正确格式画磁盘。 <BR>  请您放一片磁盘(已格式划过的2HD磁盘)到A软驱 ,然后执行 FORN6.EXE <BR>  它就会帮你制造坏磁道(4Fh道第0面)。 <BR>  接着执行 SAVEN6.EXE ,它会把坏道存成文件 (DEMO.DAT) 。 <BR>  您可以试著看看每次格式划后的坏道数据都不一样 ,拷贝后亦不一样。 <BR>您可以用"TYPE DEMO.DAT看到坏道数据 ,这种保护是无法被覆制的。 <BR>  解说 (FORMAT-N6) : <BR>   ┌ 将磁盘参数每道有18(12h)个扇区(0000:0526h) ,改为每道有9个扇区 <BR>   ├ 然后格式划磁盘 <BR>   ├ 将磁盘参数改回正常 <BR>   └ 结束程序 <BR>  解说 (SAVE-N6) : <BR>   ┌ 将磁盘参数N值由2改为6 <BR>   ├ 读取最后一个扇区 ,放到 Buffers <BR>   ├ 将 Buffers 的数据存盘 (DEMO.DAT) <BR>   └ 结束程序 <BR>  解说磁盘格式 : <BR>    前几集我们曾经讨论过磁盘格式 ,但由于太精简 ,有些人可能一知半解 <BR>  所以重新再说明一次。 <BR>  所以重新再说明一次。 <BR>   2D : 每片有39个磁道 ,每个磁道又分为8个扇区(DOS2.0版本) <BR>                     9个扇区(DOS3.0以上版本) <BR>      但是一般360K软驱可以控制到41道 ,于是也有人多用此磁道 ,变成 <BR>      额外的磁道保护。 <BR>   2HD : 每片有79个磁道 ,每个磁道又分为18个扇区(DOS3.1以上版本) <BR>      但是一般1.2MB软驱可以控制到81道 ,于是也有人多用此磁道 ,变成 <BR>      额外的磁道保护。 <BR>  扇区 : 每个扇区又有分为 T.H.R.N ,就相当于是该扇区的目录一样 ,记录了 <BR>      T = 磁道 ,H = 面 , R = 第几号扇区 , N = 2 扇区有 200h Bytes <BR>      (N=3 400hBytes N=4 800hBytes N=5 1000hBytes N=6 2000hBytes) <BR>      这个目录总称 ID 。 <BR>  正常的一片 2D 磁盘 27h 道第0面的 ID 应该是 : <BR>      T. H. R. N. <BR>      27,00,01,02 ┐ <BR>      27,00,02,02 ┃ 这个目录(ID)就是这条 <BR>      27,00,03,02 ┃ 磁道的所有东西。 <BR>      27,00,04,02 ┃ <BR>      27,00,05,02 ┃ 每个扇区可放 512Bytes <BR>      27,00,06,02 ┃       (200h)Bytes <BR>      27,00,07,02 ┃ <BR>      27,00,08,02 ┃ <BR>      27,00,09,02 ┘ <BR>  或许你已发现了 ,这条磁道总容量是 1800h Bytes ,而如果 N=6 就有 2000h <BR>  Bytes ,于是当您读取这个磁道 ,就会读取超过该磁道的容量 ,将其磁道接缝 <BR>  处顺便读出来 ,而一般软驱无法处里此接缝 ,因此也就无法拷贝。 <BR>  接缝 : 磁盘上有一个索引孔 ,当软驱读到这个孔就会开始做读写工作 ,直 <BR>      到该工作做完为止 ,但是不可能整圈磁道全用完 ,于是造成将这未读 <BR>      写完的部份扇区(俗称接缝)。 <BR>      软驱的磁头在写入时 ,磁头都会加以磁化 ,但磁性物体不可能通电 <BR>      后马上有磁性 ,断电后马上没有磁性 ,由于这个剩磁 ,将接缝的数据 <BR>      变动到 (因为写完数据后磁头仍会在该道停留到遇到下一次索引孔为 <BR>      止),这个磁性绝对无法用软件加以控制 ,所以市面上也就没有东西可 <BR>      以拷贝它。 <BR>  <BR>拷贝教程第十集 <BR>  <BR>据说 KeyPro 保护是用某种专上此种保护的软件上的,所以应该大同小异。 <BR>某种以 KeyPro 保护的雷射印表软件 ,兹以原版与解密版说明之 : <BR>A&gt;DEBUG JM.EXE <BR>-u CS:C560 (原版) <BR>15C3:C560 9A0C003C23  CALL  233C:000C  ━使用INT17h将KeyPro数据读出 <BR>15C3:C565 2E      CS:         ┐ <BR>15C3:C566 01066901   ADD   [0169],AX  ┃ <BR>15C3:C56A D0E0     SHL   AL,1    ┃ <BR>15C3:C56C D0E0     SHL   AL,1    ┃ <BR>15C3:C56E D0E0     SHL   AL,1    ┃运算和数据比对 <BR>15C3:C570 D0E0     SHL   AL,1    ┃ <BR>15C3:C572 2E      CS:         ┃ <BR>15C3:C573 01066901   ADD   [0169],AX  ┃ <BR>15C3:C577 50      PUSH  AX     ┃ <BR>15C3:C578 59      POP   CX     ┃ <BR>15C3:C579 2E      CS:         ┃ <BR>15C3:C57A 2906038D   SUB   [8D03],AX  ┃ <BR>15C3:C57E 3C00     CMP   AL,00    ┃ <BR>15C3:C580 751E     JNZ   C5A0    ┘ <BR>15C3:C582 B402     MOV   AH,02 <BR>15C3:C584 9A0C003C23  CALL  233C:000C <BR>15C3:C589 8AE6     MOV   AH,DH <BR>15C3:C58B E89805    CALL  CB26 <BR>15C3:C58E A3F2CD    MOV   [CDF2],AX <BR>-u CS:C560 (解密版) <BR>15C3:C560 9A0C003C23  CALL  233C:000C ━ 读数据(读不到) <BR>15C3:C565 90      NOP          ┐ <BR>15C3:C566 31C0     XOR   AX,AX     ┃已知数据运算的 AX=0 <BR>15C3:C568 2E      CS:          ┃所以帮它运算。 <BR>15C3:C569 01066901   ADD   [0169],AX   ┘ <BR>15C3:C56D 90      NOP <BR>15C3:C56E 90      NOP <BR>15C3:C56F 90      NOP <BR>15C3:C570 90      NOP <BR>15C3:C571 90      NOP <BR>15C3:C572 2E      CS: <BR>15C3:C573 01066901   ADD   [0169],AX  ┐ <BR>15C3:C577 50      PUSH  AX     ┃ <BR>15C3:C578 59      POP   CX     ┃ 以下运算式因只用到 AX <BR>15C3:C579 2E      CS:         ┃ 故不修改其内容 <BR>15C3:C57A 2906038D   SUB   [8D03],AX  ┃ <BR>15C3:C57E 3C00     CMP   AL,00    ┃ <BR>15C3:C580 751E     JNZ   C5A0    ↓ <BR>15C3:C582 B402     MOV   AH,02 <BR>15C3:C584 9A0C003C23  CALL  233C:000C <BR>15C3:C589 8AE6     MOV   AH,DH <BR>15C3:C58B E89805    CALL  CB26 <BR>15C3:C58E A3F2CD    MOV   [CDF2],AX <BR>现在的软件保护,实在越来越厉害,实在可以这样说 : <BR>   解读不易,解密更难,所有保护,专攻DEBUG,防止破X <BR>======================================================================== <BR>由于时间关系,本篇稍嫌简陋,由于弟的功力有限,下回应该会更精彩一些。 <BR>拷贝教程到此算是暂时告一段落了 ,原因是题裁取得不易 ,软件防破能力太强 <BR>,因此对于开站的我已无多的时间慢慢 Debug ,只好告诉各位未来续出的时间可 <BR>能会每1-2个月出一次 ,也希望各位大爷忍耐一些 ,所以先告诉各位一些主意 , <BR>就是对于防拷不必花时间去解 ,只要您写个小程序即可解所有 Int13 的保护 , <BR>1. 拦截 INT13h ,对于来自非DOS调用的时后 ,即将所读到的数据存盘 ,以备下 <BR>  次拷贝版使用。 <BR> (判别是否DOS调用 ,只要判别触动INT13时的CS是否小于自己程序的CS可得知) <BR>2. 同上 ,但这次是将存的文件读出来。 <BR>这个程序已有人写出来 ,由于该软件并非弟所写 ,故无 Source. 可给您 ,几乎 <BR>所有的软件都可解。 <BR>SAVE.EXE 是负责 SAVE 坏道的东西 ,键入后再输入文件名 ,如 C:\A.LOK ,然后执 <BR>行原版磁盘 ,这时原版磁盘一边执行 ,一边将坏道数据存盘 ,最后程序执行了 , <BR>您的硬盘也有保护道数据了。 <BR>重新开机 ,清掉 SAVE.EXE。 <BR>LOAD.EXE 是负责将坏道数据放回去的 ,键入后再输入文件名 ,如 C:\A.LOK ,然后 <BR>就可以执行拷贝版了。 <BR>由于关系重大 ,只有赞助本站 User 可拿到软件 ,赞助者亦不可传至它站 ,否则 <BR>后果自行负责。 <BR>※ 以上软件若有闪失 ,概不负责。 <BR>  <BR>拷贝教程第十一集 <BR>  <BR>INT_13h 所有功能涵数之解说如下∶ <BR>1. AH=00 (重置磁盘系统)  ┐ <BR>2. AH=01 (取得磁盘状态)  ┃ <BR>3. AH=02 (读取扇区数据)  ┃由于一般 DOS 书籍已有介 <BR>4. AH=03 (写入扇区数据)  ┃绍 ,故不再多谈。 <BR>5. AH=04 (验证扇区好坏)  ┃ <BR>6. AH=05 ( 格式化磁道 )  ┘ <BR>7.  AH=06 格式化损坏的扇区 (PC/XT HD Only) <BR>   AL=扇区数 <BR>   CH=磁柱号码 <BR>   DH=磁头 <BR>   DL=软驱 (80h-FFh) <BR>返回代码 : <BR>   成功进位旗标为零 ,AH=00 <BR>   失败进位旗标为壹 ,AH=状态 (参考AH=01) <BR>8.  AH=07 格式化软驱 (PC/XT HD Only) <BR>   同 AH=06 ,但会从指定之磁柱起开始格式化 <BR>9.  AH=08 取得磁盘参数 (PC/AT PS/2) <BR>   DL=软驱 (软盘 00-7F ,硬盘 80-FF) <BR>返回代码 : <BR>   成功则进位码被清除 <BR>   BL=软驱种类 <BR>    01 360 KB ,40道 , 5.25寸 <BR>    02 1.2 MB ,80道 , 5.25寸 <BR>    03 720 KB ,80道 , 3.5 寸 <BR>    04 1.44MB ,80道 , 3.5 寸 <BR>  CH &amp; CL = 最大磁道数之 "低.高位元 <BR>   DH=磁头数 <BR>   DL=软驱数目 <BR>   ESI 软驱参数表的 [分段:差距] <BR>   失败 (同AH=07) <BR>10  AH=09 (重设磁盘的特性) <BR>   DL=软驱码 (PC/AT PS/2 HD Only) <BR>   INT_41h 需指向磁盘(HD)0的参数表 <BR>   INT_46h 需指向磁盘(HD)1的参数表 <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>11  AH=0A 0B (读/写延伸扇区 HD Only) <BR>   AL=扇区数 <BR>   CH=磁道 <BR>   CL=扇区 <BR>   DH=磁头 <BR>   DL=软驱 (80h-FFh) <BR>   ES:BX = 缓冲区 <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>12. AH=0C (磁头定位,但不读写数据) <BR>   CX=磁道编号 <BR>   DH=磁头 <BR>   DL=软驱 (80h-FFh) <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>13. AH=0D (同 AH=00 只是仅将 HD 磁头拉到第0道) <BR>   AL=软驱代码 <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>14. AH=0E 0F(读/写磁盘控制卡上的数据) <BR>   ES:BX 缓冲区 <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>   只是将卡上的 BUFFERS 数据读出 &amp; 写入BUFFER ,并不会动软驱 <BR>15. AH=10 (TEST) <BR>   DL=软驱 (80h-FFh HD Only) <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>16. AH=11 (同 AH=00 只是仅将 HD 磁头拉到第0道) <BR>   AL=软驱代码 <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>17. AH=12 (PC/XT HD CONTROL CARD RAM TEST) <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>18. AH=13 (PC/XT HD CONTROL CARD TEST) <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>19. AH=14 (PC/AT HD CONTROL CARD ALL TEST) <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>20. AH=15 取得磁盘种类 <BR>   DL=(软盘00-7Fh ,硬盘80h-FFh) <BR>返回代码 : <BR>   成功 清除进位旗 <BR>   AH=00 没有磁盘 <BR>    01 没有支援变更列的软盘 <BR>    02  有支援变更列的软盘 <BR>    03 若是硬盘 ,CXX 长512位元组扇区数 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>21. AH=16 测试磁盘是否抽换过 PC/AT Only <BR>   DL=软驱 (00-7F) <BR>返回代码 : <BR>   AH=00 未抽换 清除进位 <BR>   AH=06 已抽换 设定进位 <BR>22. AH=17 设定磁盘种类 <BR>   AL=00 未用 <BR>    01 320/360KB 软盘 (使用360KB驱动器) <BR>    02 320/360KB 软盘 (使用1.2MB驱动器) <BR>    03 1.2MB   软盘 (使用1.2MB驱动器) <BR>    04 720KB   软盘 (使用720KB驱动器) <BR>   DL=软驱 (00-7F) <BR>返回代码 : <BR>   成功 AH=00 ,清除进位 <BR>   失败 AH=状态 (参考书籍 AH=01) <BR>23. AH=18 设定储存媒体种类 (略) <BR>24. AH=19 PARK (PS/2 Only) <BR>   DL=软驱 <BR>25. AH=1A FORMAT ESDI HD <BR>  <BR>拷贝教程第十二集 <BR>  <BR>前言 : <BR> 市面上有个超级磁盘机 ,这是 陈宏然先生的作品 ,但是所支援的功能有限 <BR>所以特别制作了以下三个文件 ,将有利于使用者解密软件。 <BR>13H.EXE : <BR>  这个软件载入后会拦截 INT_13h ,然后当有人触动这个中断即会显示 , <BR> 换句话说 ,可用它来观看磁盘运作 ,与所下参数。 <BR> 例如观查 PCTOOLS 如何检测磁盘片格式 ,1.2软驱做FORMAT 360K.. <BR>UNDOS13.EXE : <BR>  这个软件平常在触动 INT_13h 时并不会显示出 ,除非是来自非 DOS 本 <BR> 身的调用才会显示给您看 ,例如使用 PCTOOLS.EXE 动到磁盘 , 拷贝工具 <BR> 等等才会显示 ,如果您执行有防拷的软件 ,那么将只显示被上防拷的坏道 <BR>  ,换据话说 ,您可以利用它来解防拷 ,只要写个常驻程序 ,拦截 INT_13h <BR> 和比对刚才显示过的坏道 ,若相同则将坏道数据送到它指定的记忆体位置 <BR> (参考第五集) ,这样子的话几乎无所不拷。 <BR>PU13.EXE : <BR>  这个软件和 UNDOS13.EXE 完全相同 ,只是每次拦到来自非 DOS 调用的 <BR> INT_13h 就显示给您看 ,并且暂停一下 ,等您按下一个键再继续执行这个 <BR> 程序。 <BR>以上软件显示若因卷页而消失 ,可按右边的Shift键重新显示。 <BR>PS: 这个软件采用记忆体直接显示数据 ,也就是说不会触动 INT_10h 来显 <BR>   示字元 ,其中有标出 MGP ,这就是决定单彩色版 ,单色时 video=B000 <BR>   彩色时 video=B800。
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则


浙江科技学院和山论坛|手机客户端|小黑屋|和山论坛

GMT+8, 2024-5-16 17:03 , Processed in 0.365131 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2005-2019 和山论坛(www.hsbbs.com)

快速回复 返回顶部 返回列表