微软封装研究纪实

    本来都不想写这篇文章了,因为所有研究工作都已经结束了,可以说,整个研究工作是以失败告终的,最后的结果是流出泄露版后重新下载的,用了一夜和白天上午半天。非常地失败啊!
    直到今天中午,也就是08月14日中午,我才彻底地了解了所有的原因。稍后会说明一切。
    让我们回到一个月前,也就是2009年07月13日。以前流传说这一天微软会对Windows 7的开发工作进行sign-off。sign-off就是最终确认的意思。微软在编译完一个RTM版本后会对其所有代码和组件进行测试,这是一个非常详细的测试,少则用2天,多则用10天。测试的目的是最后确认每个组件都是正常工作的。测试期间,同样要用服务器生成即将发布的2000个以上的ISO文件。就在那个时候,我开始关注Windows 7,主要平台是远景论坛、翱翔的博客和CnBeta。三个地方各有特点。在论坛里我获得了不少信息,这些都是了解微软内部的途径。
    我刚去的时候,论坛里有个神秘人物刚刚注册,并且依次放出如下官方ISO:6.1.7600.16384的英文64位及其语言包、简体中文32位,之后是什么就不知道了,因为他还没放出中文的时候,官方内部已经确定这个版本存在严重问题,其中指出的是IE8有问题。于是,官方在他放的同时就决定重新生产ISO,版本号6.1.7600.16385。但是,此人还是放出了中文版,成为了一个过时的产品。本质上说,到了今天,那些没有发布的测试版就应该被彻底抛弃了,要它们也没用。最后,16385成了RTM。
    后来,微软制作完了16385就开始检查各个组件。这时候也流传出了这个版本的各个泄露版本。我本来只想要一个简体中文64位的版本就走人,没想到,这一等就是一个月啊。
    生成RTM最初的几天里,泄露的都是散装版。后来才泄露了英文的官方版本和语言包。不过,中文版本始终没露面。我只好等啊等,也没有一个结果。等的时间长了,就有些烦了。在坛子里逛着,就开始研究封装了,因为它是唯一可以从散装版得到原版的途径。随着研究的深入,才知道了里面的一些内幕。说白了,这坛子水很深啊。
    当然,最初的成功是在Windows 7的测试版上做的。我第一次封装成功7106的中文64位ISO只试验了5次就成功了。主要就是要分清楚微软的工具和封装的方法。微软的工具有两个:CDIMAGE和OSCDIMG,前一个内部使用,后一个授权给OEM。我们要得到原版就得用泄露出来的前一个,而且还得是2.54版的。这也比较难,因为网上流传太多,鉴别不是很容易,我的2.52版就是假的,是从2.47修改过来的,结果是我又找了一个真的。确定真实版本后,就比较好办了,开始试验封装。为了找参数,脑子里也想了很多,最后,从开始研究到成功封装出第一个官方版本,我只用了几个小时。
    成功的喜悦是兴奋而短暂的,接下来就上马别的项目。我把成功的代码命名为标准封装黄金代码。上马别的项目就难了。当时手里只有一个散装版简体中文64位,我就只攻这个项目。当然,所有尝试都失败了。于是我深入研究封装,封装了手里的其它早期ISO,包括XP的和2008的。逐渐地,我明白了微软的封装策略,微软在XP时代都是封装得很标准,时间是指定的整点,CRC32也让他们弄成了不可用。在2008的时候他们恢复了CRC32的校验,而到了Windows 7,他们把封装时间指定为一个精确到秒的时间。我当时没想过为什么会这样,直到我想要封装Windows 7的OPK时,我才明白了。那个OPK是一个无法封装的文件,原因是封装的时候没有指定时间,这样就无法从散装得到原装。而其它光盘是为了美观而指定时间的,所以才可以封装成原版。同时,一个问题出现了。微软为什么要刻意找一个一般的时间呢?答案是为了防止爱好者自己封装。如果指定一个整点,那么我们顶多测试十几次就可以得到原版了。而精确到秒后,没人能猜出是多少秒了。想到这一点,就不难发现,微软的散装文件是不能给我们任何启示的,因为各个ISO的封装时间是指定的,为了防止被猜出,它们之间没有一点关系,所谓的研究也没有任何意义。直到CnBeta的特邀撰稿人Viva放出微软官方的Connect上的原版ISO时,我才知道我想要的时间,而之前所有的猜测都是徒劳。
    这里说说Viva这个人,他在之前放出了微软的eOpen上的ISO,说是EA渠道的,我看了是OEM的ISO,而且是VOL,即批量授权。最终,谁也没有说清楚这个EA表示什么。他发的任何信息都是官方原版,而且他酷爱使用香港繁体中文。我认为,这一定是一个香港人,而且,他一定有一些企业的背景,可以拿到别人拿不到的ISO。我怀疑他工作的企业或者朋友工作的企业和微软有莫大的关系,很有可能是微软的订阅用户。他拿到ISO的机会比任何人都大,都方便。而且这个人说了,他是检查了邮件之后知道微软已经发布了ISO的。他还说自己有七八个硬盘装满了东西,还准备买两个1T的硬盘。他还想出售自己的微软官方账号。听了这些,我们都应该知道这个Viva的神通广大了。这是怎么样的一个人啊。做人真是有差距啊。人家想拿什么拿什么,我们呢,什么也没有。有点嫉妒他。
    虽然在做Windows 7的封装的时候,我曾经出门办一些事,但主要还是集中精力封装一个版本。可恶的是,我下载的第一个散装版被第二个散装版证明为缺少文件,这在后来的远景坛子里的一个帖子里得到证实。于是我后来换了第二个版本的文件进行封装。虽然我封装出了大小一样的文件,但校验始终不通过。
    在研究过程中,我大量地看了坛子里的人的发帖,认识了几个封装的人物。他们讨论得有声有色。其中一个叫粽子的人说得最多,每次都是他出风头。我曾多次尝试PM他,但他只和我说过一句话。逐渐地,我感到这些人没有一个人愿意和我讨论这些东西,似乎在维持一个小组,拒绝我的加入。索性我就不理他们了,我自己也能研究。
    其实写这篇文章主要是因为不想把心里对粽子这种人的怨气埋下。因为这些人太自傲了。我多次试图与其接触都未果,坛子里也在封杀类似的讨论,都是一群不懂技术的蠢蛋,虽然我刚开始也不懂,而且有人认为那么做是在骗人,真是的,他们新来的那些人不懂技术也不学习,一味地封闭技术,不是去正视现实,而只是相信官方,拒绝技术,要我说,他们蠢到家了。而粽子这样的人也不是积极讨论的,总是藏着掖着,没有一个良好的学术氛围,这就像是中国的教授们一样。试想这样的讨论气氛,怎么能够让我们中国的技术进步呢?后来,我是彻底失望了,我也不再去理他们了,即使我加入了论坛的群,但是我知道有一天他们也会把我踢出来。那就别让我在群里待着了。远景论坛毕竟是一个商业网站,坛主们只在乎工作和论坛的盈利,不会顾及什么学术。现在的社会啊,真是的,什么研究成果都会被扼杀了。我们无非只是从坛子上获得原版而已,别无用处。
    说着说着,我越来越对社会没信心了,待人不友好,这都是技术人员的毛病。想想还是自己在自己的世界里娱乐吧,有什么意思呢,你想和别人合作别人也不愿意,真没意思。还不如沉浸在自己快乐的世界里,虽然艰苦,但也有快乐。和别人合作只能惹来麻烦。我真的恨透了这个粽子了。我极少发帖,别人可能根本就不知道我。在研究粽子的时候,我发现他真的优势明显。他的带宽很大,一般很快就能得到原版的ISO。那么大的文件,我至少要下载一晚上,他只需要几分钟,这让我想起了当初我在学校里下载Vista的时候。那时候Vista刚刚发布,我在学校只用了5分钟就拽下来了。这个人除了有巨大的带宽,还有至少3个简体中文的64位的散装版,这样,他封装出来的概率就比我要大。最终的结果是,等Viva发布了以后,第二天他就封装出来了,而且用的是他下载的散装版。这就不对了,因为经过我后来的研究,在我找到的两个散装版里,没有一个可以封装出原版。原因在坛子里的一个研究封装的人的帖子里有,因为他下载的那个广为流传的散装版是我第一个下载回来的。可惜他只有那一个,而我有两个。更可惜的是,他那个缺少文件,我的另外一个不缺少文件。可就是这样,不幸的是,我们拥有的散装版的核心文件install.wim的校验值和原版的都不一样。这是在Viva发布以后才知道的。也就是我们无论如何努力,都无法封装出原版,因为我们没有原版的散装文件。我们拥有的文件不可能封装出原版。这个粽子凭借自己的优势,竟然拥有至少3个散装版,而在我没有的那个上面,他封装出了原版。但是,时间参数拦住了他,他的成功也是在Viva发布之后的事情了。就凭粽子的优势,足够比任何其他研究者更快地得到任何信息。这样一个人不可恨吗?我是这样认为的。这才叫财大气粗呢,可惜他毁了他自己。就像我在QQ游戏的斯诺克里看到的某些人那样。我认为他们的天分很高,技术很好,可惜啊,就连一个基本的斯诺克也不解,直接主动摔袋自毁。这不仅是对斯诺克的侮辱,还是对他们自己的侮辱。这些人真的不配在斯诺克领域待着。现在一切都真相大白了。没有必要争什么了。一个月过去了,所有事情的真相都摆在眼前了。有什么意思呢?我现在才知道,我原来的工作没有任何意义。那个粽子,我无力改变他什么,好自为之吧。
    说到底,计算机不过就是0和1的组合,我们追求的就是那些特定的0和1的组合,我们何必要为了这清清楚楚的0和1而浪费我们自己呢?计算机,无非也只是赚钱的工具。如果它不能卖,也就没有存在的理由。人世间,一切都是为了钱。有钱的人就受到尊敬,即使那钱不是好来的。没钱的人就被人看不起。社会上用坑蒙拐骗来赚钱太多了。有很多人都直接告诉你他是在卖假货。这个社会真的是没救了。我们在社会上也只是混口饭吃,还谈什么科学啊。现在已经没有多少人真正想要做学问了。一部当年广受追捧的英特尔的手册如今也是无人问津了。人们眼中只有金钱,没有别的了。就光靠你一个人能做什么呢?一个陈寿福为了钱进去了。一个龙晓伟为了钱在维权。社会已经不可救药了,我们除了孤芳自赏以外还能得到什么?还是美国好啊,美国的科技如此发达,人们只有享受。其实,当我从英特尔的手册里读到CPU的原理的时候,我就知道,计算机是多么简单。0和1。没别的。汇编语言。搞计算机的人都赚钱很多吗,我们一辈子在奋斗什么?像我爸爸那样奋斗了一辈子,最后落一个半身不遂。人生实在是没什么意思。所以,虽然我喜欢计算机,我也会为了计算机而工作一辈子,可是,我的职业未必是计算机了,因为我已经看透了这个行业。这个行业对我来说似乎已经没有什么秘密了。我清楚地知道软件业的每一个部分,虽然我不知道的事情很多,但如何开发我已经知道得差不多了。这个行业对我来说如此透明。从课堂上知道,搞金融的人似乎很赚钱,我也想去做做那些东西,毕竟钱多的地方吸引人。当一个社会的人都只认识钱的时候,你也就没有必要追求什么境界了,还不如去赚钱,然后想想每天写程序的苦与乐,这才是有意思的人生。
    说了这么多,说得有点跑题了。本来想说的是封装的事情,其实刚才已经说完了。奉劝自己吧,微软为了防止我们封装出一样的ISO,已经在时间这个参数上下足了功夫,单凭个人是难以猜出时间的,也是根据现有时间无法猜出的,因为微软永远想在了我们前面。所以,掌握了封装的技术固然好,也别费功夫猜测时间了。我真的笑自己,干了一个月错误的事情。这仅仅是因为微软的魅力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CDimage 是一款镜像制作工具,出自微软。它是微软内部“专用的”ISO 封装工具,不向外提供;所以,我们平时所看到的、使用的都是从微软内部泄露出来的~!!CDimage是系统整合不可少的利器,大大节省了光盘存放空间;我们平时见的"N合1”光盘大都是由CDimage(或内置CDimage内核的光盘工具,如Easyboot等)创建的。 但是我想网友们最关心的或许并不是以上问题,而是“CDimage到底能不能封装出SHA1值和官方一致的ISO镜像?”。下面我们就来说说CDimage的用法--其实你英文好的话用help命令查看即可!以下是常用参数[2.47版]的中文说明: -l 卷标,无空格(例如:-lMYLABEL) -t 所有目录和文件的时间标记,无空格,任意分隔符(例如:-t12/31/2000,15:01:00) -g 把文件时间从本地时间转换为GMT时间 -h 包含隐藏的文件和目录 -n 允许长文件名(比DOS的8.3文件名长) -nt 允许长文件名,与NT3.51兼容(-nt与-d不能同时使用) -d 不强制转换文件名的小写字母为大写字母 -c 使用ANSI文件名,不用源OEM文件名 -b "El Torito"光盘启动文件,无空格(例如:-bc:\location\cdboot.bin) -p "El Torito"启动目录的平台ID -e 在El Torito启动目录中不要设置软盘模拟方式 -s 在镜像文件中签上数字签名(无空格,给出RPC服务器名和结束点名称,像这样-sServerName:EndPointName) -x 在镜像中计算并制作"AutoCRC"值 -o 优化容量:重复的文件只制作一次 -y 试验选项,跟一个数字(例如:-y1),为试验的目的而产生ISO-9660的非标准变化: 1 在文件名后续加版本号';1'(7.5.1) 2 圆整目录大小为2K的倍数(6.8.1.3) 5 先写\i386目录,逆序 6 允许目录记录正好排到扇区结束点(符合ISO-96606.8.1.1但是突破了MSCDEX) 7 产生NT4.0下的16位应用程序时报警 -oc 更慢的重复文件探测方式:二进制比较而不是MD5哈西值 -oi 比较文件时忽略diamond压缩时间标记 -os 建立镜像时显示重复的文件(-o选项可以组合,像这样:-ocis) -k (keep)即使某些源文件打开失败也生成镜像 -m 忽略镜像文件最大681,984,000bytes的限制 -a 《分配概要》显示文件和目录的大小 -q 只扫描源文件,不建立镜像文件
微软内部镜像封装工具:CDIMAGE_2.54 参数: CDIMAGE 2.46 CD-ROM and DVD-ROM Premastering Utility Copyright (C) Microsoft, 1993-2000. All rights reserved. For Microsoft internal use only. Usage: CDIMAGE [參數] 來源目錄 目標影像檔 -l 光碟標籤,不含空白鍵 (e.g. -lMYLABEL) -t 將所有檔案和目錄都設為同一日期,不含空白鍵和任何特殊符號 (e.g. -t12/31/2000,15:01:00) -g 將時間設為 GMT 時間而非本地時間 -h 包含隱藏檔和隱藏目錄 -n 允許長檔名 (超過 8.3 檔名) -nt 允許長檔名,但受限於 NT3.51 相容性 (-nt 和 -d 不可同時使用) -d 不強制將小寫檔名改為大寫檔名 -c 使用 ANSI 檔名以對應原始目錄中的 OEM 檔名 -j1 編碼為 Joliet Unicode 檔名並在 ISO-9660 名稱空間中產生相容於 DOS 的 8.3 檔名格式. (可在 Joliet 系統或其他一般的 ISO-9660 系統中被讀取, 但某些檔名在 ISO-9660 名稱空間中可能會被改變, 以遵守 DOS 8.3 與 ISO-9660 命名限制) -j2 編碼為 Joliet Unicode 檔名而不遵守 ISO-9660 檔名規則 (必須在 Joliet 作業系統從 CD 讀取檔案) 當使用 -j1 或 -j2 參數時, -n, -nt, 和 -d 參數無法生效 並且不可使用. -js 以 -j2 參數將影像檔中的非 Joliet 檔案 "readme.txt" 編碼. (e.g. -jsc:\location\readme.txt). 這樣可以讓這張光碟的這個唯一的檔案在不支援 Joliet 格式的系統中 (Windows 3.1, NT 3.x...等)被看見. -u1 編碼為 "UDF-Bridge" 媒體 -u2 編碼為 "UDF" 檔案系統而不對映 ISO-9660 檔案系統 (必須有 UDF 相容作業系統才可讀取檔案) -ur 以 -u2 參數將影像檔中的非 UDF 檔案 "readme.txt" 編碼. (e.g. -usc:\location\readme.txt). 這樣可以讓這張光碟的這個唯一的檔案在不支援 UDF 格式的系統中 被看見. -us 分散 UDF 檔案 -ue embed file data in UDF extent entry -uf embed UDF FID entries -uv UDF Video Zone compatibility enforced -b "El Torito" 開機區段檔案,不佔檔案空間 (e.g. -bc:\location\cdboot.bin) -p Platform ID for the "El Torito" boot catalog -e 在 El Torito 開機記錄中設置不模擬軟碟。 -s 在影像檔中加入數位簽章 (不佔空間, 必須提供 RPC 伺服器與終點名稱如下 -sServerName:EndPointName) -x 在影像檔中計算與編碼 "AutoCRC" 值 -o 處理重複檔名以將影像檔大小最佳化 (譯註:縮小影像檔容量,即本程式之精華所在) -oc 使用二進位比對代替 MD5 雜湊值, 這會以較慢的速度比對重複的檔案. -oi 比對檔案時忽略高度壓縮的時間戳記 -os 建立影像檔時顯示重複的檔名 (-o 等類似參數不可簡寫為 -ocis) -w 依照數字提供不同的警告等級 (e.g. -w4) 1 回報非 ISO 或非 Joliet 相容檔名或路徑 2 回報非 DOS 相容檔名 3 回報長度為零的檔案 4 回報每一個加入影像檔中的檔名 -y 依照數字提供不同的測試選項 (e.g. -y1),用於測試用途, 可產生不遵守 ISO-966

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值