希望以下对你有用:
软盘的加密解密技术
作者:shanguo
要学加密解密,必须知道汇编语言,现把主要用到的语言介绍如下
1、DEBUG 的指令;
T --- 单步执行 ,一次执行一个指令
G <Address> --- 执行到 <Address> 就停下来
G --- 执行完载入的程式
N <Filesname>--- 定义档名 (配合 "L" 或 "W" 用)
L --- 载入档案(LOAD)
W --- 写入档案(SAVE)
大部份破解过程只用到上列指令....一般档案分为.COM 与.EXE ,因为.COM 最大只能有 64K 所以演生出.EXE 档。但是.EXE又有个档头 ,记录档案放在那儿,所以 DEBUG 无法写回此种档案 ,而产生错误讯息,因此EXE档必须用 PCTOOLS 将指令码找出来改一下,
2、部分汇编指令(其余请看8088/8086汇编语言书)
MOV AA,BB 将 BB 放到 AA 里 即AA<---BB
CALL 呼叫副程式 (相当於 BASIC 的 GOSUB)
RET 与 RETF 返回程式 (相当於 BASIC 的 RETURN)
CMP XX,YY 比较 XX 与 YY
JZ 若相等则跳跃
JNZ 若不相等则跳跃
JB 若小於则跳跃
JG 若大於则跳跃
JMP 无条件跳跃
J??? (各种跳跃指令)
LOOP 回路
INT XX BIOS的中断(软盘中断为INT 13)
3、各种寄存器(介绍8088/8086)
通用寄存器分数据寄存器、指针寄存器、变址寄存器。
a 数据寄存器分 AX--累加寄存器 BX--基址寄存器 CX--计数寄存器 DX--数据寄存器
各寄存器为16位,有按高字节和低字节分两个8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL
b 指针寄存器分 BP--基址寄存器 SP--堆栈寄存器 为16位
c 变址寄存器分 SI--源变址寄存器 DI--目标变址寄存器 为16位
d 控制寄存器包括指令指针寄存器--IP和标志寄存器--FLAG(有9个标志位)
4、软盘读写
软盘的读写、FORMAT等都由调用INT13中断来实现,在软盘上进行加密就需要利用到INT13。(在后面介绍具体方法)
5、软盘结构
2HD 的磁片有 80 轨(即80个同心圆) ,每一轨又分为9个磁区 ,每个磁区又再分 512 个位元组 ,因此要做保护只要和正常轨不同即可。(DOS2.0每轨8个磁区 ,DOS3.1以上版本才是9个磁区)
磁轨(TRACK) : 磁片上分成数个同心圆环 ,便称磁轨
面(Head) : 软碟分为 0/1 面 ,但硬碟可能超过此数字
磁区(SECTOR) : 磁轨上储存资料区域之一
N 值 : 磁区大小 ,正常为2 (N=1 256Bytes ,N=2 512Bytes)2的N次方乘以256,即为该磁区的大小,因此正常的磁轨 ID 栏应该为 :
磁区 T H S N
1 02 00 01 02 10.4% 这是第二轨第零面的状况
2 02 00 02 02 10.4% "%" 代表这磁区占该轨的
3 02 00 03 02 10.4% 百分比 ,每次皆会有少许
4 02 00 04 02 10.4% 差异。
5 02 00 05 02 10.4%
6 02 00 06 02 10.4%
7 02 00 07 02 10.4%
8 02 00 08 02 10.4%
9 02 00 09 02 13.7%
若 N=3 则必需有 17.8% 以上的空间才能制造出正常磁轨 ,不然都会造出坏轨(CRC ERROR) ,所以该轨只能有 5 个磁区 ,否则就变成坏轨。这是因磁碟控制卡之故 ,无法要求小又好(NO ERROR)的磁区。
6、保护的种类(以前在我的网上介绍过)
空白磁区: 该轨不具磁区 ,也就是某一轨不做 FORMAT ,这样当读写这个磁轨就会造成错误 ,但只能防标准的 DISKCOPY 的拷贝程式 ,是早期的保护方式。
非标准磁区 : 就是乱改 T H S N 值 ,变成与正常轨不同。
异常大小的磁区 : 占该磁轨大小百分比异常。
隐藏磁区 : 用 ID 栏错误法 ,使得该磁区必须要用 READ ID 法才能找到该磁区 ,所以可骗过早期的 COPYWRIT or COPYIIPC
增加额外磁区 : 让某一轨磁区超过正常数目,磁碟控制卡若能制造出 20h 个磁区就算不错了,但有些却制造甚多个使之无法用软体拷贝。
虚拟磁区 : 又名 WEAK BIT ,就是将资料写入时以介於 0 与 1 的磁性写入 ,於是读出来的资料每次都不一样 ,正常磁碟机无法做出(碰运气可作出,但百分比越大越难做出) ,只能靠外来硬体做拷贝。
长轨 : 利用转速慢的磁碟机写入 ,这样写入的资料比较多 ,除非拷贝的磁碟机转速相同 ,不然拷不下(拷贝卡也无法)
无缝锁 : 利用 N 值为 6 的磁区 ,因为超过该轨所能容纳的空间, 所以当您读取该磁区时就会顺便将头尾的资料读出 ,任何磁碟机都无法处理该区 ,造成不能被拷贝 ,因此市面使用此保护者 ,每片都不一样保护轨资料 ,不可能拷贝。因为一个磁轨无法容纳 N=6 ,所以会格式化出坏轨(BAD CRC)同时利用磁碟机无法正确写入索引孔附近资料,因此拷贝卡等硬体拷被工具也无法拷贝,但如果仍要读该轨时,磁碟就会顺便将索引孔的资料读出,只要比对其资料即可知是否原版。
额外磁轨 : 正常磁片假如有 39 轨 ,但可读写的还有 40 41 轨 ,因此有人就在该轨做手脚 ,然後以正常方式读写该轨。
对软盘加密解密需要用到13H中断,下面把13H常用的命令介绍如下:(其余请看DOS大全)
寄存器
功能
AH=02H 读磁盘扇区 AL=扇区数 CH=柱面* CL=起始扇区 DH=磁头(0面和1面)
DL=驱动器(00H-7FH软盘80H-FFH硬盘)
AH=03H 写磁盘扇区
AH=05H 格式化磁盘磁道 参数格式是:磁道号,磁头号(面号),扇区号,扇区字节数
扇区字节数有一个规定:0=128,1=256,2=512,3=1024,4=2048,5=4096,6=8192,7=6384其中最特殊的是7,就是加密的关键。
AH=06H 格式化坏磁道
举例:
读A盘第70道0面3扇区开始的3个扇区里的数据,存放在地址为100的缓冲区里,进行如下操作:
MOV AH,02H 使用02H功能读取指定磁道指定扇区的数据
MOV AL,03H 读取3个扇区内容
MOV BX,100H 存放在内存地址为100的缓冲区里
MOV CH,70 磁道号为70号此处的70不是16进制
MOV CL, 03H 扇区号为3
MOV DH,00H 第1面(不是0面就是1面,只有两个面)
MOV DL,00H A盘用0代表
INT 13H 执行中断13H程序
BBS水木清华站kill的key盘制作源程序(仅供参考)
makekey.dat:
A 100
MOV AX,0504
MOV BX,0200
MOV CX,2701
MOV DX,0000
INT 13
INT 3
E 0:525 01 04
E 200 27 00 A7 02 27 00 D1 02 27 00 BC 02 27 00 E1 02
G
E 0:525 02 12
Q
copy一下上面的代码,然后放张盘在A:,再debug<mkeykey.dat,
然后可以format一次保护key
本章具体讲如何编程序对软盘进行格式化;
例如:在软盘的 29h 轨制造一个编号为 FFh 的磁区,防一般的拷贝软件。
源程序如下:
FORMAT 29H磁轨的程序 分析
CS:100 MOV AX,0000 / 磁头复位读写前的准备
INT 13 / 调用13中断
MOV AX,0501 - FORMAT 1个磁区(13H中断的05H格式化功能)
MOV BX,0200 - 格式化ID的数据资料放在 ES:BX 用200代表
MOV CX,2901 - 29h轨
MOV DX,0001 - 零面,B磁碟机(A盘和硬盘的参数请看DOS大全)
INT 13 - 起动磁碟 I/O(13H中断)
JB 0100 - 失败再重作 跳转到100地址
INT 20 - 结束程序
ES:200 DB 29 00 FF 02 (格式化ID栏资料,即200代表的数据) DB----预置一参数或数据命令
说明: 29---表示第29H磁轨
00---表示第0面
FF---表示编号为FFH
02---表示N=2,磁区大小为512bytes
以上程序对软盘的加密后,验证密匙可用下面的程序进行。
(本刊版权归shanguo所有,如要转载请注明我的网址和出处)
验证该轨的程序 分析
CS:100 MOV AX,0000 / 磁头复位读写前的准备
INT 13 / 调用13中断
MOV AX,0201 - 读一个磁区
MOV BX,0200 - 将资料放在 ES:BX
MOV CX,29FF - 第29h轨,FFh磁区
MOV DX,0001 - 零面,B磁盘(A盘和硬盘的参数请看DOS大全)
INT 13 - 磁碟 I/O 起动(13H中断)
JB TEST ERROR 无特殊轨就错误,可跳转到某一地址
JMP TEST OK 有特殊轨检查通过就OK
看了上面的程序和我的分析后,你对加密解密可有一定的了解了。
本章主要介绍在软盘加密的中如何做出CRC磁道的
因为对一个磁道格式化时当N=6,会格式化出坏轨(BAD CRC),而此时磁碟机无法正确写入索引孔附近资料,因此拷被工具也无法拷贝,但如果仍要读该轨时,磁碟就会顺便将索引孔的资料读出,只要比对其资料即可知是否原版。流程如下;
+--------+
|磁头复位|
+--------+
|
+--------+
| 读磁道 |
+--------+
|
+----------------+
| 比对是否有坏轨 |
+----------------+
|
+----------------+ 不是
| 比对是否有坏轨 |--------------------+
+----------------+ |
|是 |
+----------+ 非预设资料 |
|比对资料区|--------------------------+
+----------+ +----------+
| | 失败结束 |
+----------+ +----------+
|成功的执行|
+----------+
例如:
FORMAT A磁碟第29h轨,第零面,第1个磁区
源程序 分析
------------------------------------------------------
MOV AX,0000 ;
重置磁碟
INT 13 ;
调用13中断
MOV AX,0501 ;05H格式化
MOV BX,200 ;
FORMAT 参数用200表示
MOV CX,2901 ;
第29h轨,第零面,第1个磁区
MOV DX,0000 ;
A磁碟
INT 13 调用13中断
JB 'FORMAT ERROR' 失败
JMP 'FORMAT COMPLETE' 格式化成功
ES:200 29 01 01 06 (ID 栏值,即200代表的值,请看上集)
检验验证程序如下:
源程序 分析
------------------------------------------------------
MOV AX,0000
INT 13 调用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 ;
| 请查do
S 手册
INT 13 ;
┘ 调用13中断
CMP AL,10 ;
比较是否 BAD CRC
JZ 'TEST OK' ;
如果是则跳越到比对资料
JMP 'ERROR' 如果不是,错误
由于 N=6 已超过一个磁区所能容纳的范围,因此变成 BAD CRC,AL 的返回代码请参考do
S 技术手册。
下章主要介绍,如何编加密盘(如瑞星杀毒)源程序,并汇编成可执行程序。
前面介绍了软盘加密的中如何做出CRC磁道,如何读取等内容,本期谈谈如何对一个原盘分析并做成原盘的。
1、找一个原盘如:瑞星,你先要对它分析,找出它同一般盘的不同之处,也就是加密点,并对他的磁道、扇区、面、扇区大小等进行分析,再根据分析的结果数据编制出FORMAT程序,建议你用ANDISK软件对磁盘进行分析。(本站:网络任我行--加密解密--工具宝箱提供,请去下载)
2、然后你根据分析结果,利用13H编制出源程序,检查完好后,你就可以汇编成程序发布了。
例如:已有一个RAV盘制作软件(请到我的网站http://shanguo.cn99.com,推荐软件栏下载)该文件可以是TXT文件,也可以是ASM文件。
先到我的网站下载AV.zip、TASM.ZIP、TLINK.ZIP三个文件,解压后成三个文件:rav.txt tasm.exe tlink.exe。把它们放在一个目录下。
在DOS下,执行 TASM RAV.TXT 把TXT文件汇编成OBJ文件,得到RAV.OBJ,再执行 TLINK/T RAV.OBJ
把OBJ文件连接成COM文件,即得到rav.com。这就是一个可执行的瑞星密盘制作软件了。你还不试验一下。
上章讲了如何编制加密软件,本站会员专区为你提供了好几个加密软件的源程序,你可去下载并汇编成软件,(用上期讲的方法);本期讲如何破解软件(以KV300+Z8为例)
KV300+是一个很出名的软件,它的加密技术也很出色,现在讲一下如何破解最新的版本(仅供参考)。
软件工具:TEST UNP UFKV300 LZEXE KV-PATCH (同上一个版本差不多)
第一步:查找加密壳数
1、找个KV300.EXE文件来,把它和TEST.EXE放在一个目录下,在纯DOS下运行TEST KV300.EXE 就可以看到提示有两层壳。下面来解壳。
第二步:解壳
2、把UFKV300.com文件和KV300.exe放在同一目录下,在DOS下运行UFKV300.com,得到一个文件K。这是脱去第一层壳的KV300,把K改名为KV300.exe。
3、用UNP脱去第二层壳,在DOS下运行UNP-L KV300.exe就可以得到的是脱去全部壳的KV300.exe了,有333K,你可以自由的进行汇编了,但该软件还有读密盘的子程序在里面。
第三步:去密盘判断程序
4、把脱去全部壳的KV300与KV-PATCH放在同一目录,于DOS下运行KV-PATCH,让程序自动执行,你就可以得到一个破解了读密盘的子程序的KV300了,但软件很大,有300多K,这是因为没压缩,你用LZEXE KV300.EXE压缩一下,就仅有144K左右大小了,z这就是破解了的KV300+软件了,可脱离密盘运行了。你还不试验一下自己破解。