首页  编辑  

如何制作隐藏目录、超大档案

Tags: /计算机文档/光盘制作和多重引导/   Date Created:

有的D光盘上面看起来没有有用的文件,但运行一个程序输入密码后就可以看到许多文件,如何做的?我知道这是另有一套目录表欺骗Explorer的结果,但不知道如何来做

这个问题其实非常简单的。

请看附录的文章。主要方法是用EASYCD做ISO9600格式的映象文件。再修改映象文件的某几个地方。由影象文件转录的光盘目录就可以隐藏了。要读出来,自己写EXPLORE程序放在隐藏目录中,由根目录下的AUTO调用SETUP再调用自己的EXPLORE就OK了。

如何制作隐藏目录、超大档案

                         作者 : T.C. Tsai

           发表日期:08-15-1996  修订日期:04-16-1999

                       [1] 前言

                       [2] 光碟上的目录记录区

                       [3] 制作一个 ISO 档

                       [4] 目录记录区举例说明

                       [5] Joliet 及 ISO 9660 规则

                       [6] 超大档案

                       [7] 隐藏目录

                       [8] ISO 映像档说明

                       [9] 测试

                       [10] 超大档案还原法

                           [10-1] 工具程式

                           [10-2] 修改光碟映象档

                       [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 档,档名 及目

   录的记录区有两个位置,都必须修改,照本文件改的话會只 改

   到一处,另一处没改到,因此,所制作的隐藏目录及超大档只

   在 DOS / 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 ):

       1.NORMAL.ISO : 正常的 ISO 档,里面有两个目录 : DIR1

         及 DIR2 ,以及一个执 行档 : vtscan.com 。

       2.BIG_FILE.ISO : 内含一个所谓「超大档案」。这里是把

         vtscan.com 的 FILE SIZE 改成 2,000,000,000 bytes,其它正

         常。

       3.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 的网址是在 www.winimage.com, 您可以到该网址下载

   展示版。

   另外请参考:"把 Image 档模拟成 CD 的软体" 这一篇。

   根據实地测试, 在 Win 95/98 的档案总管下, 无法看到隐藏的目

   录, 但在 DOS 视窗里则可 以用 "CD 目录名" 的方式进去该目

   录。档案总管虽然看不到, 但可以用 "开始 --> 执行" 的功能, 键

   入正确的路径及档名, 也可以执行该档案。

   DOS

   在 DOS 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 档中记录该档案大小的位置 :

       1.方法一 : 用 BIG_DBT.ZIP 或 CUT_HUGE.ZIP 等 程式, 把超

         大档还原回原大小, COPY 至硬碟後, 便能得知该档案正

         确的大小, 将此数字转换成 16 进位後填至 ISO 档中记录

         该档案大小的位置, 便能完全 正确的还原.

         如果用 BIG_DBT.ZIP 或 CUT_HUGE.ZIP 还是无法还原,

         还有以下一些比较笨的办法 (方法二和方法三 ) :

       2.方法二 : 先找到记录档案大小的地方,这里应该有 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 档烧成光碟就

         可以了。

       3.方法三 : 如果这前後共 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

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

       4.如果连档案起始位址都改了呢?那就别管它了,因为这

         种档案是无法执行的, 应该可以叫它 "垃圾档"。

               利用超大档的光碟保护

   仅用超大档来做保护, 要还原破解比较简单. 但如果配合安装程

   式 (如 setup.exe) , 那就比较难被破解. 不过您要懂得写程式才行.

   方法就是在安装程式中加上一个门槛 : 先检查某个档案的大小,

   如果该 档案的大小正确, 才可以安装下去. 这个档案当然得改成

   超大档. 这样子一般人要盗拷此软体, 唯有光碟对拷, 因为把此

   超大档还原後就 不能安装. 所以不可能把所有档案包括好几

   Giga 的超大档 COPY 到硬碟.

   这样子的保护虽然无法防止光碟对拷, 但是可以防止被轻易的

   制成大补帖. 因为做补帖时也要把该档案弄成超大档, 才能安装

   使用. 不然就对拷, 但是没 有人會花钱买只有一套小软体的大补

   帖. 不过要是遇到破解专家, 这种保护也 只是聊胜於无而已.

             Joliet 规则制作的 Image 档

   前面讲的修改及还原, 都只是用 ISO 9660 的 Image 档来做的, 如

   果要烧录 Win95 /98 长档名时, 那就要用 Joliet 规则去制作 Image

   档才行, 这时要怎麼改或还原呢? 其实 很简单, 大体上跟上面讲

   的是一样的, 但是除了照上面方式操作之外, 还要多改一个 位

   置。

   当光碟的映象档是用 Joliet 规则来制作时, 每个档案或目录名都

   會被记录在两个地方, 一个是跟 ISO 9660 规则一样的, 这是在

   DOS 下读取的档名。如下图, 假设有一个目 录名字叫 "Long File

   Name Directory", 那麼目录名的第一个记录区會像是如此 :

   往下继续找, 不远处可以发现另外一个位置, 这里完整记录了其

   长档名, 如下图, 可 见到 "Long File Name Directory" 等字样. 不过

   每个字母的前面都加了一个 00 . 前面 的目录记录区 (参考表一)

   则跟 ISO 9660 规则那一部份是类似的.

   所以, 要改目录或档案就, 跟上面讲的一样, 把活动游标摆在目

   录名或档名第一个字母 前面的那个 00 位元上, 往左跳 8 个位元

   就是改属性的地方 (即上图 02 的位置); 若是往左跳 23 个位元,

   就是改档案大小的地方。改法就跟上面提过的一样。

   目录名第一个字母是 "L", 把游标放在前面的 00 位元上, 往左跳

   8 个位元到达 "02" 位置就是 隐藏目录要改的地方, 把它改成 04,

   05 , 06 都可以 。

   超大档就不必讲了, 原理跟上面讲的一样。