怎样刻一张带隐含目录的光盘,象市面上的盗版那样?(100分)

W

wantlong

Unregistered / Unconfirmed
GUEST, unregistred user!
我也想知道.......
 
A

antic_ant

Unregistered / Unconfirmed
GUEST, unregistred user!
可以参考安装程序的方法
 
L

Liss

Unregistered / Unconfirmed
GUEST, unregistred user!
C

chcw

Unregistered / Unconfirmed
GUEST, unregistred user!
转载:隐藏目录的加密光盘(2)---原理篇
如何制作隐藏目录、超大档案
下拉式选单: 关闭   开启


[1] 前言
[2] 光碟上的目录记录区
[3] 制作一个 ISO 档
[4] 目录记录区举例说明
[5] Joliet 及 ISO 9660 规则
[6] 超大档案
[7] 隐藏目录
[8] ISO 映像档说明
[9] 测试
[10] 超大档案还原法
[101] 工具程式
[102] 修改光碟映象档
[12] 利用超大档的光碟保护
[11] Joliet 规则制作的 Image 档

--------------------------------------------------------------------------------

前言
  这里所谓的隐藏目录不是指那种属性为 H 的目录,而是 DIR /a 看不到,工具程式也找不到, 但可以用 "CD 目录名" 进去的目录。所谓超大档案则是指档案大小大得离谱,甚至超过一片 CD 的大小。这些技巧在坊间补帖业者已盛行多时, 而其制作方法只是修改 ISO 档罢了。只要有一份 ISO 9660 的 "Directory record", 就可以知道该修改什麽地方了。
  您可以把 ISO 9660 简介那份文件抓回去看看,其中的 table 15 就是本文的 table 1。先看一下,等一下说明。

光碟上的目录记录区
Table 1. Directory Record BP Field Name Content
1 Length of directory Record (LEN_DR) Bytes
2 Extended Attribute Record Length Bytes - this field refers to the Extended Attribute Record, which provides additional information about a file to systems that know how to use it. Since few systems use it, we will not discuss it here. Refer to ISO 9660:1988 for more information.
3 to 10 Location of Extent This is the Logical Block Number of the first Logical Block allocated to the file.
11 to 18 Data Length Length of the file section in bytes
19 to 25 Recording Date and Time This is recorded in the same format as the Volume Creation Date and Time
26 File Flags One Byte, each bit of which is a Flag:
Bit
0  File is Hidden if this bit is 1
1  Entry is a Directory if this bit is 1
2  Entry is an Associated file is this bit is 1
3  Information is structured according to the extended attribute
  record if this bit is 1
4  Owner, group and permissions are specified in the extended
  attribute record if this bit is 1
5  Reserved (0)
6  Reserved (0)
7  File has more than one directory record if this bit is 1
27 File Unit Size This field is only valid if the file is recorded in interleave mode. Otherwise this field is (00)
28 Interleave Gap Size This field is only valid if the file is recorded in interleave mode. Otherwise this field is (00)
29 to 32 Volume Sequence Number The ordinal number of the volume in the Volume Set on which the file described by the directory record is recorded.
33 Length of File Identifier (LEN_FI) Byte

  原来在每个目录或档案前面都有一段说明或记录,第几个 byte 到第几个 byte 是记录什麽都有一定的规定。各位可以在 ISO 档内找到您要的目录(档案)名後,由此名字往前开始算,第一个 byte 就是上表的第 33 个 byte。同理,倒数第二到第五个 bytes 就是上表的第 29 到 32 个 bytes 的地方。而所有的数字当然都要用十六进位表示。

制作一个 ISO 档
本文的 ISO 档 (又叫 Image 档) 是以 Easy CD Pro 所制作的, 用别的软体可能会不太一样. 制作的方法请看以下图示 :

把资料轨准备好, 设定档名规则可为 ISO 9660 或 Joliet 皆可. 最後烧录时设定为存成 Image 档, 而不是烧进光碟. 不过要把一片空白片放进烧录机才可以, 不管是不是要直接烧录.

目录记录区举例说明
假设有一个 ISO 档,里面有一个目录,叫 "TEST". 这里需要 Norton Utility (8.0 版以前) 的 Diskedit.exe , 或是 UltraEdit 也可以, 来找 ASCII 字串: "TEST",首先会找到两个像这样的地方: (但这不是我们要的位置)

再往下找就会再看到一个像这样的地方:

就是这里!我们来看看从 "TEST" 开始,回头算起的 33 个 bytes。
(就目录而言其它 ISO 档应该也是差不多要找叁次才是要改的位置,不过读完本篇後您就会判断那个位置才对了。而档案的话仅找一次就可以到达我们要改的地方。)

  其中最後的 54 45 53 54 就是目录名 "TEST",倒数第一个 byte 是 04,就是第 33 个 byte "Length of File Identifier",在这里 "TEST" 一共占了四个Bytes,所以是 04。
再看看倒数第 15 到 21 个 bytes,也就是表一中第 19 到 25 个 bytes 的位置,这里是记录该目录建立的日期和时间。其中 62 08 0E 换算成十进位就是 98 08 14 也就是日期是 1998 年 8 月 14 日。
再看看第 11 到第 18 个 bytes ,"Data Length" ,如果是个 档案 的话,这就是该档案的大小 (File size)。如果是个 目录 的话,则一律是 00 08 00 00 00 00 08 00 ,即 2048 bytes,也就是一个目录名就要占了一个 sector。
再看看开头第 3 到第 10 个 bytes 的位置: 1A 00 00 00 00 00 00 1A ,其实就是: 1A 00 00 00。也就是此目录在 ISO 档中所占的位置的第一个 sector 的 Logical Block Address。
Joliet 及 ISO 9660 规则
请注意:如果你是用 Joilet 档名规则制作 Image 档,档名及目录的记录区有两个位置,都必须修改,照本文件改的话会只改到一处,另一处没改到,因此,所制作的隐藏目录及超大档只在 do
S / Win 3.1 下才有效,在 Windows 95 底下都会原形毕露.
如果用 ISO 9660 档名规则的话,只有一个记录区,可以用本文件的方法修改,在 Windows 95 底下也可以保持隐藏目录及超大档。
下图以 Easy CD Pro 为例, 显示 ISO 9660 及 Joliet 档名规则设定的位置。


底下先谈到用 ISO 9660 规则制作 ISO 档时的改法 :
超大档案
  我们在制造超大档案时就是改 "Data Length" 这个位置(把活动的游标放在档名的第一个字母上,向左按 23 次 ),把它改成我们要的数字,例如 2 giga bytes,那麽在 dir 那片光碟时就会出现一个 2 giga 的档案。
十进位跟十六进位数字要互相转换时, 您需要一个 Shareware: NUMCONV.EXE ,或者用 Win95 / 98 本身的小算盘 (改成工程型) 也可以 : 如下图:

举例来说,要把档案大小改成 20,000,000 bytes,先转换成 16 进位,得到 : 1312D00 也就是 01 31 2D 00,那麽第 11 到第 18 个 bytes就要改成 :

00 2D 31 01 01 31 2D 00
  或者只改第 11 到第 14 个 bytes 也可以。如下:

00 2D 31 01       
  如果该档案是个执行档,或许还可以执行。也可以 copy 到硬碟,因为 20,000,000也不算太大。这就是一个可以用的超大档案,可以用来伪装,以及某种程度的保护。如果把它改成 2,000,000,000 会怎样呢?换算结果是 77359400 ,那麽就改为:

00 94 35 77 77 35 94 00
或:
00 94 35 77        
  这次不能执行也无法 copy 了。这就成了一个没有用的超大档案 (或垃圾档)。

隐藏目录
  再看看倒数第 8 个 byte (把活动的游标放在目录名的第一个字母上,向左按 8 次),也就是第 26 个 byte : "File Flags"。一个 Byte 是八个 bit ,这八个 bit 每一个都是一个旗标,记录这个目录或档案的属性。从 0 到 7 的排列是这样的:

7 6 5 4  3 2 1 0
  目前是 02 ,也就是这样:

0 0 0 0  0 0 1 0
< 0 > < 2 >
  即 bit 1 是 1。查表一得知当此 bit 为 1 时是表示这是一个目录。
  Bit 0 是 1 时便给了它一个隐藏属性 (H attribute)。所以如果把它改成 03 ,就会变成隐藏目录,但是可以用工具程式或 dir/a 看到。像这样:

0 0 0 0  0 0 1 1
< 0 > < 3 >
  我们要做的是那种用 DIR/A 或工具程式看不到,但是用 "CD 目录名" 却又进得去的那种隐藏目录。事实上笔者是用 "尝试错误法" (没有烧进 CD,而是用 EASY- CD MM/PRO FOR WIN3.1 所附的模拟功能,把 ISO 档模拟成 CD。) 发现从 04 到 07 都可以变成这种隐藏目录。也就是至少 bit 2 必需是 1。像这样:

0 0 0 0  0 1 0 0
< 0 > < 4 >

0 0 0 0  0 1 0 1
< 0 > < 5 >

0 0 0 0  0 1 1 0
< 0 > < 6 >

0 0 0 0  0 1 1 1
< 0 > < 7 >
  所以要制作这种隐藏目录就是把这个 byte 改成 04 (or 05~07)。

ISO 映像档说明
  这里有几个 ISO 档的  范例 ( 62,167 bytes),您可以抓回去研究看看。以下是其说明档 :
  这里有叁个 ISO 档 (用 ISO 9660 规则所制做,不是用 Joliet ) :

NORMAL.ISO : 正常的 ISO 档,里面有两个目录 : DIR1 及 DIR2 ,以及一个执行档 : vtscan.com 。
BIG_FILE.ISO : 内含一个所谓「超大档案」。这里是把 vtscan.com 的 FILE SIZE 改成 2,000,000,000 bytes,其它正常。
HID_DIR.ISO : 把两个目录: DIR1 及 DIR2 改为隐藏目录。用 dir/a 看看,仅看到一个档案 vtscan.com。DIR1 是把第 26 个 byte ,或由目录名处倒数第 8 个 byte,即 " file flags " 的部份由 02 改为 04,DIR2 是把 02 改为 05。结果是一样的。( 改为 04 到 07 都可以 ) 打 " CD DIR1 " 或 " CD DIR2 " 便可以进去该目录。
  最好是用 diskedit.exe 自行研究看看,您要烧入光碟我也不反对,但是有点浪费。 (一个 session 会花掉 13.5 mb 在 lead in 、lead out 的部份 )
测试
Windows 95/98
在 Windows 95/98 下, 可以用 WinImage 软体去读取 ISO 档的内容, 就像读取已烧录好的 CD 一样, 来测试看看是不是能达到您所要的效果。 或是用 CD-RW 来烧也可以, 以免浪费一堆空片。
WinImage 的网址是在 http://www.winimage.com/, 您可以到该网址下载展示版。
另外请参考:"把 Image 档模拟成 CD 的软体" 这一篇。
根据实地测试, 在 Win 95/98 的档案总管下, 无法看到隐藏的目录, 但在 do
S 视窗里则可以用 "CD 目录名" 的方式进去该目录。档案总管虽然看不到, 但可以用 "开始 --> 执行" 的功能, 键入正确的路径及档名, 也可以执行该档案。
DOS
在 do
S 6.x 下, 您可以用 Easy-CD Pro for Windows 3.1 的 ISO 档模拟成光碟 的功能。需要 easycd.sys,easysim.com 及 loadcd.exe 等叁个档案,这叁个档案在 Easy-CD Pro for Windows 3 1 才有。现在大概没人在用了吧! 不过用法还是保留在这里做为参考之用.
  您可以增设一个开机选项,内容像这样:

CONFIG.SYS 部份:
加上这一行: ( 不要用 DEVICEHIGH )
DEVICE=C:/ECDMM/EASYCD.SYS
去掉其他不必要的东西,例如光碟机驱动程式等。

AUTOEXEC.BAT 部份:
加上这两行: ( 不要用 LOADHIGH )
C:/DOS/MSCDEX /D:EASYCD01
C:/ECDMM/EASYSIM.COM
去掉其他不必要的东西。
  开机後用 ECDMM 目录下的 LOADCD.EXE 执行:
LOADCD /S:[ ISO 档 ] , 如 LOADCD /S:C:/NORMAL.ISO
  Return code 为 0 就是成功。可以到该模拟 CD 的磁碟机代号里去看看。
  据笔者经验以及一些朋友的反应,如果使用放在 SCSI 硬碟里的 ISO 档去模拟的话,好像都无法成功。所以请把 ISO 档存放到 IDE 硬碟再使用以上的模拟功能吧!

超大档案还原法
首先声明的是,笔者并非想宣扬盗版的非法软体,只是想就理论上来探究超大档案罢了。
工具程式
这是一些网友所写的还原程式,例如 BIG_DBT.ZIP 、 CUT_HUGE.ZIP 等等,但是并不保证对於所有情况皆可用。
它的用法是把超大档的大小还原之後 copy 至硬碟.
修改光碟映象档
如果您想把原来的光碟直接修改成正确的样子再烧录, 不想 Copy 至硬碟再重新烧录, 那麽就可以用修改光碟映象档的方法。 您可以用烧录器及烧录软体,把原来的光碟映象档读出来,再用 Norton Utility 的 Diskedit.exe 去修改。
读取光碟映象档存至硬碟 :
以 Easy-CD Pro for win95 为例,选 [Disk Info and Tools] -> [Read Track] 便可把 CD 的资料轨读出来,存到硬碟上成为一个 ISO image 档,当然硬碟要有至少 650 MB 的空间才行。
找到光碟映象档中记录该档案 File Size 的地方 :
使用 Diskedit.exe , 开启 Tools -> Find 的功能,寻找所要的档案的档名。假设档案名是 install.exe 的话,找到之後,再按 TAB 把活动的游标移到右半画面,放在字母 i 的下面,往上按两次,再往右按一次,就是记录该档案位址的地方。如果是往上按两次,再往右按九次,则是记录该档案档案大小的地方。
找出档案的真正大小, 并填至 ISO 档中记录该档案大小的位置 :
方法一 : 用 BIG_DBT.ZIP 或 CUT_HUGE.ZIP 等程式, 把超大档还原回原大小, COPY 至硬碟後, 便能得知该档案正确的大小, 将此数字转换成 16 进位後填至 ISO 档中记录该档案大小的位置, 便能完全正确的还原.
如果用 BIG_DBT.ZIP 或 CUT_HUGE.ZIP 还是无法还原, 还有以下一些比较笨的办法 (方法二和方法叁 ) :

方法二 : 先找到记录档案大小的地方,这里应该有 8 个 bytes,但是前後 4 个 bytes 应该是相似的,只不过是成镜像状排列,像这样: ( 举例而已,各档案大小不一定)
00 2E 00 00 00 00 2E 00
不过如果只修改前面 4 个 byte 的话,档案大小则只随前面这 4 个 byte 而变。像这样:

FF FF FF 10 00 00 2E 00
那麽这个档案的大小就变成了 16 进位的 10 FF FF FF (前面 4 个 BYTE 的镜像),也就是十进位的 285,212,671 BYTES 了。
如果超大档是这样产生的话,就简单多了,只要把後 4 个没改过的 BYTE 变成镜像填到前 4 个 BYTE 的位置就可以了。像这样:

00 2E 00 00 00 00 2E 00
然後把所有要改的地方改完後,再把 ISO 档烧成光碟就可以了。

方法叁 : 如果这前後共 8 个 BYTE 全改了呢?如何找出档案的真正大小?首先必须先查出该档案的位址,换算成十进位,然後再乘以一个 SECTOR 的大小,即 2048 BYTES,就可以根据这数字找到该档案实际在 ISO 档中所在的地方。例如位址是在 00 00 00 16,换算成十进位就是 22,也就是位在第 22 个 SECTOR。2048 x 22 == 45056,那麽就往下找到 OFFSET 45056 的地方就对了。
然後再往下找 (也可以用 TOOLS -> FIND),找到开始连续都是 00 的地方,这个地方就是大约档案尾端的地方了,这是因为光碟每一个 SECTOR 是 2048 BYTES,如果没用完的话,剩下的就会全补上 00,到下一个 SECTOR 才会再接续下一个档案。
不过如果档案本身尾端就有 00 00 ...,那怎麽办呢?到那一个 00 才是真正的档案终点?这问题其实没有答案。不过你可以把假设的档案终点设在这个 SECTOR 的最後一个 BYTE 就可以了,因为比原档案大小稍微大一点还是可以用的 (不是吗?超大档那麽大都可以执行了!),但是只要比原档案大小少一个 BYTE 就完全不能用的。
接着用你所决定的档案终点,减去档案起始的位址。以刚才的例子而言,如果终点是在 OFFSET 100,000,那麽 :
100,000 - 45,056 + 1 == 549,45,换算成 16 进位,就是 D6 A1 ,那麽再回到记录档案大小的那个位置,填入:

A1 D6 00 00 00 00 D6 A1
就可以了。不过这并不是精确的原档案大小。

如果连档案起始位址都改了呢?那就别管它了,因为这种档案是无法执行的,应该可以叫它 "垃圾档"。
利用超大档的光碟保护
仅用超大档来做保护, 要还原破解比较简单. 但如果配合安装程式 (如 setup.exe) , 那就比较难被破解. 不过您要懂得写程式才行.
方法就是在安装程式中加上一个门槛 : 先检查某个档案的大小, 如果该档案的大小正确, 才可以安装下去. 这个档案当然得改成超大档. 这样子一般人要盗拷此软体, 唯有光碟对拷, 因为把此超大档还原後就不能安装. 所以不可能把所有档案包括好几 Giga 的超大档 COPY 到硬碟.
这样子的保护虽然无法防止光碟对拷, 但是可以防止被轻易的制成大补帖. 因为做补帖时也要把该档案弄成超大档, 才能安装使用. 不然就对拷, 但是没有人会花钱买只有一套小软体的大补帖. 不过要是遇到破解专家, 这种保护也只是聊胜於无而已.
Joliet 规则制作的 Image 档
前面讲的修改及还原, 都只是用 ISO 9660 的 Image 档来做的, 如果要烧录 Win95 /98 长档名时, 那就要用 Joliet 规则去制作 Image 档才行, 这时要怎麽改或还原呢? 其实很简单, 大体上跟上面讲的是一样的, 但是除了照上面方式操作之外, 还要多改一个位置。
当光碟的映象档是用 Joliet 规则来制作时, 每个档案或目录名都会被记录在两个地方, 一个是跟 ISO 9660 规则一样的, 这是在 do
S 下读取的档名。如下图, 假设有一个目录名字叫 "Long File Name Directory", 那麽目录名的第一个记录区会像是如此 :

往下继续找, 不远处可以发现另外一个位置, 这里完整记录了其长档名, 如下图, 可见到 "Long File Name Directory" 等字样. 不过每个字母的前面都加了一个 00 . 前面的目录记录区 (参考表一) 则跟 ISO 9660 规则那一部份是类似的.

所以, 要改目录或档案就, 跟上面讲的一样, 把活动游标摆在目录名或档名第一个字母 前面的那个 00 位元上, 往左跳 8 个位元就是改属性的地方 (即上图 02 的位置);
若是往左跳 23 个位元, 就是改档案大小的地方。改法就跟上面提过的一样。

目录名第一个字母是 "L", 把游标放在前面的 00 位元上, 往左跳 8 个位元到达 "02" 位置就是隐藏目录要改的地方, 把它改成 04, 05 , 06 都可以 。
超大档就不必讲了, 原理跟上面讲的一样.
 
R

redsky.l

Unregistered / Unconfirmed
GUEST, unregistred user!
chcw:哪里找到的?你这篇文章到处都是“如图示”,“下图” ,新版大富翁不让贴图了
能给一个链接吗?
 
H

huzb

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.google.com/search?q=隐藏目录的加密光盘&hl=zh-CN&lr=&safe=off&start=10&sa=N
http://www.strongwell.com.cn/bootcd/hidedir.htm
http://www.gokeeper.net/NonCGI/Forum22/HTML/000102.html
 
C

chcw

Unregistered / Unconfirmed
GUEST, unregistred user!
我是从看雪学院(http://go2.163.com/%7Etoye/index.htm)的论坛上转过来的,原文
就没有图。另外在http://www.cdrdiy.com/teach/wenznr.asp?id=3上也有,但是也没有图。
 
L

luyear

Unregistered / Unconfirmed
GUEST, unregistred user!
th1977:如果对上述回答满意,可以结束问题,否则请提前问题或发表意见
 

Similar threads

S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
494
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部