最近更新

最新评论

留言板
Blog统计
  心若改变,你的态度跟着改变;态度改变,你的习惯跟着改变;习惯改变,你的性格跟着改变;性格改变,你的人生跟着改变。在顺境中感恩,在逆境中依旧心存喜乐,认真地活在当下。-------------------------------------------------『马斯洛』

软盘加密解密技术
雨水的季节 发表于 2005-9-29 10:58:07
  要学加密解密,必须知道汇编语言,现把主要用到的语言介绍如下

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 ;  | 请查 DOS 手册
INT 13 ; ┘ 调用13中断
CMP AL,10 ; 比较是否 BAD CRC
JZ 'TEST OK' ; 如果是则跳越到比对资料
JMP 'ERROR' 如果不是,错误

  由于 N=6 已超过一个磁区所能容纳的范围,因此变成 BAD CRC,AL 的返回代码请参考 DOS 技术手册。

  下章主要介绍,如何编加密盘(如瑞星杀毒)源程序,并汇编成可执行程序。

  前面介绍了软盘加密的中如何做出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+软件了,可脱离密盘运行了。你还不试验一下自己破解。

(网络任我行)


阅读全文() | 回复(0) | 引用通告() | 编辑
 


发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:



Powered by Oblog.