📄 软磁盘反拷贝加密技术.txt
字号:
MOV DH,0
MOV CH,27H
MOV BX,OFFSET GSH_BUF
MOV AH,05
INT 13H
PUSH ES
MOV AH,35H
MOV AL,1EH
INT 21H
MOV AL,09H
MOV BX,04H
MOV ES:[BX],AL
POP ES
... ...
在被加密程序中可以安排一段专门程序,用来检查磁盘是否为原盘。具体做法是:检查磁盘上的39道上扇区数是否大于7。若大于7,则此盘为拷贝盘;否则为原盘。下面给出检查程序:
MOV AX, SEG MY_BUF
MOV ES, AX
MOV BX,OFFSET MY_BUF
MOV AL,01H
MOV DL,00H
MOV DH,00H
MOV CH,27H
MOV CL,08H
MOV AH,02H
INT 13H
CMP AX,0400
JNZ ILLEGL_DISKETTE
应当注意,上面这段程序很容易受到攻击。首先,程序是透明的,攻击者用调试程序可将其轻易抹掉;其次,由于某些高级拷贝工具软件功能强大,能完全复制一张磁盘,从而使这段程序失去作用。因而,这段程序还有待于进一步改进,如在应用程序中增加回写操作、明文变密文等。这里就不再一一说明。
7、螺线型磁道法
磁盘上的磁道是一个个同心圆,当磁头从一个磁道移到另一个磁道进行读写时,必须由FDC控制磁头步进,并等待一段时间,待其稳定后,再进行正常的读写操作。通常,这一等待时间称为安顿时间。
螺线型磁道法就是在磁盘上生成一些螺线型磁道,使磁头步进和读写操作同时进行,从而彻底扰乱一般拷贝软件的复制。
螺线型磁道加密技术是将信息写入非标准格式的磁盘,使得普通的拷贝工具无法复制,因而这种方法是一种十分有效的加密方法,但要成功地读写螺线型磁道,必须掌握步进速率和转动速率之间的精确的比率,这是很难做到的,故这种方法可靠性不是很高。
8、磁道间距不规则变化法
在一般的磁道密度为48TPI的软盘驱动器中,磁道间距为529μm,其读写磁道宽度为330μ没,抹去宽度为150μm。磁道间距通常是相同的,一般的拷贝软件就是直接控制磁道驱动器的步进电机,使读写磁头在磁道间距相等的磁道上来回移动进行拷贝的。磁道间距不规则变化方法就是抓住拷贝软件这一漏洞。利用软件控制步进电机,使磁头在磁盘上产生不规则的磁道间距,使拷贝软件无法正常拷贝。
该方法是一种很有效的加密方法,但其制作涉及到的驱动器硬件结构,所需专门编制软件来控制步进电机的动作,因而在实际中应用不广。
9、宽磁道法
有些磁盘复制机构中配有宽磁头,这种磁头可以在多个磁道上同时写入数据,也可以在相邻的两个磁道及其间隙写入相同内容,从而产生一个相当宽的磁道。在被加密程序读磁盘的代码中,让磁盘驱动器的读写磁头在这个“宽磁道”的两个写有相同数据的磁道之间来回步进,数据流是不会中断的,但如果是复制的磁盘,读/写磁头外侧的消磁磁头的抹除作用会使这个宽磁道在物理上分开,成为两个普通磁道,两个之间的间隙中充满了噪音信号,会导致数据流中断。利用这一点即可判断所读取的磁盘是否是原盘。
10、磁道接缝软指纹技术
所谓磁道接缝,指的就是每个磁道中位于索引孔两边的前置区和后置区。前置区和各个扇区的长度不变,后置区(GAP4)的长度是随机变化的,从200字节到300字节不等,其中包含的信息也是随机的,不同磁道后置区的长度和内容不同,即使是同一软盘的同一磁道,每格式化一次,其后置区的长度和内容就变化一次。后置区的这一特性就保证了其不可复制性,其内容就像人的指纹一样具有唯一性,完全可以用来加密。
如何将不定长度的后置区取出以作为鉴别的依据,是利用磁道接缝软指纹加密技术进行加密的关键。一般来说,对于标准的磁道要读取后置区是比较困难的,除非用端口读磁道命令来实现,而端口读磁道命令又是十分烦琐的。
读取磁道接缝中的“指纹”有一种巧妙的方法,因为GAP4的长度不超过300字节,又紧跟在第9扇区之后,所以只需在格式化时对第9扇区ID标志中的N改为3(磁盘基数表中的N不变),这样格式化出的第9扇区实际数据长度仍为512字节,但在读第9扇区时,将磁盘基数表中的N改为3,就可读出1024字节的内容,其中就有GAP4的信息。
这种方法目前是较强的一种反拷贝方法,可以防止任何拷贝工具的复制,读者可以从此为基础,结合其他方法,设计出更强的反拷贝技术。
11、扇区软指纹法
通常所讲的每扇区512字节指的只是扇区中数据区的长度,但除数据区之外,每个扇区还有其他区域。正常格式化的磁盘,扇区的各个扇区都是可以复制的,但经过特殊格式化的扇区,其某些域上的值就不能被一般的拷贝软件复制,通过检验这些域上数据的正确性就可以判断是否原盘。
一种制作读取这种扇区指纹的方法如下(假定在30道0面1扇区上制作):
制作:对30道0面进行特殊格式化,取第1扇区ID字段的N为4(其余扇区的均为2),格式化时不修改磁盘基数表,使每个扇区的数据仍为512字节。
读取:先修改磁盘技术表中的N值为4,而后读30道0面1扇区,同时也就把第2扇区的内容全部读出。对原盘和复制盘上读出的内容加以比较就可发现其中有些内容不同,因此来判断是否原盘。
12、弱位方法
磁盘是用不同的磁化单位来记录信息的。磁盘机读取磁盘时,将磁盘上不同的介质磁场转换成磁头读/写线圈中强度不同的电流,而后由电流信号判断读取的信息是0还是1,电平幅度高于某阀值电平时为1,远低于阀值电平时为0;磁盘机写数据到磁盘时,则是将电流信号转化为磁介质记录的磁场强度,与读过程相反。
弱位方法就是在写盘时,采用特殊的技术使磁介质记录的磁场强度变小,使磁盘机在读数据时产生的读出电平恰在阀值电平附近,即比1信号弱,又比0信号强(这一位就叫弱位),再加上鉴别电路的稳定性与精确性有限,使之对读出值产生误判有时判0,有时判1。这样的弱位可作为软指纹来防止拷贝。一般的拷贝软件在复制带有弱位的磁盘时,读出的弱位非0即1,写在复制盘上的就是0或1(而不是弱位),在被加密程序中对这些位进行是否弱位的判断就可得知该盘是否是原盘。判断方法很简单,只需对这些位多读几次,看每次读出的结果是否一致,若每次相同,则是非弱位,否则是弱位。
13、错误CRC法
每个扇区的标识区和数据区的后面都有两个字节的循环冗余码校验码CRC。CRC是FDC在写完最后一个数据字节时自动产生并写入的,用来校验扇区记录信息是否出错。正常情况下,FDC产生的CRC都是绝对正确的,除非软盘有物理性的损坏。如果人为地在某一个扇区产生错误的CRC,那么一般拷贝软件按通常的拷贝方法所制出的复制盘中肯定不会无法复制的。于是在被加密程序中判断某一特定的扇区是否有错误的CRC就可以知道该盘是否原盘。
有一个简单的方法可用来生成错误的CRC,即当FDC正在写某一扇区时,人为地打断FDC的写入过程(如复位FDC),这个时刻可由修改后的时钟中断程序不断检测FDC的主状态寄存器得到。这样就会打乱正常数据的写入,从而在该扇区得到一错误的CRC码。检测这一特定扇区的CRC是否正确的方法也很简单,用INT 13H的1号读扇区功能读该扇区,而后判断AH的值,若是10H,则CRC错,否则CRC正确。
14、磁道噪音法
磁盘上的信息通常采用FM或MFM格式进行编码,这种编码实际上就是在0,1序列中按一定格式插入一定的同步脉冲,从而形成一个新的脉冲序列,所插入的同步脉冲对所存的信息本身来说并无什么重要意义,只是为了读出时提取同步信息。同步脉冲改善了全0或全1脉冲的频率特性,使读出信息时不易出错。磁道噪声法就是采用一种特殊的手段在磁盘上写入一种特殊的编码(即噪声),使系统在对其读写时产生同步混乱,使读出的信息出错,阻止拷贝软件的复制。
15、FDC移花接木法
FDC是CPU与软盘驱动器之间的接口,种类很多,采用的记录方式和功能都不完全相同,而且用一种FDC在磁盘上制作的标记,可用另一种FDC读出,但却不能被复制,这就给加密者一个可乘之机,可以利用两种不同的FDC在同一原盘上制作两个不同的标记,这两个标记可用其中任一种读出并检测,但却不能只用一种FDC来制作,于是可防止拷贝。
16、扇区交错保密法
在一个磁道内,不将扇区按$0—$F编号存放,而是按任意顺序存放,这叫做扇区交错法,采用此方法,提高了DOS向磁盘存取文件时的速度。
APPLE的DOS3.3操作系统中,扇区交错是由软件来完成的,用DOS3.3格式化的磁盘上,16个扇区完全按$0—$F顺序排列,并无交错,但在内存$BFB8—$BFC7处存放着另一个转换表,此表将磁盘上的实际扇区编号一一对应到另一组假的扇区编号来供给DOS3.3使用,见下表:
真实编号 0 1 2 3 4 5 6 7 8 9 A B C D E F
对应编号 0 D B 9 7 5 3 1 E C A 8 6 4 2 F
假设修改了$BFB8—$BFC7转换表后,再用修改过的DOS3.3来INIT新盘,可以想象,如果在这个盘上存入程序,用标准的DOS3.3将无法正常存取这些程序,因为它们之间扇区转换表不相同。
“扇区交错”程序保密法可以利用上述办法来制作出能保密程序的保密磁盘。
制作保密磁盘对硬件的要求是:APPLE机的内存为48K,6号槽口接上磁盘机,磁盘机的编号为1。制作方法如下:
(1)制作一个不同于DOS3.3的扇区转换表。将16进制数字0至F间除去0剩余的15个数随意添入下表横线上(尽量不与标准DOS3.3的转换表一致):
00__________________
假设你添入的是:
00 07 0D 04 05 09 0E 01 06 0A 02 0C 08 0F 03
在纸上记下这组数字,然后根据APPLE机的显示ASCⅡ码表,把每个数字加上C0后所得的值转化成字母,本例应为:
@ G M K D E I N A F J B L H O C
这就是以后使用保密盘时所必须给出的通行口令。有了这个口令,才能往保密盘上存入或取出程序。记住这个密码。
(2)将标准DOS3.3引入内存,用CALL-151进入监控后,把刚才记在纸上的16个数输入从$BFB8开始的单元中。
*BFB8: 00 07 0D 0B 04 05
09 0E 01 06 0A 02
0C 08 0F 03
*(敲入CTRL—C)
I NEW
]
再将一个空盘插入接在6号槽口的1号驱动器中。
]I NI T HELLO
]CALL—151
*6000: 01 60 01 00 00 11 60 00 40 00 00 01 00 00 60 01 00 01 EF D8
*7000: A0 00 A9 60 4C D9 03 N 7 0 0 0 G
*404E: <4 04 D 4 05 B M
*404E8: A2 01 20 1B FD 29 0F 9D 4C 08 E8 E0 11 D0 F3 A5 2B 4A 60
*4007: 20 E8 08 N 4 0 4 A :4C 69 BA N 60 0 C :02 N 7 0 0 0 G
*600C: 01 N 60 05: 09 N 7 0 0 0 G
40B9 <40B8 40 C 6 M N 600C: 02 N 7000G
*600C: 01 N 6005: 04 N 7 0 0 0 G
*4069: 84 FF A0 10 B9 4C 08 99 B7 88 D0 F7 A4 FF 6C FD 6C FD 08 N 60 0C: 02 N 7 0 0 0 G
至此,加密盘已制作好。
上面所说的是软磁盘的一些加密资料,关于解密方面的资料 软蛀 和 俞煌男 的解密教程中有很多,我就不累述了,希望朋友们有好的经验或资料时不惜赐教,我对这个也很感兴趣(正如 看雪 所说:“在DOS时代之前就有些比较好的软件保护技术,而在DOS中使用得最多的恐怕要算软盘指纹防拷贝技术了。由于DOS操作系统的脆弱性,在其中运行的普通应用程序几乎可以访问系统中的任何资源,如直接访问任何物理内存、直接读写任何磁盘扇区、直接读写任何I/O端口等,这给软件保护者提供了极大的自由度,使其可以设计出一些至今仍为人称道的保护技术;”),欢迎来信交流,谢谢
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -