拷贝教程第八集
由于上次弟的软件失败后 ,急忙推出下集 ,所以显得比较简陋 ,请多包涵。
原因是弟本来想写无缝锁程序 ,无耐该种软件只有360K DRIVER 能做出来,
于是弟又将作品抽回来 ,因此弟在此简介如何制作无缝锁吧 !
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FORMAT 的部份 :
先将磁盘 ID 设定好 ,然后 FORMAT 即可....
有关于磁盘 ID 的部份 ,请参考前几集。
FORMAT 就使用 INT 13h 即可 ....
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
读取数据部份 :
0000:0522 这个位址一般都是 02 ,代表扇区 N 值等于 2(512Bytes)
但是如果您将它改为 6 ,就能够读出该种扇区内的数据 (请参考第五集)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※ 弟附上一个软件 ,是一个软件保护的实例 ,让各位练习使用。
FORMAT.EXE 这是一个用来格式化您的磁盘片 ,在您执行这个软件前 ,请在
软驱A放入一片您不要的磁盘 ,然后再执行这个软件 ,于是它会在第27h
(39道)的地方做一个额外扇区FFh的扇区 ,一般的拷贝程序无法拷贝该种特
别的扇区(COPYWRIT、COPYIIPC 等强拷软件除外) ,于是可达到您的磁盘保
护的目地 ,因此本程序只能当做一种在磁盘上做标记的程序。
CHECK .EXE 这是用来简查磁盘有没有标记 ,然后判别出结果并显示之。
换句话说 ,这是一套上保护的软件 ,但是防拷能力并不强 ,只要稍具拷贝能
力的软件皆能拷下来 ,至于若希望软件不能被拷贝 ,似乎只能借助于外部硬
体才能办得到 ,因此弟只写了简单的程序。
拷贝教程第九集
经过数天来苦心研究后 ,终于发现所写的无缝锁何以不能执行之 ,现在就
展现在您的眼前 (我花了数天才研读出来..您只要看一遍就懂了)。
在此为您解说一下磁盘参数吧 ,这个参数对于想玩磁盘保护的人绝对要学
起来 ,因为懂了它就可以玩出一堆花样来....
0000:0525h 02h ..... 磁盘的N值 ,用以设定目前读取的ID之N值。
0000:0526h 12h ..... 每一道18个扇区 ,弟将它改为9,才能正确格式画磁盘。
请您放一片磁盘(已格式划过的2HD磁盘)到A软驱 ,然后执行 FORN6.EXE
它就会帮你制造坏磁道(4Fh道第0面)。
接着执行 SAVEN6.EXE ,它会把坏道存成文件 (DEMO.DAT) 。
您可以试著看看每次格式划后的坏道数据都不一样 ,拷贝后亦不一样。
您可以用"TYPE DEMO.DAT看到坏道数据 ,这种保护是无法被覆制的。
解说 (FORMAT-N6) :
┌ 将磁盘参数每道有18(12h)个扇区(0000:0526h) ,改为每道有9个扇区
├ 然后格式划磁盘
├ 将磁盘参数改回正常
└ 结束程序
解说 (SAVE-N6) :
┌ 将磁盘参数N值由2改为6
├ 读取最后一个扇区 ,放到 Buffers
├ 将 Buffers 的数据存盘 (DEMO.DAT)
└ 结束程序
解说磁盘格式 :
前几集我们曾经讨论过磁盘格式 ,但由于太精简 ,有些人可能一知半解
所以重新再说明一次。
所以重新再说明一次。
2D : 每片有39个磁道 ,每个磁道又分为8个扇区(DOS2.0版本)
9个扇区(DOS3.0以上版本)
但是一般360K软驱可以控制到41道 ,于是也有人多用此磁道 ,变成
额外的磁道保护。
2HD : 每片有79个磁道 ,每个磁道又分为18个扇区(DOS3.1以上版本)
但是一般1.2MB软驱可以控制到81道 ,于是也有人多用此磁道 ,变成
额外的磁道保护。
扇区 : 每个扇区又有分为 T.H.R.N ,就相当于是该扇区的目录一样 ,记录了
T = 磁道 ,H = 面 , R = 第几号扇区 , N = 2 扇区有 200h Bytes
(N=3 400hBytes N=4 800hBytes N=5 1000hBytes N=6 2000hBytes)
这个目录总称 ID 。
正常的一片 2D 磁盘 27h 道第0面的 ID 应该是 :
T. H. R. N.
27,00,01,02 ┐
27,00,02,02 ┃ 这个目录(ID)就是这条
27,00,03,02 ┃ 磁道的所有东西。
27,00,04,02 ┃
27,00,05,02 ┃ 每个扇区可放 512Bytes
27,00,06,02 ┃ (200h)Bytes
27,00,07,02 ┃
27,00,08,02 ┃
27,00,09,02 ┘
或许你已发现了 ,这条磁道总容量是 1800h Bytes ,而如果 N=6 就有 2000h
Bytes ,于是当您读取这个磁道 ,就会读取超过该磁道的容量 ,将其磁道接缝
处顺便读出来 ,而一般软驱无法处里此接缝 ,因此也就无法拷贝。
接缝 : 磁盘上有一个索引孔 ,当软驱读到这个孔就会开始做读写工作 ,直
到该工作做完为止 ,但是不可能整圈磁道全用完 ,于是造成将这未读
写完的部份扇区(俗称接缝)。
软驱的磁头在写入时 ,磁头都会加以磁化 ,但磁性物体不可能通电
后马上有磁性 ,断电后马上没有磁性 ,由于这个剩磁 ,将接缝的数据
变动到 (因为写完数据后磁头仍会在该道停留到遇到下一次索引孔为
止),这个磁性绝对无法用软件加以控制 ,所以市面上也就没有东西可
以拷贝它。
拷贝教程第十集
据说 KeyPro 保护是用某种专上此种保护的软件上的,所以应该大同小异。
某种以 KeyPro 保护的雷射印表软件 ,兹以原版与解密版说明之 :
A>DEBUG JM.EXE
-u CS:C560 (原版)
15C3:C560 9A0C003C23 CALL 233C:000C ━使用INT17h将KeyPro数据读出
15C3:C565 2E CS: ┐
15C3:C566 01066901 ADD [0169],AX ┃
15C3:C56A D0E0 SHL AL,1 ┃
15C3:C56C D0E0 SHL AL,1 ┃
15C3:C56E D0E0 SHL AL,1 ┃运算和数据比对
15C3:C570 D0E0 SHL AL,1 ┃
15C3:C572 2E CS: ┃
15C3:C573 01066901 ADD [0169],AX ┃
15C3:C577 50 PUSH AX ┃
15C3:C578 59 POP CX ┃
15C3:C579 2E CS: ┃
15C3:C57A 2906038D SUB [8D03],AX ┃
15C3:C57E 3C00 CMP AL,00 ┃
15C3:C580 751E JNZ C5A0 ┘
15C3:C582 B402 MOV AH,02
15C3:C584 9A0C003C23 CALL 233C:000C
15C3:C589 8AE6 MOV AH,DH
15C3:C58B E89805 CALL CB26
15C3:C58E A3F2CD MOV [CDF2],AX
-u CS:C560 (解密版)
15C3:C560 9A0C003C23 CALL 233C:000C ━ 读数据(读不到)
15C3:C565 90 NOP ┐
15C3:C566 31C0 XOR AX,AX ┃已知数据运算的 AX=0
15C3:C568 2E CS: ┃所以帮它运算。
15C3:C569 01066901 ADD [0169],AX ┘
15C3:C56D 90 NOP
15C3:C56E 90 NOP
15C3:C56F 90 NOP
15C3:C570 90 NOP
15C3:C571 90 NOP
15C3:C572 2E CS:
15C3:C573 01066901 ADD [0169],AX ┐
15C3:C577 50 PUSH AX ┃
15C3:C578 59 POP CX ┃ 以下运算式因只用到 AX
15C3:C579 2E CS: ┃ 故不修改其内容
15C3:C57A 2906038D SUB [8D03],AX ┃
15C3:C57E 3C00 CMP AL,00 ┃
15C3:C580 751E JNZ C5A0 ↓
15C3:C582 B402 MOV AH,02
15C3:C584 9A0C003C23 CALL 233C:000C
15C3:C589 8AE6 MOV AH,DH
15C3:C58B E89805 CALL CB26
15C3:C58E A3F2CD MOV [CDF2],AX
现在的软件保护,实在越来越厉害,实在可以这样说 :
解读不易,解密更难,所有保护,专攻DEBUG,防止破X
========================================================================
由于时间关系,本篇稍嫌简陋,由于弟的功力有限,下回应该会更精彩一些。
拷贝教程到此算是暂时告一段落了 ,原因是题裁取得不易 ,软件防破能力太强
,因此对于开站的我已无多的时间慢慢 Debug ,只好告诉各位未来续出的时间可
能会每1-2个月出一次 ,也希望各位大爷忍耐一些 ,所以先告诉各位一些主意 ,
就是对于防拷不必花时间去解 ,只要您写个小程序即可解所有 Int13 的保护 ,
1. 拦截 INT13h ,对于来自非DOS调用的时后 ,即将所读到的数据存盘 ,以备下
次拷贝版使用。
(判别是否DOS调用 ,只要判别触动INT13时的CS是否小于自己程序的CS可得知)
2. 同上 ,但这次是将存的文件读出来。
这个程序已有人写出来 ,由于该软件并非弟所写 ,故无 Source. 可给您 ,几乎
所有的软件都可解。
SAVE.EXE 是负责 SAVE 坏道的东西 ,键入后再输入文件名 ,如 C:\A.LOK ,然后执
行原版磁盘 ,这时原版磁盘一边执行 ,一边将坏道数据存盘 ,最后程序执行了 ,
您的硬盘也有保护道数据了。
重新开机 ,清掉 SAVE.EXE。
LOAD.EXE 是负责将坏道数据放回去的 ,键入后再输入文件名 ,如 C:\A.LOK ,然后
就可以执行拷贝版了。
由于关系重大 ,只有赞助本站 User 可拿到软件 ,赞助者亦不可传至它站 ,否则
后果自行负责。
※ 以上软件若有闪失 ,概不负责。
拷贝教程第十一集
INT_13h 所有功能涵数之解说如下∶
1. AH=00 (重置磁盘系统) ┐
2. AH=01 (取得磁盘状态) ┃
3. AH=02 (读取扇区数据) ┃由于一般 DOS 书籍已有介
4. AH=03 (写入扇区数据) ┃绍 ,故不再多谈。
5. AH=04 (验证扇区好坏) ┃
6. AH=05 ( 格式化磁道 ) ┘
7. AH=06 格式化损坏的扇区 (PC/XT HD Only)
AL=扇区数
CH=磁柱号码
DH=磁头
DL=软驱 (80h-FFh)
返回代码 :
成功进位旗标为零 ,AH=00
失败进位旗标为壹 ,AH=状态 (参考AH=01)
8. AH=07 格式化软驱 (PC/XT HD Only)
同 AH=06 ,但会从指定之磁柱起开始格式化
9. AH=08 取得磁盘参数 (PC/AT PS/2)
DL=软驱 (软盘 00-7F ,硬盘 80-FF)
返回代码 :
成功则进位码被清除
BL=软驱种类
01 360 KB ,40道 , 5.25寸
02 1.2 MB ,80道 , 5.25寸
03 720 KB ,80道 , 3.5 寸
04 1.44MB ,80道 , 3.5 寸
CH & CL = 最大磁道数之 "低.高位元
DH=磁头数
DL=软驱数目
ESI 软驱参数表的 [分段:差距]
失败 (同AH=07)
10 AH=09 (重设磁盘的特性)
DL=软驱码 (PC/AT PS/2 HD Only)
INT_41h 需指向磁盘(HD)0的参数表
INT_46h 需指向磁盘(HD)1的参数表
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
11 AH=0A 0B (读/写延伸扇区 HD Only)
AL=扇区数
CH=磁道
CL=扇区
DH=磁头
DL=软驱 (80h-FFh)
ES:BX = 缓冲区
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
12. AH=0C (磁头定位,但不读写数据)
CX=磁道编号
DH=磁头
DL=软驱 (80h-FFh)
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
13. AH=0D (同 AH=00 只是仅将 HD 磁头拉到第0道)
AL=软驱代码
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
14. AH=0E 0F(读/写磁盘控制卡上的数据)
ES:BX 缓冲区
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
只是将卡上的 BUFFERS 数据读出 & 写入BUFFER ,并不会动软驱
15. AH=10 (TEST)
DL=软驱 (80h-FFh HD Only)
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
16. AH=11 (同 AH=00 只是仅将 HD 磁头拉到第0道)
AL=软驱代码
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
17. AH=12 (PC/XT HD CONTROL CARD RAM TEST)
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
18. AH=13 (PC/XT HD CONTROL CARD TEST)
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
19. AH=14 (PC/AT HD CONTROL CARD ALL TEST)
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
20. AH=15 取得磁盘种类
DL=(软盘00-7Fh ,硬盘80h-FFh)
返回代码 :
成功 清除进位旗
AH=00 没有磁盘
01 没有支援变更列的软盘
02 有支援变更列的软盘
03 若是硬盘 ,CXX 长512位元组扇区数
失败 AH=状态 (参考书籍 AH=01)
21. AH=16 测试磁盘是否抽换过 PC/AT Only
DL=软驱 (00-7F)
返回代码 :
AH=00 未抽换 清除进位
AH=06 已抽换 设定进位
22. AH=17 设定磁盘种类
AL=00 未用
01 320/360KB 软盘 (使用360KB驱动器)
02 320/360KB 软盘 (使用1.2MB驱动器)
03 1.2MB 软盘 (使用1.2MB驱动器)
04 720KB 软盘 (使用720KB驱动器)
DL=软驱 (00-7F)
返回代码 :
成功 AH=00 ,清除进位
失败 AH=状态 (参考书籍 AH=01)
23. AH=18 设定储存媒体种类 (略)
24. AH=19 PARK (PS/2 Only)
DL=软驱
25. AH=1A FORMAT ESDI HD
拷贝教程第十二集
前言 :
市面上有个超级磁盘机 ,这是 陈宏然先生的作品 ,但是所支援的功能有限
所以特别制作了以下三个文件 ,将有利于使用者解密软件。
13H.EXE :
这个软件载入后会拦截 INT_13h ,然后当有人触动这个中断即会显示 ,
换句话说 ,可用它来观看磁盘运作 ,与所下参数。
例如观查 PCTOOLS 如何检测磁盘片格式 ,1.2软驱做FORMAT 360K..
UNDOS13.EXE :
这个软件平常在触动 INT_13h 时并不会显示出 ,除非是来自非 DOS 本
身的调用才会显示给您看 ,例如使用 PCTOOLS.EXE 动到磁盘 , 拷贝工具
等等才会显示 ,如果您执行有防拷的软件 ,那么将只显示被上防拷的坏道
,换据话说 ,您可以利用它来解防拷 ,只要写个常驻程序 ,拦截 INT_13h
和比对刚才显示过的坏道 ,若相同则将坏道数据送到它指定的记忆体位置
(参考第五集) ,这样子的话几乎无所不拷。
PU13.EXE :
这个软件和 UNDOS13.EXE 完全相同 ,只是每次拦到来自非 DOS 调用的
INT_13h 就显示给您看 ,并且暂停一下 ,等您按下一个键再继续执行这个
程序。
以上软件显示若因卷页而消失 ,可按右边的Shift键重新显示。
PS: 这个软件采用记忆体直接显示数据 ,也就是说不会触动 INT_10h 来显
示字元 ,其中有标出 MGP ,这就是决定单彩色版 ,单色时 video=B000
彩色时 video=B800。