2005年07月01日

原帖地址:

http://bbs.wuyou.com/cgi-bin/topic.cgi?forum=34&topic=9419&show=250
http://bbs.wuyou.com/cgi-bin/topic.cgi?forum=34&topic=9421&show=250 

longu@wuyou原创,转载请注明  

   看到这个问题论坛上老有人问,就把我知道的一些东西写下来,作为给新手的回答,高手们就不用看了:)此处的讨论针对ISO映象。
   
   超大文件,一般指显示大小为2G或者更大的文件。其实可以追溯到早期光盘防复制时期采用的技术。我有一本电子书《光盘刻录保护破解实战手册》,讲述比较详细,此处就不多说来源了。
   
   超大文件可以在一定程度上防止复制,因为把ISO解开的话真的需要这么大空间。当然,我说在一定程度上,因为下面就要讲到怎么搞定它。
   
   为什么本来只有1,2M的文件大小可以变成2G。这里要涉及ISO文件格式的问题。不过,我也没有耐心去把ISO9660标准从头到位看完。大概的原因是ISO中的每个文件属性不只有一份,而是保存在几个地方,到底几份我也不清楚。造成超大文件的原因是某处文件属性中的大小字段被修改,这样文件内容还是只有这么多,而在某些软件比如UltraISO下就显示成2G之类的。这里的2G没有钉死,完全可以修改成其他大小。
   
   不过还有一个问题,如果把所有地方的属性都修改了,这张光盘确实防复制了,但连光驱也得不到正确长度值,不知道怎么读取文件,从而也只有扔了算了。现在我们看到的ISO,一般是刻成光盘正常,而用ISO编辑软件显示属性是超大的。这里关键的是一个文件的几份大小属性中有一个被改成超大,而还有别的大小是正常的。从这个意义上来说,只要光驱能读的有超大文件的盘,就没有办法防复制。
   
   下面说说生成超大文件和解除超大文件的方法。
   根据上面的叙述,要生成超大文件有主要以下两种方法,其实也就是一种,都是通过上面说的修改文件属性:
1 熟悉ISO9660规范,懂得ISO文件中各个字段定义,长度等等,然后手动修改欲变为超大文件的文件的长度属性。这种方法要求高了点,也容易出错,我是不会考虑的了,呵呵。
2 复杂的事情就让软件来做好了。因此可以很容易修改普通文件成超大文件的软件也可以考虑。此类软件还是不少的,不过国产的不多。我估计很多人用的是小有名气的光盘加密大师。没别的,就贪图它中文的,使用也还算方便,鼠标一点,就可以把普通文件变成超大文件,再一点,又变回来了。
   
   相应的,要把超大文件变成普通文件也就是两种方法:手动修改或者用光盘加密大师之类的软件逆向操作。这里还有一个问题,下文会讲到。

   注意:如果你并不在乎ISO里面显示的怎么样,而只是想把其中的超大文件提取出来,这里提供一个更方便的方法,可以不用使用光盘加密大师之类,那就是超强的isobuster。
用它打开含有超大文件的iso文件,可以看到软件的左边部分,标有红色ISO字样图标点开,就看到光盘的整个目录,里面显示的文件属性和UltraISO中一样,也就是说超大文件显示的属性是2G。下面标有蓝色》》》的图标点开,目录结构和上面的一样,但是奇迹出现了,此处的文件大小显示的是正常的,包括超大文件也规规矩矩露出真实面目。
    

    这样,提取文件也简单了,直接在展开下面的目录,选择需要的超大文件,右键选抽取就可以提取出来。还可以邪门一点,在上面的目录结构中选中超大文件,右键选抽取,会报告光盘读取错误,不管它,确定之后,也会发现超大文件被成功提取出来成为正常文件。
   
   但是这种方法还有一个大问题,就是如果光盘加密大师里面对文件选择了隐藏,isobuster中就不会显示出来,自然要提取也无从着手,所以如果同时对一个文件设置了超大和隐藏属性,isobuster看来无能为力了。
   
   别着急,下面就来说说怎么对付光盘加密大师和隐藏文件。

    上篇还有几个问题没讲清楚,现在就来说一下。
   
   实际上这篇帖子的思路跟我当时遇到问题解决问题的过程是一致的。OK,回顾以下,要提取超大文件,只要用isobuster,但是如果被光盘加密大师隐藏了就没法,那么怎么解决隐藏问题?
   
   光盘加密大师可以对ISO文件设置密码,当用光盘加密大师编辑这个ISO文件的时候需要提供密码,注意:这里说的是用光盘加密大师编辑,如果用其他软件来打开这个文件就不需要。下面就来破解这个密码。本论坛的附骨之蛆已经给出了密码表,这里我来说以下详细的过程。
   
   我跟不少人一样,第一次遇到光盘加密大师的密码是想编辑snoopy的dos维护光盘映象的时候。
   
   从最简单的开始,首先用UltraISO生成一个空的ISO文件1.iso,然后复制一份为2.iso,用光盘加密大师对1.iso加密,然后用文件比较工具一比较两个文件不同之处,关键修改点立刻就出来了。再多试几个不同密码加密,对应关系也出来了。这里还是要批评一下光盘加密大师,这样几乎明码的方式所谓加密效果等于0。最不济也要先作个md5之类的hash再保存。
   
   OK,言归正传。
   普通的ISO文件和用光盘加密大师加密之后的ISO文件不同之处在于从偏移0×8374H开始的几个字节,视密码长度而定。如果加了密码,0×8374H是一个标志值0×57,这个值很重要,接下来存放的是逆序的经过变换的密码值,如何变换,很简单:
   密码的每一位的ASCII*2,就是这里存放的值,注意是逆序的。
   
   举个例子,密码为123的话,ASCII值分别为0×31,0×32,0×33,那么变换就是2倍变成0×66,0×64,0×62,逆序存放加上标志0×57,那么从0×8374H开始的四个字节依次为0×57,0×66,0×64,0×62。如图:

 现在来看看snoopy光盘,从0×8374H开始的字节依次是:0×57,0×60,0×6A,0×6E,0×60,0xD2,0xEA,0xD0,0xDC,0xD2,0xF0
   除第一个字节0×57是标志字节外,把其余字节逆序,然后除以2,得到的值查ASCII码表就获得了密码:xinhui0750
    好了,现在我们已经知道怎么算出光盘加密大师的密码了,是不是很开心?拿到一个加密的光盘可以直接算出密码,然后可以用光盘加密大师任意编辑,包括把超大文件变成普通文件。
   
   慢着,每次要这么计算查表也挺累的,还有更方便的方法么?yes,前面说了,第0×8374H个字节为标志值,经过试验可以发现该字节为0×57时,光盘加密大师才去检验密码,如果该字节为任何其他值,光盘加密大师就认为该映象没有密码从而可以顺利打开编辑。这下只要改半个字节,比如把0×57改成0×50,够简单了吧。
   
   也许你会打破沙锅问到底,还有没有其他办法了?这里奉上我在制作ISO过程中偶然发现的方法。其实原理都是一样的。
   
   用UltraISO生成或者编辑过的ISO文件,UltraISO都会留下自己的版本信息。不巧的是,这个版本信息保存在从偏移0×8373H字节开始的地方,也就是说从0×8373H开始改成了ASCII字母ULTRAISO,后面还有版本号。
    这里的重点在于0×8374H处的字节是光盘加密大师的标志值,现在被ULTRAISO改成了字母L的ASCII值也就是0×4CH,回想一下上面说的,标志值只要不是0×57H,光盘加密大师就认为没有密码。这样第三种方法也出来了:用UltraISO打开被光盘加密大师加密的文件,随便修改一点什么,比如加一个文件,改某个文件的属性之类。不过我习惯修改光盘的卷标,然后保存。很容易吧,光盘加密大师的密码就这样破了。
   
   好了理一下思路,遇到含超大文件的ISO用光盘加密大师直接打开把超大文件变成普通文件或者用isobuster提取。如果有密码,或者没有密码但是超大文件同时有隐藏属性而isobuster看不到的,或者算一下密码,或者改一下0×8374处字节内容,或者用UltraISO随便编辑一下ISO并保存,这样就得到或者清除了密码。可以用光盘加密大师打开,接下来一切由你掌握了,爱怎么着怎么着。
 
  说完了,怎么样,对付超大文件和光盘加密大师就这么简单。
 
  提醒:如果用编辑器直接修改ISO文件的,不要用UltraEdit32,要很长时间才能打开。推荐用winhex,一下就打开了,够猛。