Xbox-破解指南-全-

Xbox 破解指南(全)

原文:Hacking the Xbox

译者:飞龙

协议:CC BY-NC-SA 4.0

前言 -

README.1ST

微软®的 XboxTM 游戏机是一款令人兴奋的硬件设备,不仅仅因为它可以玩最新的视频游戏。功能强大且价格低廉的 Xbox 有潜力被用作 PC、一体式媒体播放器,甚至网络服务器。不幸的是,关于如何探索和修改现代电子硬件(如 Xbox)的书籍寥寥无几。大多数电子教科书都是理论导向且非常专注于理论,而真正的黑客活动需要广泛实用的技能和知识。此外,我小时候作为灵感的那些关于硬件黑客的实用书籍,由于技术发展迅速,早已过时。本书旨在填补理解和逆向工程现代计算机的实用指南的需求:一本面向新一代黑客的手册。

黑客 Xbox 的最终好处是其教育价值,正如俗话所说,“给鱼吃一天;学会钓鱼,吃一辈子。”因此,本书专注于介绍基本的黑客技巧——焊接、逆向工程、调试——给新手黑客,同时提供对硬件的参考和洞察,这些可能对经验更丰富的黑客有所帮助。Xbox 已经为安全社区和黑客社区提供了教育价值:不是因为它是安全性的杰出例子,而是因为它是由一家大公司制造的高知名度、高销量产品,其董事长最近将其重点定义为安全性。¹ Xbox 的经验表明,在敌对用户环境中建立可信赖的客户端是困难的,即使是对于一家大型的、资金充足的公司也是如此。一个观察结果是,构建廉价、可信赖的硬件客户端的风险和难度为可以信赖此类客户端硬件的秘密的重要性设定了上限。此外,Xbox 提供了一个一致的教学示例,在撰写本书时,有近 1000 万几乎完全相同的单位。Xbox 的架构与普通 PC 的相似性为 Xbox 黑客活动增添了更多的教育价值,因为本书中的许多讨论也直接适用于更广泛的 PC 主题。

Xbox 破解的另一个有趣方面是跟随 Xbox 的地下硬件黑客社会。破解 Xbox 的人和他们在其中获得的专业知识,即使 Xbox 已经变成尘封的庭院拍卖品,也将继续具有相关性。因此,这本书有意识地关注了这一社会。我包括了几个 Xbox 破解人物的简介。希望人们能通过这些榜样,拿起螺丝刀和烙铁,开始破解。在长期来看,培养年轻一代这种探索精神对于保护推动技术革命至今的杰出工程师群体至关重要。许多今天的工程师都是从破解和摆弄业余无线电、电话和计算机开始的,那些在当年附带完整电路图和源代码的设备。这个工程人才库对于维持健康的经济和计算机时代的强大国家安全至关重要。

视频游戏机市场

2002 年是一个动荡的年份,不仅国外如此,技术市场也是如此;个人电脑销量持平,服务器业务萎缩,电信市场(除少数例外)看起来惨淡。尽管技术市场处于熊市,但视频游戏硬件、软件和配件市场却迎来了一个里程碑式的一年,总销售额达到 103 亿美元——比 2001 年增长了 10%。²这相当于 2001 年美国唱片业的 130 亿美元销售额。

尽管视频游戏市场庞大,但运营一个盈利的视频游戏机业务是一项艰巨的挑战。视频游戏客户挑剔、时尚且节俭。他们要求高性能、性感的游戏机硬件,价格却与一顿豪华家庭晚餐或一次看医生的访问相当。这种节俭与对高性能游戏硬件的期望相结合,迫使游戏机供应商以亏损的价格销售硬件。因此,游戏机供应商采用了“封闭式游戏机”业务策略:游戏机作为亏损领导者销售,利润来自未来游戏标题的销售。这种业务策略需要大量前期投资于游戏机硬件和广告。为他们的硬件创造市场是游戏机制造商的责任,以便游戏开发者感到舒适地投资时间和金钱在这个平台上。

现实困境是没有人愿意购买游戏标题很少的控制台。因此,建造和部署数百万台硬件,以及承担数亿美元的前期硬件损失的风险几乎完全由控制台制造商承担。结果是,目前游戏控制台市场上只有三家玩家:索尼、任天堂和微软。在这三者中,索尼在控制台市场上遥遥领先,而任天堂凭借其 Gameboy 系列产品占据了便携式市场的份额。微软是游戏控制台市场的新玩家。争夺第二名的比赛尚未确定。2003 年初,Gamecube 在日本和欧洲的销量领先于 Xbox,而在庞大的北美市场上,Xbox 的销量则领先于 Gamecube。

对于封闭式控制台商业模式的成功至关重要的是将消费者锁定在购买仅批准的、带有版税的游戏标题上。换句话说,盗版和未经批准的游戏标题可能会破坏企业的盈利能力。因此,控制台必须采用阻碍游戏复制和未经批准的游戏开发和分发的安全机制。世嘉 Dreamcast 的失败就是一个明显的例子,说明了当安全机制失败时会发生什么。

Dreamcast 于 1998 年 11 月在日本上市。Dreamcast 使用的图形加速器 NEC PowerVR2 DC 芯片的生产问题限制了最初的发货量。接下来的三年对 Dreamcast 来说是一段过山车般的旅程。像《灵魂能力》、《生死格斗 2》、《生化危机》、《疯狂出租车》和《 Shen Mue》这样的热门游戏提升了 Dreamcast 的受欢迎程度,而索尼 PlayStation2 的上市则蚕食了 Dreamcast 的销量,最终损害了软件开发者的信心。讽刺的是,尽管 PlayStation2 拥有额外的动力,但 Dreamcast 的图形质量与早期 PlayStation2 的标题,如《生死格斗 2》相当或更优。(PlayStation2 编程困难,开发者花了几年时间才充分发挥其潜力。)

梦幻代号棺材的最后一根钉子是在 2000 年的春夏之交被敲进的。一个德国黑客组织,乌托邦团队,在梦幻代号的掩码 ROM BIOS 中发现了后门,允许梦幻代号从标准 CD-ROM 启动。名义上,梦幻代号使用一种专有格式,称为“GD-ROM”进行游戏发行。GD-ROM 格式不能使用标准 CD 或 DVD 刻录机复制。然而,梦幻代号 ROM BIOS 中的后门使得盗版者最终能够创建无需任何硬件修改即可启动的视频游戏的单一代码 CD-ROM 镜像。当游戏可以在互联网上免费下载时,谁会为游戏付费呢?由此产生的猖獗盗版减少了游戏销量,阻碍了游戏开发者为该游戏机开发,并损害了世嘉的业务。售出 600 万台,大约在发布后三年,梦幻代号被从市场上撤下。现在,世嘉专注于游戏开发业务,甚至为他们的前竞争对手索尼、任天堂以及微软开发游戏。

尽管从梦幻代号的经历中可以学到许多教训,但这个信息很明确:能够从近乎免费来源,如 CD-R、DVD-R 或网络运行代码,而不需要重大的硬件修改,这对任何基于封闭机型的游戏机业务来说都是致命的。这对微软的 Xbox 来说是一个残酷的问题,因为它最初是由标准 PC 硬件构建的,旨在开放并运行从多个来源加载的代码。因此,微软在游戏机市场的命运与 Xbox 安全系统的成功和稳健性紧密相连。到目前为止,安全系统表现得相当不错:发现的全部弱点都需要至少进行无焊点、破坏保修的修改才能安装。硬件修改的需求限制了这些弱点的实际影响,因为大多数用户都害怕打开他们的家电。然而,多个群体,无论是合法的还是非法的,都迫切希望 Xbox 能够从任意来源运行代码,而不需要硬件修改。

Xbox 是其自身设计的受害者:选择使用标准 PC 硬件大大增加了“已解锁”Xbox 对黑客和盗版者的价值。Xbox 对周末黑客和爱好者来说是一个相当令人满意的目标,这与微软为 Xbox 采用 PC 架构的原因相同:现有的 PC 程序很容易移植到 Xbox。此外,关于 PC 硬件的知识库非常广泛和深入,因此黑客 Xbox 的学习曲线不像其他游戏机那样陡峭。另一方面,PlayStation2 和 Gamecube 的学习曲线很陡峭,它们在架构上也存在限制,这阻碍了大多数 PC 应用程序的移植。Xbox 也因为易于移植旧游戏模拟器、因其高知名度以及获取兼容的调试和测试硬件的便利性而成为盗版者的热门目标。

此外,Xbox 架构与 PC 架构的相似性使得 Xbox 成为一个很好的教育工具。从这本书中获得的知识不仅适用于嵌入式硬件或游戏机;你应该能够将这本书中的大部分知识直接应用到 PC 上。同样,从 PC 世界继承的大量适用于 Xbox 的文档资源,通过网络搜索引擎方便地进行索引。文档的随时可用将帮助有志于学习的读者在书中所包含的知识基础上进行拓展。

Xbox 也比普通的 PC 更具吸引力的教育实例。PC 实现中硬件细节的差异性太大,以至于无法为 PC 编写有用的逐步黑客指南,而 Xbox 的逐步指南则保证在几乎任何商场或电子产品零售商都能方便购买的数百万台设备上准确无误。

关于黑客和黑客行为

这是一本关于传统意义上黑客行为的书:关于探索的过程和方法。有些人可能会惊讶,这本书没有专门章节介绍破解游戏和修补特定的安全检查——毕竟,那不正是黑客行为的主要内容吗?实际上,随着公众对技术的认识增加,以及煽情的媒体继续影响公众对黑客的看法,"黑客"这个术语在过去的几年中已经发生了相当大的变化。

在最初,黑客是指那些为了好奇心和探索而热情工作的人。有硬件黑客会自己动手拆开计算机以优化其设计(早期的计算机是由离散组件构成的,因此可以用简单的工具以有意义的方式进行修改),还有软件黑客会努力编写最紧凑和最优雅的代码,因为计算资源稀缺且速度慢。还有一些黑客会探索电话系统的内外,以及大学校园建筑物的屋顶和隧道。早期黑客经常参与所有这些活动。黑客们会自由地分享他们的发现或结果(黑客技术),因为他们的回报不是金钱,而是来自满足他们的智力好奇心和来自同伴的热情。因此,黑客们倾向于形成基于个人黑客能力的等级制度群体,成员资格和进步完全基于个人的黑客能力。

随着技术的进步和计算机速度的加快以及更加集成,黑客们发现硬件黑客所需的努力并不值得其带来的好处。计算机中那些有趣的部件正迅速被深埋在密封的陶瓷封装中,这些封装中的硅结构即使用高倍显微镜也难以看清。一个可能使计算机性能翻倍但难度很大的硬件黑客,在几个月内就被摩尔定律所抹平。

另一方面,软件黑客开始更多地关注应用,而不是算法或优化。随着内存和处理器功率变得便宜且充足,程序的紧凑性或优雅性不再直接重要。此外,编译器技术也得到了改进,以至于编译后的代码几乎与手工汇编一样快。到 80 年代末,"黑客"这个词已经意味着一个人能在睡梦中编写大量的 C 代码,并在一夜之间创造出卓越的应用。那些老硬件黑客要么转变为软件黑客,要么退回到能够负担得起支持他们昂贵爱好(³)的大学实验室和企业。

那时的“黑客”一词越来越多地与那些破解密码和程序以获取对通常受限的机器和软件的访问权限的人联系在一起。好莱坞在这方面部分负有责任,因为它拍摄了一系列电影,描绘了青少年只需几个按键就能将世界推向核毁灭的边缘,或者地下室里的隐居天才创造出人工智能的怪兽。不幸的是,这些电影情节的夸张被公众忽略了,黑客的这种阴暗印象最终成为黑客刻板印象的主导部分。这种刻板印象的不准确性导致了“黑客”一词的创造,该词主要关注破解系统和程序——“破解者”。

技术塑造了当代黑客,正如黑客塑造了技术一样。新一代黑客必须努力穿透今天计算机技术周围的“友好”用户界面和媒体及营销的华丽包装。每个人都使用电脑,并期望它们完美无瑕、直观易用,但很少有人真正了解引擎盖下发生了什么。

计算技术的复杂性已经增长到如此程度,以至于初学者越来越像关于七个盲人和大象的寓言。一些初学者可能会通过探索互联网开始他们的黑客之旅。其他人可能会从探索他们电脑上的操作系统开始。还有一些人可能会从查看他们电脑的内部开始。每个人可能都会花一年时间探索他们的领域,但最终每个人对计算机技术的看法都将截然不同。

年轻黑客与老一辈守门人之间的文化分歧在我面前变得明显,当时一位自称黑客高手的麻省理工学院新生不屑一顾地说:“所有的 Windows[98]电脑在哪里?……你们只有这些糟糕的 Sun 电脑,甚至没有 AOL!我以为麻省理工学院会有好的互联网接入。”他似乎没有意识到“糟糕的 Sun 电脑”实际上是相当强大的工作站,运行着世界上最稳健的操作系统之一,而且互联网不仅仅有 AOL——更重要的是,麻省理工学院校园是互联网的诞生地之一,拥有比大多数 ISP 更多的 IP 地址,并且直接连接到互联网的主干网。

计算机技术渗透到日常生活的每一个角落,加剧了黑客的刻板印象。特别是,媒体将黑客描绘成现代的罗宾汉,这种描述不知何故将黑客行为与涉及安全或计算机资源访问的方面永久性地联系在一起。现在,典型的黑客负责破解软件、Code Red 和 ping 洪水,而“开发者”则负责 Linux 和 BSD。黑客是 31337 d00ds,他们 0//n jh00r b0x0r,而硬件黑客则通过霓虹灯超频并改装他们的电脑机箱。黑客行为已经变得时髦,许多人都在努力符合媒体塑造的这种刻板印象。如今,很难说服人们相信我破解 Xbox 仅仅是因为它在那里等待被破解:那是一项挑战,也是一件新鲜事。同样,人们也很难理解为什么我从那以后就没有再研究 Xbox。在破解了 Xbox 的安全系统后,剩下的只是一个标准的 PC——对我来说,这并不是一个很有趣的工作,而且绝对不值得冒微软起诉的风险。

黑客的政治

1998 年《数字千年版权法案》(DMCA)的引入将密码学从黑客的领域移除——该法律现在明确规定,只有“从事合法课程学习、受雇或接受适当培训或具有相关经验”的研究人员才能调查用于保护作品访问权的密码学方法。因此,Xbox 破解已经成为一个充满政治争议的话题。这是黑客与立法者之间的斗争,目的是将密码学保持在黑客的法律权利范围内。

微软对 Xbox 黑客的值得称赞的反应——也就是说,到目前为止没有进行追捕或试图关闭 Xbox 破解项目——希望成为那些考虑使用 DMCA 来阻止黑客活动的人的榜样。尽管有大量的 Xbox 破解,但微软的游戏销售仍然强劲。由 Xbox 破解产生的所有兴趣和炒作可能比盗版对微软的伤害更大。(当然,我对黑客持同情态度,所以我对这种情况的解释是有偏见的。有关逆向工程的主观和更深入的法律分析,可以在第十二章“警告黑客”中找到,这是电子前沿基金会(Electronic Frontier Foundation)的李天(Lee Tien)所著。)

对于黑客来说,DMCA 最令人担忧的方面是它体现了这样一个谬误:对社会的创新有益的来源仅限于研究机构和企业的内部。突然之间,在家中舒适地探索用于保护访问权限的加密方法,追求自己的爱好,变成了犯罪。将此类技术的研发限制在仅有的机构中,禁止了非关联个人进行技术发展的可能性。如果没有在自家的车库里自由研究和开发技术的自由,比尔·休利特和戴夫·帕卡德,或者史蒂夫·乔布斯和史蒂夫·沃兹尼亚克今天会是什么样子?如果我们对黑客在代码中自由表达的权利进行监管,我们会有 Linux 和 netBSD 吗?

对于每一个被黑客击败的版权保护方案,都有人从中学习到如何制定更好的保护方案的重要教训。通过通过立法来规范保护版权的技术措施的研究和这些成果的传播,就是承认版权技术已经破裂,永远无法改进——允许普通人理解版权控制技术唯一可能的结果就是技术的消亡。我对此提出相反的观点:我收到的关于我的 Xbox 黑客工作的最佳同行评审并非来自学术界。它来自世界各地的个人黑客——特别是在外国——他们可以自由地探索和理解访问控制技术。美国更严格的法律和公司的诉讼性质已经对美国在电子安全领域的地位产生了负面影响,而这只是开始。

DMCA 对社会的影响正在全球黑客社区中感受到。在我对 Xbox 的工作过程中,我有幸遇到了全球各地的杰出黑客。在美国的黑客中,他们是最害怕的一群人,尽管他们是才华横溢的工程师,但他们却不愿意将他们的技能应用于此类问题,因为他们害怕受到迫害。结果是,一些最有趣的 Xbox 黑客成果被欧洲和亚洲的黑客社区所获得。值得注意的是,这些成果在美国并不为人所知,因为这些黑客几乎没有动力去努力与美国人分享他们的发现。事实上,许多外国黑客有意识地努力不让他们的发现离开他们的社区,原因包括害怕美国公司的报复。这种“人才流失”对加强美国在公平和有效的数字版权控制这样重要的技术领域的竞争力几乎毫无帮助。在今天的经济全球化中,美国公司不能通过假装在真空中做生意来生存。

有些人可能会指出我关于 Xbox 安全系统的论文成功发表作为一个例子,说明 DMCA 如何保护言论自由权利以及版权控制技术的经济利益。我的情况对于大多数美国黑客来说并不典型。由于我当时是研究生,我没有家庭要担心,也没有重要的资产会因我参与与我的工作有关的诉讼而失去。我还得到了电子前沿基金会(EFF)慷慨的法律援助,以帮助我在法律雷区中导航。电子前沿基金会(EFF)帮助将我的论文定位在尽可能合法的光环下,并告知我在 DMCA 下的权利和义务。

例如,我必须“在绕过之前真诚地努力获得[微软的]授权。”⁶(请注意,授权不是必需的,但真诚的努力是。)电子前沿基金会(EFF)帮助我起草了这样一封研究授权信。我还必须与麻省理工学院(MIT)斗争,以允许我的研究以附属实体的形式发表。所有直接逆向工程 Xbox 安全性的努力都是我自己掏钱,在我自己的公寓里进行的,而且是在下班后用自己的时间完成的。MIT 最初利用这一事实来将自己与我的工作分开,迫使我寻求电子前沿基金会(EFF)的法律建议。在同情教授们的多次劝说以及我收到微软关于我的研究的一封建设性、非威胁性的信件后,MIT 最终屈服,并允许我作为 MIT 的学生发表我的论文。

言论自由不应需要律师,自由思想也不应涉及研究授权信。我为了发表我的论文而奋斗,因为我没有什么可失去的,并且因为我相信要表达我对黑客权利的声明。不幸的是,现在有沉默的大多数黑客,他们有家庭要养活,有工作要失去,并不是每个人都能像我有幸得到电子前沿基金会(EFF)的帮助。

你正在阅读的这本书是 DMCA 对言论自由产生寒蝉效应的另一个例子。这本书最初是由技术出版商 John Wiley & Sons, Ltd.委托出版的,但在最后一刻因为担心诉讼和来自微软的反弹而被取消。这种审查制度令人沮丧,令人气馁,也许一些作者会在那里停止,并允许他们的声音因恐惧而被压制。我承担了自费出版这本书的法律和财务风险,以表达我作为黑客享有自由和不受阻碍言论的权利。然而,这条路也不是没有障碍。预订过程在第二天就被暂停,因为原始的电子商务提供商 Americart“拒绝为我提供购物车服务以销售黑客材料……每月 15 美元不足以让我们承担被列入 DMCA 诉讼的风险。”

我必须强调,这本书不侵犯微软的版权,这本书中呈现的知识不能直接应用于版权规避。要执行侵权行为,一个人必须磨练他们的技能,并应用大量额外的艺术和专业知识,专门针对版权控制规避。声称这本书是规避工具,相当于声称所有关于电路板、嵌入式软件或密码学的书籍也都是规避工具。

DMCA 关于硬件“合理使用”的范围是另一个重要的政治话题,具有巨大的经济影响。修改或绕过加密启动序列以运行替代软件(无论是合法购买或创建的)是否违法?这个问题的部分答案可能取决于 Xbox 黑客的命运。对 DMCA⁷中逆向工程豁免的严格解释揭示了将此类规避行为定为非法的强烈论据。

特别是,逆向工程仅限于互操作性,其中互操作性意味着“计算机程序交换信息的能力,以及这些程序相互使用已交换的信息。”但这个定义包含两个潜在的陷阱:首先,绕过基于硬件的安全措施与绕过一个程序(软件)的安全措施可能有所不同。从技术上讲,这可能不是一个非常有力的论点,但据我所知,这个条款还没有在法律上受到考验。其次,目的并不是真正与硬件安全措施交换信息——而是绕过它们。

反对允许逆向工程硬件安全机制的最后论点是偶然的版权规避。通过逆向工程过程获得的信息可以同样应用于创建版权规避设备。换句话说,使互操作性成为可能的基本研究,至少在 Xbox 的情况下,也可能间接地应用于那些希望构建规避设备的人。结果证明,Xbox 中一些非常具体的设计缺陷使得绕过启动安全成为可能,而无需必然地绕过版权,尽管这些缺陷可能在不久的将来被修复,使我们直面最初的问题。

如果“合理使用”不包括为运行替代应用程序而进行的 Xbox 安全逆向工程,那么这具有重大的经济影响。最显著的影响是,微软可以向最终用户销售法律上受限制的硬件,将用户锁定在其软件基础上。这可以用来在计算机硬件和软件上建立一个不可打破的垄断。例如,微软可以向选择保护其硬件以运行微软操作系统的供应商提供补贴。这种经济激励将转移到客户身上,这将激励他们购买折扣硬件。一旦大量硬件安装基础被锁定在微软的操作系统中,微软就可以在无竞争的市场中为其产品设定价格,因为任何人都在锁定硬件上运行任何其他操作系统都是非法的。

事实上,即使 DMCA 确实限制了硬件的合理使用,这种场景对微软来说可能也很难执行,因为政府和民间机构正在密切监视微软的活动,以防止垄断行为。然而,在其他新兴市场,如智能手机

图片

作者在他的工作站上。

对于电话、个人数字助理和机顶盒,供应商试图通过这种低价策略在竞争中取得优势可能并不不切实际。至少,这种策略可以用来拖延法庭审理的时间,这可能足够长,足以对竞争者的市场地位造成不可挽回的伤害。正是因为这些担忧,许多 Xbox 黑客有意识地通过他们的工程努力来表达他们的政治信仰。

黑客背后的那些人

在整本书中,我包括了同意接受采访的各种黑客的简介。这套黑客绝非唯一的一套黑客;事实上,它是一个自我选择的小组,因为许多黑客为了防止迫害或因为受雇于与微软有强大联系的公司而秘密工作。这些采访的目标是介绍一些关于黑客背后的人,以及他们的动机和方法,以促进理解并激励新的黑客加入我们的行列。

让我通过介绍自己来开始这个过程。我是安德鲁“bunnie”黄;大多数人叫我 bunnie。截至本文写作时,我 27 岁,安德鲁 C.黄和玛格丽特黄的儿子。我在密歇根州的卡拉马祖出生和长大,但现在我在加利福尼亚州的圣地亚哥与我的可爱未婚妻 Nikki Justis 一起生活。我最近从麻省理工学院获得了电气工程博士学位。我被选中写这本书关于 Xbox 黑客的原因之一是因为我发现了并公开了微软 Xbox 安全系统中的第一个已知弱点。

总的来说,我破解硬件是因为知道有人因为我的构建而生活变得更好,这让我感到非常满足。我觉得我有责任运用我的才能,回报社会给予我的东西。我也享受探索的挑战。我想尽可能深入地了解电子学。黑盒子让我沮丧;没有什么能比一个我不被允许打开或理解的黑盒子更能激发我的好奇心。因此,我对密码学和安全性方法有着浓厚的兴趣。

我破解硬件是因为我喜欢电子的美学;在一天结束时拥有一个有形的实物,而不是软件代码的短暂片段,这让我感到满足。这听起来可能有点傻,但我的一个爱好就是拆解电子设备并“阅读”电路板。新电子设备新鲜出炉,从防静电袋中取出时的气味令人兴奋;我认为这是新冒险展开的气味。它很吸引人,就像一堆空白纸张:我想知道我会用这些空白纸张做什么。一堆空白、白色的纸张站在那里,挑战我填充它们以有用的信息。

我的求知欲源于我的童年。当我大约七岁的时候,我的父亲买了一台 Apple II 克隆机。他只买了主板,所以没有外壳。我仍然记得他第一次从盒子里拿出来时的样子——绿色的电路板,闪亮的芯片,以及所有五颜六色的电阻和电容器。我想玩它!我对 Apple II 很好奇,但不允许我触摸主板。当然,这意味着每当我的父母不在看的时候,我都会从主板上的插座中取出芯片,做一些愚蠢的事情,比如把它们反过来放,看看会发生什么。

在几乎几次摧毁电脑之后,我的父母从 Radio Shack 给我买了一套 200 合 1 的电子实验套件和我的第一本电子书,《入门电子学》,作者是 Forrest Mims,III。这些对我来说是电子学的极好介绍,因为它们满足了我玩电路和组件的愿望。我的叔叔还给了我他的旧版《电子艺术》一书,作者是 Horowitz 和 Hill,以及几本关于微处理器的书。我订阅了《字节》杂志,当时它包括关于硬件项目的常规专栏,包括电路图和图片。

最终,我积累了对电子学的足够理解,开始理解苹果 II 用户手册中包含的电路图和 ROM 列表。(我仍然认为计算机应该附带完整的电路图和源代码。)到八年级时,我已经有了足够的知识,可以为自己构建苹果 II 的附加卡。这张卡上有一个我从 Radio Shack 购买的通用仪器 SPO-256 语音合成器。我还给我的苹果 II 添加了一个模数转换器,并编写了一个应用程序,将我的苹果 II 变成一个会说话的电压表。我继续构建硬件,在我被麻省理工学院录取之前,我已经使用 80188 微处理器构建了自己的工作嵌入式计算机。

在麻省理工学院的本科学习期间,我通过构建一些有趣的小项目来逃避学校工作的枯燥,比如为我的兄弟会 ZBT 制作的遥控灯开关和音乐响应派对灯光。正是在这些年间,我第一次接触到了经济实惠的样机制造服务和 PCB CAD 工具,例如附录 C 中讨论的“进入 PCB 布局”。

电路板制造服务兴起以适应大学生的预算,这对硬件黑客来说是一个里程碑事件。最后,可以放下线绕工具,表面贴装组件和复杂电路对日常爱好者来说触手可及。

这些年来,我一直在我的网页(http://www.xenatera.com/bunnie)上记录我的项目,以便每个人都能从我的经验中受益。我的许多项目都提供了原理图、Gerber 文件和源代码,尽管我的一些较新的项目是咨询工作,所以很遗憾我无法将这些结果与世界分享。

当我有你的注意时,我想澄清一点。我没有因为破解 Xbox 而获得麻省理工学院的博士学位。实际上,破解 Xbox 是我论文的一个附带,与主题相关但不是核心。

我关于超级计算机的论文⁸专注于高效代码和数据迁移的架构。我对游戏机的兴趣源于我对所有硬件的自然好奇心,以及我的论文导师,汤姆·奈特博士的鼓励。游戏机代表了性能与成本的巅峰,而成本对于今天的超级计算机来说是一个重要问题。因此,我被鼓励去查看所有游戏机,看看我能从构建成本效益硬件中学到什么。Xbox 还拥有一个有趣的安全系统,这算是一个额外的收获;由于政府机构对超级计算机技术非常感兴趣,超级计算机的安全性始终是一个需要考虑的话题。(事实上,我的研究小组的同事们写了一篇关于构建可信赖计算机⁹的非常有趣的论文;如果你对密码学安全可信计算平台(如 Palladium 和 TCPA)的替代方案感兴趣,我推荐你阅读它。)

我对有志于成为硬件黑客的人的最佳建议是坚持不懈和彻底。值得注意的是,如果你热爱你所做的事情,坚持不懈和彻底会自然而然地发生。此外,成为一名硬件黑客的一部分是成为一个收藏家。购买新设备成本过高,所以我习惯性地积累破损和贬值的设备和工具,即使我不知道我可能用它们做什么,或者我能否修复它们。结果证明,尝试修复测试设备本身就是一种学习经历,即使最终结论是将其作为备件丢弃,也可以相当有成就感。

引用前苹果传教士和当前车库技术风险投资公司执行董事盖伊·川崎的话,“吃得像鸟,排泄得像大象。” 川崎指出,蜂鸟每天吃掉相当于其体重 50%的食物。因此,吃得像鸟意味着你应该对信息有无限的渴望。订阅免费的电子贸易杂志,浏览网络(但要对浏览的网站进行选择——你吃的是什么),参加免费贸易展,并注册你能得到的每一份目录和期刊;拆解你拥有的每一件电子产品和朋友的,并尝试从它们的设计中学习所有你能学到的。

在硬件黑客领域,你一半的难题可以通过仅仅使用正确的组件或技术选择来解决或变得更容易。 “像大象一样排泄”指的是与你的同行黑客分享你的信息和发现。无论你消化了多少信息,你永远无法知道一切。自由分享你的发现会吸引同行黑客的建议和善意,并导致思维上的协同效应。特别是在硬件黑客领域,所有结果都有可触摸的实物基础,隐藏你的技术和结果只会意味着其他人最终会在没有你的帮助下重新发明你的工作。另一方面,你在说或分享时也要做一些判断;人们只有那么多的带宽,如果你分享的结果在某些方面是新的或有趣的,他们会更仔细地听。

话虽如此,拿起螺丝刀,让我们开始黑客行动吧!


¹ “可信计算”由比尔·盖茨所著,http://www.microsoft.com/mscorp/execmail/2002/07-18twc.asp

² 来源:NPDFunworld

³ 好消息是,硬件黑客技术最近正在赶上摩尔定律,导致硬件黑客的复兴。可负担的电路板制造服务如雨后春笋般涌现,互联网的诞生简化了获取组件的过程。此外,Mosis 芯片制造服务以及 FIB(聚焦离子束)服务已经开始将集成电路黑客带入个人硬件爱好者的财务可能范围内。

麻省理工学院人工智能实验室主任 Rodney Brooks 曾说过,好莱坞关于疯狂发明家在地下室制造人工智能生物的想法,与有人在后院建造 747 巨型喷气式飞机的想法大致相当。

17 U.S.C § 1201(g)(3),确定豁免的因素。当然,“适当培训或经验”的含义并未定义。我认为,应用密码学研究最佳培训应包括一些实际动手操作,破解真实密码系统的经验。

17 U.S.C. § 1201(g)(2),加密研究的合法行为

17 U.S.C § 1201(f),逆向工程

我的博士论文文本可以在 http://www.xenatera.com/bunnie/phdthesis.pdf 找到

“用于动态确保安全信息流的最低可信计算基础”由 Jeremy Brown 和 Tom Knight 撰写,可以在 http://www.ai.mit.edu/projects/aries/Documents/Memos/ARIES-15.pdf 找到

第一章:-

作废保修

行业工具

由于一些项目需要复杂的工具,硬件破解可能一开始看起来令人畏惧。幸运的是,大多数基本项目只需少量投资工具,相当于一到两款视频游戏的价格。附录 A,“如何获取设备”,包含了一些建议的入门工具和订购这些工具的说明。

本章将讨论您进行严肃硬件破解所需的基本工具,包括打开工具、连接和拆卸电子组件、诊断和探查电路以及设计电路板。在这些工具中,前两种优质版本可以以相当合理的价格购买。诊断和测试工具,如示波器和逻辑分析仪,价值连城,但您会发现这些工具非常沉重,它们将是一笔巨大的投资。至于电路板设计工具,一些最好的工具可以以令人惊讶的实惠价格获得。

本章将以逐步的图文教程结束,介绍如何打开 Xbox。更有经验的硬件破解者可以跳过接下来的几章。

打开工具

破解任何事物的第一步是取下盖子。大多数电子产品只需一套十字和一字螺丝刀就可以打开,但最有趣的盒子将需要一套特殊的安全位。

图 1-1: 安全位点的选择。从左到右:任天堂 4.5mm,安全六角,标准六角,离合器,罗伯逊或方形,三翼,扭矩,扳手,以及安全艾伦或六角。

图 1-1 展示了一些常见的安全位点的阵容。令人惊讶的是,安全位套装既实惠又容易获得。MCM 电子(www.mcmelectronics.com)销售一套 105 件的安全位套装(MCM 订单号 22-3495),价格不到二十美元,一套 32 件套装(MCM 订单号 22-1875),价格不到十美元。它们物有所值。任天堂安全位单独销售。您可以用几美元购买到用于任天堂 Gamecube 的大任天堂安全位(MCM 订单号 22-1150,“4.5mm 安全位”)。位的小版本(MCM 订单号 22-1145,“3.8mm 安全位”)也用于较老的任天堂系统和它们的游戏卡带。

Xbox 使用标准六角(六角星)T10、T15 和 T20 尺寸的位。这些位相当常见,可以在 Home Depot 等五金店购买。您还可能发现一个磁性的延长位夹手很方便,可以用来接触到 Xbox 中硬盘和 DVD 驱动器周围的几个狭小空间。

拆卸设备盖子时不要使用过大的力量。如果你认为你已经取下了所有的螺丝,但盖子仍然卡住,最可能的情况是你遗漏了一个螺丝,或者你需要按下一些摩擦锁卡扣。此外,许多时候螺丝隐藏在设备底部的橡胶脚垫下,或者在一个标签下面。要找到被标签遮挡的螺丝,请用力摩擦标签的表面。你会在有螺丝的地方感觉到一个软点。(打破这样的标签以访问螺丝会立即使设备的保修失效,但不必担心:大多数设备都是设计用来维修的,所以简单地移除盖子很少会造成任何损坏。)

有时,你会遇到一种顽固的组装件,它拒绝分开。如果盖子或面板在边缘处弯曲打开,或者看起来有些自由移动,那么可能有一个某种类型的摩擦锁固定着盖子。摩擦锁通常是卡扣和槽结构,设计得使得插入卡扣比取出它容易得多。在这种情况下,通过观察外壳似乎卡住的地方找到卡扣,然后用一把小平口螺丝刀轻轻推压卡扣,同时轻轻向上拉外壳。如果有多个这样的卡扣,插入一个楔子,比如另一把螺丝刀或一个回形针,以防止在打开其他卡扣时卡扣重新锁定。

如果你施加了坚定的压力,盖子或面板仍然几乎不动,它可能也用粘合剂固定,甚至可能焊接关闭。例如,“墙式电源适配器”(你直接插入墙插座的方形黑色盒子)通常就是这样密封的。拆解这样的设备可能意味着你永远无法将其重新组装成原来的形状。

安装和拆卸组件的工具

电子组件通过焊接固定在板上。焊接时,一种称为焊料的低熔点合金被加热并流动到要连接的金属周围。焊料和金属形成局部合金。一旦接头冷却,组件就电学和机械地连接在一起。

焊接的基本工具包括烙铁、焊料、助焊剂和吸锡线。(对于涉及细间距组件或小零件的工作,一对细尖镊子也非常有用。)烙铁是一种手持工具,由加热元件和尖端组成;尖端用于通过传导或直接接触熔化焊料合金,而其他工具则使用热气体或强烈的红外辐射。所需烙铁尖端的类型取决于具体情况。例如,扁平的“凿形”或“圆锥形凿形”尖端在焊接大多数小型表面贴装组件时表现更好。

焊锡铁也有很多不同的等级。最便宜的焊锡铁大约十美元,带有大而笨重的尖端,没有温度控制;它们只能加热到尽可能高的温度。更好的焊锡铁价格更高,并配备一个传感器,可以主动调节尖端温度。温度调节使工具的动作更加一致,并延长尖端的使用寿命。更好的焊锡铁还提供更广泛的尖端选择,可能包括非常细小的尖端,适合用于今天大多数电子产品中发现的微小组件。对于轻度使用,一把质量好的直接插拔焊锡铁和良好的尖端就足够了。然而,如果你计划制作电路板并真正深入硬件黑客领域,投资一个高质量的温度控制焊锡铁,如 Weller WTCPT 或 Weller WES50,价值一百美元是非常值得的。

焊锡种类繁多。对于大多数用途,一种无清洁剂或可水清洁的焊剂芯的共晶 Pb-Sn 合金焊锡线就足够了。共晶合金是理想的选择,因为它们可以直接从液态转变为均匀的固态。Kester 是焊锡的主要制造商;他们的标准焊剂芯线焊锡,245 号和 331 号配方,都相当不错。245 号配方使用无清洁剂焊剂,但如果你愿意,可以用一些异丙醇和棉签去除残留物。331 号配方具有比 245 号更广泛适用材料的焊剂芯。然而,使用 331 号焊锡后,你需要尽快用水清洗电路板,否则焊剂残留物会变得粘稠,并可能干扰电路操作。许多分销商销售 Kester 焊锡;例如,Kester 24-6337-8802(25 号线的 1 磅卷装 245 号焊锡线)是 DigiKey(www.digikey.com)的零件号 KE1410-ND。大多数 Radio Shack 销售的焊锡也相当适合焊接,尽管他们的焊锡往往会留下粘稠的黑色残留物,需要用有机溶剂进行清洁。

焊锡也可以是膏状,其中包含悬浮在助焊剂矩阵中的微小焊锡球。当连接细间距表面贴装组件时,焊锡膏非常有用。(更多信息请参阅附录 B,“焊接技术”。)

如果焊点难以形成,焊剂就是万能的。始终备有一些焊剂。当焊点无法正确形成时,通常在焊点直接滴上一小滴焊剂就可以解决问题。焊剂也有各种形式的膏状和液体,每种都需要不同的清洁方法。一种方便的焊剂应用解决方案是焊剂笔,例如 Kester 83-1000-0951,一种 951 无清洁焊剂笔。您可以从 Digi-Key 购买这种焊剂笔,零件号为 KE1804-ND,只需几美元。Radio Shack 还出售一种装在管子里的焊剂膏,但他们的膏状物很脏,需要清洁。最后,脱焊线对于清理可能犯的任何焊接错误或混乱非常有用。脱焊线是一种细铜线编织物,通常带有干焊剂。使用时,将其放在烙铁和您想要清理的焊点之间;一旦编织线变热,焊点上的多余焊料就会吸进脱焊线的毛细管中。尽管编织线可能已经预先涂有焊剂,但在使用前在编织线上滴上一滴焊剂仍然有助于这个过程。Chemtronics 生产了一系列优质的脱焊线;一个例子是 Chemtronics 60-3-5“无清洁焊料吸管”(Digi-Key 零件号 60-3-5-ND)。

我在第二章的开头讨论了基本的焊接技术,在那里您将学习如何在 Xbox 的前面板上安装蓝色 LED。

测试和诊断工具

电子测试设备的形式与电子产品的种类一样多。对于初学者来说,基本“必备”工具是数字多用表。在过去的几年里,数字多用表(DMMs)的功能越来越强大,价格也越来越实惠;一个典型的单元可以测量电阻、电压、电流、电容、二极管极性和连续性,价格大约为五十美元。Radio Shack 和 Jameco(www.jameco.com)都提供了一系列合理的入门级多用表。(附录 A,“在哪里购买您的黑客工具”中有一些建议的入门级多用表。)

对于基本的修改和套件建设项目,数字多用表(DMMs)在检查短路连接以及检查电路在施加电源前后基本健康状况时非常有用。当您感觉可能已经弄错了焊点连接时,DMM 的连续性模式可能会有所帮助。在连续性模式下,当测试探针之间存在低电阻路径时,DMM 会发出声音。因此,连续性功能对于验证焊点的完整性以及检查相邻连接的短路都很有用。您不应使用连续性模式来检查电源短路,因为一些电路板在电源和地之间可能会有足够低的电阻(大约十欧姆)以触发连续性声音。因此,在向任何新修改或构建的电路板施加电源之前,使用电阻测量模式进行检查并确保电源线上没有死短路(零欧姆的电阻)。

对于逆向工程和更高级的项目,你需要的基本工具是一个示波器和有时还需要一个逻辑分析仪。示波器对于捕捉电波形的详细形状非常有用。人们可以用示波器诊断时序、噪声和干扰问题。

示波器的基本定义特征是它可以同时显示的通道或波形数量,以及它的最大电气带宽。高质量的示波器通常有四个通道和超过 500 MHz 的带宽;折扣或二手示波器通常只有两个通道,可用带宽在 20 MHz 到 100 MHz 之间。所有示波器的首要限制是它们只能显示电波形的一个短段。

逻辑分析仪对于捕捉大量数字数据非常有用。它们在捕捉波形形状的能力和广泛的数据分析和记录能力之间进行权衡。逻辑分析仪对于诊断复杂的数字总线和电路非常有用。逻辑分析仪的基本定义特征是它可以采样的数字通道数量、最大采样速率和最大采样深度。一个典型的现代逻辑分析仪可能有几十个通道,采样速率在几百兆赫兹,采样深度为几兆字节。逻辑分析仪中发现的其它特性包括可编程触发算法和检测毛刺或短脉冲的能力。

不幸的是,新示波器或逻辑分析仪的平均价格在几千到几万美元之间。好消息是,大多数项目不需要最新的测试技术,因此你可以使用二手设备。Swapfests 是购买便宜旧示波器或分析仪的好地方;eBay 也时不时有一些不错的交易。如果你必须在购买示波器和逻辑分析仪之间做出选择,我建议先购买示波器;逻辑分析仪远不如示波器灵活,而且通常更贵。示波器可以诱导捕捉一定量的逻辑数据,而逻辑分析仪永远不能用来测量模拟波形。此外,使用 FPGA 和定制板构建自己的家用逻辑分析仪比构建同等质量的示波器要容易得多。家用逻辑分析仪可以相对便宜地构建以在高性能、高速应用中工作。(第八章描述了我是如何构建一个家用逻辑分析仪来监听 Xbox 中一个关键高速总线的。)

在紧急情况下,可以用大约五十美元的 Radio Shack 零件构建一个非常简单的数字迹线捕获设备。有一次,我需要捕获 PS/2 键盘端口上的数据,但我没有测试设备,我需要立即捕获数据。一个带有几个条形图 LED 的面包板,这些 LED 连接到一组 8 位寄存器(74HCT574),并通过移位数据连接,这解决了问题——所有这些组件都是在 Radio Shack 购买的。实际设计相当简单,但由于其用途非常有限,我将省略细节。重点是您可以自己构建用于捕获数字数据的设备——在花费几千美元购买逻辑分析仪之前,这是一个值得考虑的事情。

设计工具

任何黑客收藏中最后需要的一组工具是一套用于 PC 板和 FPGA 的电子设计工具。PC 板和 FPGA 设计的内容在附录中有讨论,但在这里值得提一下,这些工具的高质量版本几乎可以免费获得。因此,一个人可以用不到 Xbox 的成本设计并构建一个完整的电路板,包括复杂的可重新配置的硬件组件——这还包括设计和构建工具的成本。

以前,PC 板设计是一个非常昂贵的提议;工具可能需要花费数千美元,而简单的板制造运行可能需要花费几百美元。如今,一个新手可以用不到七十美元的总价制作一个简单的板。对于 PC 板设计工具,Altium,以前称为 Protel,销售一款名为 CircuitMaker2000 的工具。虽然我并没有广泛使用 CircuitMaker2000,但我的第一印象是它非常类似于 Altium 现在已停产的 Protel 99SE。您可以从 http://www.circuitmaker.com 下载免费的 30 天试用版或他们的免费学生版(有限制),这对于第一个设计项目来说非常完美。一旦您使用免费工具设计出您的第一块板,您可以使用 Sierra Proto Express(http://www.sierraprotoexpress.com)等供应商进行制造,每块板大约 30 美元(截至本文撰写时,最低订单为两块板)。正如您所看到的,价格不再是严重的障碍,我鼓励您尝试使用您自己的定制印刷电路板构建一个或两个项目。

静电:电路杀手

静电,也称为静电放电(ESD),是集成电路的噩梦。现代集成电路对 ESD 特别敏感;只需几伏电压就能摧毁一个裸露的晶体管。由于你只有在百伏或千伏范围内才能感觉到静电放电,因此你可能会在不自知的情况下摧毁这些设备。

好消息是,大多数芯片都采用特殊结构来帮助它们更耐静电放电。尽管如此,最好还是不要主动参与测试它们。为了中和你身上的静电,在触摸电路板或芯片之前,总是要触摸一个接地金属 ic 物体。正确连接到家用电源插座上的计算机外壳上的裸金属是一个好的起点。

穿戴几乎在任何电脑店都能买到的防静电手腕带,可以最大限度地降低因静电放电而损坏 Xbox 的风险。为了有效,手腕带必须连接到一个接地物体上。

如果你喜欢冒险,在未铺设地毯的混凝土地板上赤脚工作也可以让你接地。裸露的混凝土地板出奇地导电,以至于如果你长时间接触不正确连接的插座中的电子设备,可能会受到电击或烧伤。亚麻地板和硬木地板也可以作为有效的接地点,具体取决于地板上使用的瓷砖或蜡的类型。可以应用特殊的导电蜡或喷雾,以确保地板具有足够的导电性。

FPGAs — 场可编程门阵列 — 是经济实惠的硅原型设计解决方案。FPGA 由大量门和存储元件组成,具有可编程互连。因此,FPGAs 可以实现各种数字设备,仅限于 FPGA 的门和线容量。较大的 FPGA,容量可达数百万门,可以包含整个系统,包括微处理器和外设。FPGAs 也非常经济实惠:一个拥有 10 万个门的 Xilinx Spartan II FPGA 在单件购买时大约需要 20 美元。而且更好的是,你可以免费获得 Xilinx FPGAs 的无限制设计和综合环境!Xilinx 有一个名为“ISE WebPack”的免费产品,可以从他们的网站(www.xilinx.com)获取,包括 Verilog 和 VHDL 综合、HDL 测试平台生成和电源分析软件等功能。Verilog 是一种类似于 C 的硬件设计语言;可以将其视为严格类型化、多线程的 C。这对希望涉足硬件的软件黑客来说是个好消息。甚至还有开源硬件设计社区,如 www.opencores.org,你可以免费下载微处理器和其他有趣数字组件的代码。

拆解 Xbox

现在我们已经讨论了一些你需要用于破解的工具,让我们来实际破解一下。破解 Xbox 的第一步是打开盒子。以下是你需要用来取下盖子的工具:

  • T10 和 T20 六角星形螺丝刀位

  • 用于螺丝刀的柄

  • 防静电安全装备(见“静电:电路杀手”)

  • 小型平头螺丝刀(有帮助,但不是必需品)

注意

在你开始拆卸 Xbox 之前,请记住以下几点:首先,拆卸东西时总会有一些永久损坏的风险,拆卸 Xbox 将使你的保修失效。其次,在继续之前,务必阅读整个部分。第三,享受乐趣。

第一步:安全第一

拔掉 Xbox 的电源插头。如果 Xbox 未拔掉电源插头,你可能会暴露在危险、甚至致命的电压下。

第二步:拆卸外壳螺丝

将 Xbox 翻转过来,检查底部。有六个螺丝将外壳的上半部和下半部固定在一起,它们都隐藏在标签或橡胶脚垫下面。图 1-2 展示了所有螺丝的位置。

橡胶脚垫用强力粘合剂粘贴在 Xbox 上。移除脚垫通常需要一字螺丝刀的一点点帮助。图 1-3 展示了这一过程。一旦你撬起橡胶脚垫的一边,尽可能均匀地将其撕下,以保留脚垫上的粘合剂背衬。如果你小心操作,你可以在稍后重新安装脚垫,尽管经过几次拆卸循环后,粘合剂会失去粘性。作为替代,你可以在任何五金店购买橡胶脚垫,并在你在光滑或易刮伤的表面上使用 Xbox 时将其安装上。

使用 T20 尺寸的 Torx 螺丝刀拆卸橡胶脚垫下的四个螺丝。螺丝相当长,但螺纹较短,所以拆卸应该很快。

最后两个螺丝隐藏在序列号标签和产品认证标签下面。图 1-4 展示了这些螺丝的位置。

图 1-2:Xbox 外壳螺丝的位置。这是 Xbox 底部的视图。

图 1-3:使用小一字螺丝刀撬起 Xbox 橡胶脚垫的一边,然后小心地将其撕下。

为了找到它们,用手指在螺丝应该的大致区域上用力摩擦。标签会在螺丝孔上略微凹陷。用螺丝刀的尖端刺穿标签,并滑动或旋转螺丝刀,直到它卡在螺丝孔中,然后继续拆卸螺丝。如果你在意标签的美观完整性,在拆卸螺丝时按住标签,否则标签可能会被撕下或撕裂。

图 1-4:被序列号和产品认证标签隐藏的螺丝位置。

提示

提示请准备一个小托盘或塑料袋来存放你的螺丝,以免丢失。固定 Xbox 的螺丝相当独特,你可能在当地的五金店难以找到合适的替代品。

第三步:拆卸顶部盖板

到目前为止,你应该已经卸下了六个相同的长螺丝。将 Xbox 翻转过来,用双手的掌心轻轻握住盒子两侧,并尝试轻轻摇晃以取下盖子。如果盖子不能通过这种方法取下,你可能需要用手指从后面“撬动”机箱来“开始”盖子。在某些罕见情况下,你也可能需要从前面用螺丝刀撬动,但当你这样做时一定要小心和温柔。图 1-5 展示了你可以用来帮助拆卸机箱的一些点。

不要强行取下机箱盖。如果上述撬动方法对机箱盖没有进展,自本书出版以来可能已经添加了额外的螺丝。尝试通过触摸 Xbox 背面的标签来定位这个螺丝。

图片

图 1-5:一些可以撬开顽固盖子的地方。

步骤 4:移动硬盘驱动器

现在你已经进入内部,你应该能看到两个安装在黑色塑料载体上的硬盘驱动器。为了访问主板,你需要移动(不一定拆除)硬盘驱动器。你不需要断开驱动器线缆,但你需要卸下硬盘载体。

三个 T10 Torx 螺丝固定着载体。图 1-6 展示了这些螺丝的位置。其中一个位于机箱后部的灰色 IDE 扁平电缆下方,另外两个位于机箱前部驱动器表面下方约一英寸处。你可能需要手电筒或直接的上层照明来看到这些凹槽螺丝。

如果你的螺丝刀没有磁化位持器,凹槽螺丝可能会有些挑战,因为位会在你将其定位在螺丝上时滑出。位也足够小,可以进入螺丝和塑料载体之间的空间。即使你认为你已经卸下了螺丝,但硬盘载体仍然很紧,你需要再次检查以确保它们实际上已经卸下。你应该能够稍微抬起载体而不需要施加过多力量。

图片

图 1-6:三个硬盘载体螺丝的位置。注意,为了拍照,灰色 IDE 扁平电缆被抬起了。左侧的盒子是硬盘,右侧的盒子是 DVD 驱动器。

一旦你卸下了螺丝,你需要松开硬盘电源线,否则它会干扰硬盘载体的拆卸。电源线是连接到硬盘外部的黑色、黄色和红色线缆束。硬盘是图 1-6 中左侧的设备。它被固定在载体边缘的凹槽中。轻轻地拉出线缆,使其在线缆上留出几英寸的松弛。图 1-7 展示了完成后的松弛程度。

一旦电缆松开,您就可以将硬盘从其存储位置取出。将硬盘向上抬起,并将其放在 DVD 驱动器上。用双手将 DVD 和硬盘从机箱中取出,并将它们向外折叠,如图 1-8 所示,使它们悬挂在侧面。连接驱动器的电缆应该可以轻松折叠,没有阻力。(请注意从 DVD 驱动器后面来的黄色电缆;如果不小心,它很容易从插座中拔出。)

您现在可以清楚地看到 Xbox 主板和电源,而无需断开任何驱动器。这种布局在测试任何硬件修改后的 Xbox 时将非常有优势。

图片

图 1-7:从固定槽中释放硬盘电缆。一旦释放,您应该在电缆上留有大约几英寸的松弛。

图片

图 1-8:光盘驱动器的位置,保留电气连接以进行测试和实验。

始终注意电源;如果接触它,可能会 伤害或杀死你。记住,只要 Xbox 连接上电源,它就是“活”的,即使 Xbox 已经关闭。此外,请注意硬盘驱动器和 DVD 驱动器的底部在 Xbox 内部作为空气通道有次要用途。长时间运行 Xbox 时驱动器在侧面关闭可能会导致 Xbox 过热。同样,请注意 CPU 和 GPU 上的大型铝制散热片。当 Xbox 运行时,它们可能会变得非常热——可能热到足以烧伤你。

在下一章的项目(更换 Xbox 前面板上的 LED)中,您不需要断开硬盘驱动器,尽管这样做更好。这可以防止您在操作 Xbox 机箱时对电缆施加不必要的压力。

步骤 5:移除光盘驱动器(可选)

在许多情况下,您会发现完全移除光盘驱动器对您的硬件来说更方便、更安全。

要这样做,首先从 Xbox 主板上拔下灰色的 IDE 串行电缆。接下来,从主板上拔下连接到 DVD 驱动器的黄色离散线电缆。这条黄色电缆为 DVD 提供电源,并将 DVD 驱动器托盘的状态信息传递给主板。不要猛拉黄色离散线电缆中的任何单根线,否则可能会从电缆头中拔出线。移除电缆的首选方法是握住白色连接器并拉;然而,如果您的手指不够小,无法进入狭小的空间,您可以握住整束电线并轻轻拉出连接器。将 DVD 驱动器放在一边。

接下来,拔掉硬盘的电源连接器。你会发现连接器在硬盘上非常牢固地固定着。如果你直接拉扯连接器,当连接器从驱动器上脱落时,你可能会因为外壳的锐利边缘而受伤。为了避免受伤,使用一把小型的平头螺丝刀轻轻撬开连接器,如图 1-9 所示。

现在,你可以完全移除磁盘驱动器组件。灰色 IDE 扁平电缆仍然跨越着独立的驱动器单元;如果你愿意,可以移除它们,但记住其方向,以便稍后可以将驱动器重新连接到 Xbox。

重新组装 Xbox

现在你已经拆开了 Xbox,跳到下一节,看看你可以尝试的一些有趣的项目。完成之后,阅读本节了解如何重新组装你的 Xbox 的注意事项。

图 1-9

图 1-9:使用平头螺丝刀撬开硬盘电源连接器。

在将任何东西连接到 Xbox 之前,将其倒置并轻轻摇晃以确保没有松动的螺丝或你可能不小心掉入 Xbox 的部件。松动的螺丝将意味着你的游戏机寿命终结,并且可能存在火灾隐患,所以如果你有任何疑问,这是一个值得检查的步骤。

重新组装你的 Xbox 的第一步是重新连接磁盘驱动器。如果你遵循了上一节中的程序,你的 DVD 驱动器和硬盘驱动器应该已经通过灰色 IDE 扁平电缆连接好了。如果没有,将电缆上褶皱最少的一端连接到硬盘上,然后将电缆的中间连接器连接到 DVD 驱动器上。电缆只能按一个方向连接;注意连接器上的凸起和驱动器连接器上的凹槽位置。

将灰色 IDE 扁平电缆剩余的自由端插入 Xbox 的主板。电缆只能按一个方向插入主板;注意 IDE 插头中间的凸起和主板插座上的凹槽。现在,将黄色 DVD 电缆连接到 Xbox 主板。这条电缆也只能按一个方向插入主板连接器,电缆上也有凸起,主板插座上也有相应的凹槽。现在,将 DVD 驱动器放入 Xbox 中。通过观察 Xbox 标志的 DVD 驱动器托盘相对于外壳边缘的位置来检查它是否平整和水平。你可能需要尝试将驱动器放置几次,直到它放置得恰到好处。如果你对各个部件的方向感到困惑,可以使用灰色 IDE 扁平电缆的褶皱来帮助引导你。

你几乎完成了。将硬盘驱动器放入 DVD 驱动器旁边的位置。再次提醒,这个驱动器可能需要稍微调整一下,才能使其平稳地放置到位。驱动器应该与 DVD 驱动器保持水平,并与 Xbox 外壳周围的金属 EMI 辐射屏蔽边缘齐平。将硬盘驱动器的电源线穿过驱动器托盘上的固定凹槽,并将其插入硬盘。您需要在连接器上施加相当大的力量以创建牢固的连接;当连接器完全接合时,您应该会感觉到轻微的“咔哒”声。最后,将灰色 IDE 扁平电缆穿过驱动器支架上的原始固定钩。

到目前为止,插上 Xbox、连接到电视并检查 Xbox 是否能正常启动是个好主意。您可以在不盖盖子的情况下无限期地运行 Xbox,因为所有由驱动器支架底部和 DVD 驱动器形成的冷却通道都已就位。如果驱动器没有正确连接到 Xbox,控制台仍然可以启动,但会显示一条消息,说明您的控制台需要服务。如果出现此消息,请仔细检查您的连接。

现在是时候将驱动器固定到位了。此时,您应该有九个螺丝:三个短的 T10 驱动器螺丝用于驱动器支架,以及六个长的 T20 驱动器螺丝用于外壳盖。如果您丢失了几颗螺丝,或者多了几颗,请不要慌张。即使缺少一两颗螺丝,Xbox 仍然可以保持在一起。按照拆卸它们的相反顺序安装螺丝和外壳盖。(如果您需要提醒它们的位置,请参考本节前面的图片。)

一旦安装好外壳盖,您就可以再次使用 Xbox 了!

第二章:-

在盒子里思考

反向工程可以被认为是一项极具挑战性但同样非常有益的游戏。要想获胜,你需要一点技巧和一点运气。就像任何游戏一样,为了提高你的技能,你只需要不断练习,不断练习,不断练习。

作为黑客技能构建的第一步是培养对材料的直觉。在硬件方面,了解事物的一个好方法是取下所有设备的盖子,试图弄清楚所有组件是什么,以及它们可能做什么。从零件供应商如 Digi-Key、Jameco 或 Newark Electronics 订购纸质目录,并在空闲时间翻阅页面也是有帮助的。起初,阅读零件目录可能感觉就像阅读字典一样,但随着你看越来越多的电路板,你将逐渐发现一切都有意义。

反向工程师的下一个最有力的工具是模式匹配。所有硬件工程师都受到相同自然法则的约束,所有硬件工程师都使用相同类型的构建模块。工程师们还喜欢模块化和重用现有设计。因此,单个设计模式可以在许多设计中找到。识别设计模式将使你能够在不识别单个零件编号的情况下确定电路的功能。同样,即使没有正式的电气工程培训,也可以在反向工程中走得很远。

反向工程师的最终工具是实验。当直觉和模式匹配无法揭示电路的秘密时,就必须求助于探测和扰动系统,并试图根据观察到的响应推断功能。虽然实验可能会导致硬件损坏,但可以安慰自己,大多数消费级硬件在设计时都是为了满足制造要求而可以进行探测和测试的。此外,在 Xbox 的情况下,可以稍微安慰自己,因为新的 Xbox 相对便宜。提前购买两个盒子,将其中一个作为“牺牲品”使用,有助于消除可能对在硬件上进行激进实验的心理障碍。

本章将向您介绍反向工程的基础知识,重点关注基本技术,如通过阅读电路板来培养直觉,以及一些关于模式匹配和识别基本设计模式等中级技术的介绍。

阅读电路板

当你取下典型电子设备的盖子时,首先看到的是电路板。通常呈绿色或棕色,这种多层铜、玻璃纤维和环氧树脂三明治包含在其走线中的精确原理图网络表。换句话说,通过跟随走线,可以确定每个组件是如何连接的。组件的放置和走线的布局也包含可以揭示设计师思维过程的线索。

电路板基础知识

一个典型的电路板由几层图案化的铜层组成,这些铜层被涂有环氧树脂的薄层玻璃纤维隔开。原始电路板的颜色是白色或浅棕色,带有铜迹;然而,几乎所有电路板都被涂上一层薄薄的聚合物,称为阻焊层,这使电路板呈现出熟悉的绿色。熔融的焊料不会粘附在阻焊层上,因此在生产过程中,多余的焊料不会粘附在板上造成短路。阻焊层有供组件连接的开口。这些开口通常呈现出银色,这是因为涂有薄层锡或焊料的镀层,这可以防止铜氧化并增强可焊性。

在阻焊层之上通常有一层白色字母,被称为丝网印刷层。电路板上的每个组件在丝网印刷层上都有一个轮廓和唯一的标识符。这个标识符使得人们能够快速地将电路板上的组件与原理图上的组件关联起来。你可以使用这个标识符来帮助根据组件命名方案猜测组件的功能。表 2-1 总结了 Xbox 中使用的组件命名方案。

小贴士

Xbox 主板Xbox 主板在丝网印刷层沿边缘印有一个方便的坐标系。在组件面,坐标从 A 到 G 沿侧面,从 1 到 8 沿顶部和底部。板的反面沿侧面有 M 到 V 的坐标。请注意,字母 I、O、Q 和 S 被跳过,因为它们可能与数字 0、1 和 5 混淆。Xbox 主板上的组件标识符使用这个坐标系进行编码;因此,J7D1,即 LPC 调试端口,可以在顶部坐标 7D 处找到。这本书将经常使用这个坐标系以及组件标识符来指代特定的组件。

通过称为过孔的铜填充孔连接布线层。由于电路板的成本随着层数的增加而增长,大多数消费电子产品都设计成将层数保持在最低。收音机和音频放大器通常使用单面板,而最新的 PC 主板可能有六层或八层。Xbox 主板有四层。最上面的两层专门用于在芯片之间传输信息,而内层的两层专门用于供电。Xbox 主板乍一看会显得不透明,因为内层的供电层基本上是铜的实心板。对于逆向工程来说,好消息是我们可以通过简单的视觉检查追踪 Xbox 主板上的每个连接,因为所有信号层都在不透明的供电层之外。Xbox 的设计与将两个或四个信号层埋在供电层内的主板形成对比。埋藏的信号层可能会使信号追踪变得困难。(请注意,将信号埋在供电层内的决定通常不是由安全性驱动的,而是由电信号如何在电路板层之间交互的物理特性决定的。)

设计符 组件类型
C 电容
R 电阻
U 集成电路或晶体管
L 电感器
RP 电阻器组
Q 晶体管
CR 二极管
J 连接器或跳线
RT 可重置保险丝
Y 晶体

表 2-1:Xbox 组件命名方案。

跟踪信号相当容易。从源组件与板子的连接开始,跟随铜迹。如果轨迹与一个圆相交,那么信号很可能在板的另一侧继续。如果一个轨迹结束且没有连接到板的另一侧,那么轨迹很可能连接到其中一个电源平面。

图 2-1:典型电路板的横截面。

尝试一下

尝试在 Xbox 主板上追踪一些信号。在 Xbox 主板上,看看连接器 J8C1,位于 8C 区域的 40 针 IDE 连接器。IDE 连接器几乎所有的信号都通过一些电阻器组连接到主板上的一个芯片 MCPX。你能对那个芯片得出什么结论?注意,从 IDE 连接器出来的某些轨迹意味着来回移动。这是一种尝试确保所有电线长度相同的技巧。参见“为什么电路板轨迹到处都是蜿蜒曲折?”的侧边栏以获取更多解释。

组件

现在你已经有点经验追踪信号了,是时候学习一些基本元件的外观了。元件被分类为无源和有源。粗略地说,无源元件不能放大信号,所以它们通常只有两个引脚。有时多个无源元件会被封装在一起,所以一个无源元件的封装将会有多个引脚。无源元件包括电容器、电阻和电感。Xbox 主板上的最常见无源元件是电容器。电容器以电荷的形式储存能量;在 Xbox 中,它们主要用于平滑 CMOS 数字逻辑开关产生的局部电源波动,并抑制高频噪声。

图片

图 2-2:Xbox 中的典型无源元件。

为什么电路板上的走线到处蜿蜒?

在查看了几块电路板之后,你可能会开始注意到电路板上的走线往往四处蜿蜒,有时在连接到目的地之前来回几次。当一条直线走线就能解决问题时,这似乎是多余的。然而,你很少会在电路板上找到一个由设计师随意放置的结构。实际上,大多数高端电子设备中信号的传播速度,大约是光速的四分之一,与信号到达目的地的所需时间相比是慢的。例如,在一个 1 GHz 处理器(1 GHz 的每个时钟周期是一个十亿分之一秒的持续时间,即一纳秒)的一个时钟周期内,信号在电路板上只能传播 3 英寸。因此,如果走线长度差异很大,从同一芯片出发的两个信号将到达目的地的时间会有很大差异。为了解决这个问题,设计者会在较短的走线上添加额外的弯曲,使得走线的有效长度与较长的走线相同。

在 Xbox 主板上发现的其它大型无源元件包括电感和电阻。Xbox 主板上发现的粗线绕制的环形(甜甜圈形状)电感都是电源子系统的组成部分。电感以磁通的形式储存能量。电感的电气特性与电容互补。在电感与电容之间加入晶体管开关的组合被用来构建非常高效的电源调节器。Xbox 主板上的大多数电阻要么用于吸收信号轨迹终端的过剩能量,要么用于将电线偏置到特定的逻辑电平。

你可以通过两种方式在 Xbox 主板上识别被动组件。第一种是通过封装的形状。由于被动元件的基本种类很少,因此封装形状识别是可行的。图 2-2 展示了你可能在 Xbox 主板上看到的电容器、电感器和电阻器的图片。第二种方法是读取主板旁边组件的标签,并通过参考设计符推断组件的功能,以表 2-1 作为指南。

活性组件可以放大信号,并且有三个或更多引脚。最简单的活性组件是晶体管,有三个偶尔四个引脚(有时离散的“MOSFET”晶体管有一个明确的第四个“体”端子)。最复杂的活性组件是集成电路,如 CPU 和内存芯片,有数百甚至数千个引脚。集成电路有多种封装形式,有时连接隐藏在封装下面,就像球栅阵列(BGA)封装那样。Xbox 主板上的图形芯片 MCPX 和 CPU 使用 BGA 封装。图 2-3 显示了 BGA 器件的横截面,揭示了下面的隐藏连接。

图 2-3:BGA 封装部件(GeForce2)在主板上的横截面视图。

这些电阻器和电容器在数字电路板上都起什么作用

你会在许多电路板上注意到的一个主题是电阻器和电容器的数量很多。电容器无处不在,因为它们有助于将噪声降至最低并稳定电源电压。它们是必需的,因为用于分配电源的铜平面有少量电阻和电感。当大量电流通过电源时,这些小的寄生参数可能会引起大问题。电容器的精确放置和选择被认为是一种有点像黑艺术的技巧。如果你在操作电路板时不小心碰掉了其中一个微小的、沙粒大小的电容器,你可能会设法不更换它就能解决问题。然而,考虑到这种类型的缺陷,你最可能遇到的问题是间歇性的可靠性问题。

虽然电容器无处不在,为所有组件提供局部能量存储,但电阻器则移除多余的能量。主板上的快速信号携带大量能量,如果能量没有被电阻器以受控的方式在接收端消耗,信号能量将反射回发射端并引起问题。这种现象与体育馆中的声音类似。当你在一个空荡荡的体育馆里说话时,会有回声。如果你说话太快,人们将无法理解你,因为回声会开始干扰你的说话。然而,如果你用泡沫覆盖体育馆的墙壁,回声将被泡沫吸收,你可以不受回声干扰地说话。

电阻就像您会放在墙上以吸收回声的吸音泡沫,这样电路就可以以高速相互通信。与大多数电容器不同,如果您在玩耍时不小心敲掉这些电阻之一,您将不得不更换它才能使电路正常工作。这些“终止电阻”通常封装在四个或八个一包,所以它们看起来几乎像小型集成电路。您可以通过它们的光滑、略微凸起、白色边框以及它们附近有“RP”参考设计符前缀来区分电阻组件。在追踪通过电阻组件的信号时,可以相当安全地假设信号是直线流动的,因此一侧的连接会直接穿过到另一侧的引脚。

识别特定集成电路的功能比识别无源器件的功能更具挑战性。功能相同的硅可以购买成各种包装,外观可能非常不同。在某些情况下,您可以通过观察设备连接到什么或其外观来猜测设备的功能,但最可靠的方法是从芯片上读取部件编号并在网上查找。(通常,部件会有某种标志或部件编号前缀来标识制造商,您可以通过访问制造商的网站来找到更多关于该设备的数据。)如果您不认识标志或部件编号前缀,以下列出的服务可以帮助您查找部件功能。

  1. www.findchips.com 可以接受部件编号或部件编号的一部分,并搜索多个分销商的库存以找到匹配项。大多数常见部件都会在 FindChips 上显示,提供的链接通常会不仅包含部件的简短描述,还包括定价和订购信息。

  2. www.google.com 索引了网络上的所有内容,部件编号也不例外。如果您在标志字母加上描述性术语(如“半导体”)进行查询,Google 还可以帮助您找到制造商的网站。在制造商的网站上,您可能需要找到隐藏在网站中的专用部件搜索引擎,或者访问半导体产品子页面来进行部件编号查找。公司网站首页上的搜索功能有时可以找到部件编号,但更常见的是它只索引无用的公司营销页面。

  3. 如果上述服务都无法帮您找到所需部件,尝试去掉部件编号中的一些前缀和后缀。以我们的 M29F080A 为例,仅查询部件编号 29F080,就能将您带到多个制造商的网页上,这些制造商生产的部件在功能上与意法半导体(STMicroelectronics)的部件兼容。

figure_2-4

图 2-4:典型 IC 部件编号的解剖图。该图是 Xbox 主板 U7D1 位置芯片的卡通图。

尝试一下

Xbox 架构图

让我们尝试查找一个 Xbox 部件编号。定位 Xbox 主板上的 U7D1。图 2-4 展示了你可能会找到的内容。部件编号通常是芯片上最长的数字,通常以一到两个字母开头。内存芯片和处理器在部件编号后也经常有一个速度等级或质量后缀。此外,几乎所有芯片都有一个日期代码。日期代码 通常是格式为 YY-WW 的四位数字,其中 YY 是芯片制造的年份,WW 是工作周。在我们的例子中,我们的 M29F080A 部件是在 2001 年的第 41 周在新加坡制造的,并且有一个 速度等级为 70N1。剩余的数字 5881K 是一个 批号,其含义因制造商而异,但通常将芯片与特定的硅晶圆或硅晶圆批次的跟踪号在制造设施中联系起来。

“ST”标志表示该芯片的制造商是 STMicroelectronics,幸运的是,通过 Google 搜索或猜测,可以快速找到该** 制造商的网站,因为公司的网址很简单 www.st.com 将部件编号 M29F080A 输入主页上的搜索字段,可以直接进入包含该部件详细数据表和描述的搜索结果 ——这是一个 8 兆位的统一块单电源 FLASH ROM。

测试点

几乎所有消费电子产品的电路板都设计了结构,以加快在工厂中对成品板进行测试。这些“测试点”存在是为了应对制造缺陷的遗憾现实。Xbox 在测试点和制造缺陷方面也不例外。Xbox 主板的底部布满了数百个测试点——微小的银色圆圈——允许接触探头访问 Xbox 中几乎每一个有趣的信号。这些测试点对逆向工程师和希望修改硬件的人来说是一份受欢迎的礼物,因为它们提供了对可能需要显微镜和稳定手部操作的信号的轻松访问。

在制造线上,使用一种称为“钉床测试器”的设备一次性对所有测试点进行探测。这个名字很贴切,钉床测试器由数百个弹簧加载的“跳针”结构组成。将主板对准测试台并用机械冲头或真空夹具夹紧。同样,你可以利用测试点通过跳针对 Xbox 主板进行无焊点修改。你需要自己制作电路板(见附录),但结果将是一个只需拧紧螺丝即可安装的板子——无需焊接!

Xbox 架构

在深入研究模式匹配示例之前,我们需要一个模式参考。让我们利用这个机会研究 Xbox 内部架构作为模式参考,并最终将 Xbox 架构与 PC 和另一款游戏机进行比较。

高级组织

Xbox 的 CPU 是一款运行在 733 MHz 的 Pentium-III 级处理器。CPU 上的“S-Spec”数字与移动赛扬的数字最为接近。CPU 通过标准的 P6 133 MHz 前端总线(FSB)连接到一个图形处理单元(GPU)和一个由 nVidia 称为 NV2A 的北桥组合芯片。它在 PC 上的最接近的相对者是 nVidia 的 nForce IGP 芯片。由于北桥逻辑和 GPU 集成在单个芯片中,CPU 和图形处理器可以共享一个共同的内存池。这被称为“统一内存架构”(UMA)。与传统分割视频/主内存架构相比,UMA 在构建成本上更低,因为它消除了专用的视频内存。然而,UMA 在某些情况下性能较低,因为它在主处理器和图形处理器之间引入了内存访问竞争。为了缓解一些这种竞争,系统内存经常被分成多个银行。例如,nForce IGP 将内存分成两个银行,这两个银行可以通过交换网络独立地由 GPU 和 CPU 访问。

图片

图 2-5:Xbox 的高级架构视图。

图片

图 2-6:带有主要组件标签的 Xbox 主板的照片。

GPU 通过一个称为 HyperTransport 的高速、窄总线连接到一个名为“MCPX”的厨房水槽芯片。MCPX 集成了南桥芯片以及几乎所有 Xbox 的外设,包括 USB 控制器、传统的引导 ROM 接口、杜比数字音频处理器、IDE 控制器、以太网控制器以及系统管理功能的接口。

Xbox 中所有主要模块的连接性如图 2-5 所示,图 2-6 展示了这些模块在实际 Xbox 主板上的位置。

功能细节

以下章节简要概述了构成 Xbox 架构的各个部分。我们特别关注理解如何逆向工程 Xbox 安全机制所需的细节。

CPU

CPU(中央处理单元)是传统计算机的计算核心。CPU 架构是一个值得单独成书的话题,因此我们只涵盖理解如何逆向工程 Xbox 所需的内容。特别是,我们将探讨如何控制 Xbox CPU。

CPU 读取存储在内存中的指令序列——程序——这些指令告诉 CPU 执行各种计算或基于可用数据进行决策。指令以称为操作码的数字形式存储在内存中。操作码以操作数作为参数。程序员在编写低级机器代码时使用字母表中的助记符,这样他们就不必记住数百个操作码数字。例如,一种字宽减法指令的操作码为 0010.1000(二进制)或 0x28(十六进制),助记符为“SUB”。所需的减法操作码取决于减数数据的源和宽度。跟踪所有操作码到操作数的规则是令人压倒性的,因此将助记符和操作数转换为指令编号的过程是通过一个称为汇编器的程序来完成的。同样,将指令编号转换回助记符的过程是通过反汇编器来完成的。值得注意的是,大多数程序不是用汇编语言编写的;通常使用高级语言,如 C。这些高级语言使用编译器转换为机器指令。将机器指令自动反编译回高级语言可能很困难,因为编译过程——特别是优化编译——丢弃了原始源代码中包含的大部分高级结构信息。

处理器通过一个指令指针(IP)跟踪正在执行的指令。在某些情况下,IP 也被称为程序计数器(PC)。IP 通常一次前进一个指令,除非遇到分支指令。分支指令给程序提供了一个机会,通过检查 CPU 内部的数据并根据检查结果跳转到新位置来做出决策。理解指令指针的移动是逆向工程 Xbox 的核心部分。能够操纵 IP 等同于控制 Xbox 能做什么和不能做什么。Xbox 软件架构中实施的安保措施试图保证 IP 始终只执行微软批准的代码,在运行之前总是通过密码学验证代码的真实性。

二进制和十六进制数

数字电路使用 1 和 0 来表示数字。这种二进制,“基数-2”的表示法反映了电气信号用于表示数字的方式:使用两个电压范围来定义一个逻辑状态或另一个状态。可以构建使用超过两个电压级别来表示信息的电气系统,但这会以功率和复杂性的代价为代价。例如,现代调制解调器使用多个电压级别和相位信息来在单个时间单位内表示多个数据位。

二进制中的数字组成和算术遵循我们熟悉的十进制(“基-10”)表示法相同的规则。在十进制中,0 用作占位符,以记住何时一个数字溢出。例如,比 9 多 1 的数字会导致溢出,因为没有比 9 大的单个数字。因此,数字 10 记录了最右边的十进制位置发生了一次溢出。同样,在二进制中,比 1 多 1 是 10,因为二进制中最大的单个数字是 1。

因此,在十进制中,一个四位十进制数 d[4]d[3]d[2]d[1] 的值可以分解为:

d[4] * 10³ + d[3] * 10² + d[2] * 10¹ + d[1] * 10⁰ = d[4] * 1000 + d[3] * 100 + d[2] * 10 + d[1] * 1

同样,一个四位二进制数 b[4]b[3]b[2]b[1] 可以分解为:

b[4] * 2³ + b[3] * 2² + b[2] * 2¹ + b[1] * 2⁰ = b[4] * 8 + b[3] * 4 + b[2] * 2 + b[1] * 1

例如,数字 1010 = 18 + 04 + 12 + 01 = 10 十进制。

直接跟踪二进制中的数字会很快变得繁琐;例如,要表示十进制 968,你需要十个二进制位。为了节省屏幕空间,二进制数被转换为八进制或十六进制。八进制格式,或“基-8”,在计算机的早期阶段很受欢迎,但现在已经变得很少见。十六进制,或“基-16”,是事实上的数字系统。十六进制中有 16 个数字,所以与十进制数字 10 到 15 对应的十六进制数字由字母 A 到 F 表示。表 2-2 总结了前 16 个正整数之间的二进制、十进制和十六进制转换。

为了区分十六进制数和十进制数,许多人使用 C 语言约定,其中 0x[number] 表示一个十六进制数,而 [number] 默认是一个十进制数。在 C 语言中没有类似的标准可以借鉴,因此有些人使用 Verilog 标准,[digits]’b[number],其中 [digits] 是二进制数的位数。在一系列 1 和 0 后的“b”后缀,例如 1010.1100.1110b,也用来表示二进制数。注意如何使用“.”将二进制位分组为四位的集合;这有助于将二进制数心理转换为十六进制:0xACE。

二进制 十进制 十六进制 二进制 十进制 十六进制
0000 0 0 1000 8 8
0001 1 1 1001 9 9
0010 2 2 1010 10 A
0011 3 3 1011 11 B
0100 4 4 1100 12 C
0101 5 5 1101 13 D
0110 6 6 1110 14 E
0111 7 7 1111 15 F

表 2-2:二进制、十进制和十六进制转换表。

CPU 的核心是一个称为寄存器文件的小型但非常快速的内存。每个处理器时钟周期,可以写入和读取多个数据到寄存器文件。来自寄存器文件的数据被送入一个称为算术逻辑单元(ALU)的执行单元。ALU 计算的功能由从内存中取出的指令控制。一旦数据被 ALU 处理,它既可以写回寄存器文件,也可以存储到内存中。

几乎每个现代 CPU 的一个重要性能特性是内存访问加速器,称为缓存。缓存是小型、快速的内存,存储 CPU 核心未来可能使用的数据和指令片段。缓存比寄存器文件慢,但比主内存快;同样,缓存存储的数据比寄存器文件多,但比主内存少。

需要注意的 Xbox CPU 缓存的一个重要特性是它是一个写回缓存。写回缓存允许 CPU 内部存储的数据副本与主内存中的数据不同步。这种时间差异可能会使仅通过观察外部内存流量来追踪 CPU 执行变得复杂。缓存内存还可以被安全例程利用,以隐藏中间计算结果,防止观察内存总线的人看到。

北桥和南桥

Northbridge 和 Southbridge 这两个术语是 PC 架构的行话。它们指的是几乎每个 PC 中都存在的两个基本支持芯片。北桥芯片将 CPU 连接到主内存以及任何高性能扩展总线,如 AGP 和 PCI。南桥芯片挂在北桥芯片上,包含典型 PC 中发现的全部额外外围设备——并行、串行、USB、鼠标、键盘、IDE 控制器、音频编解码器等。将 PC 架构分为这三个主要模块——CPU、北桥和南桥——使 PC 设计者能够混合搭配不同类型的内存架构与多样化的处理器和外围设备。

北桥和南桥芯片组之间的连接因芯片组而异。在 Xbox 的情况下,采用了一种高性能、窄并行总线,称为 HyperTransport,作为北桥和南桥芯片功能等效部分的连接。总线在每个方向上只有 8 位宽,但以 200 MHz 的频率运行,并且在每个时钟沿采样数据,因此每个方向的有效峰值传输率为 400 Mbytes/second。北桥芯片通过一个称为前端总线(FSB)的总线连接到 CPU。在 Xbox 的情况下,FSB 是一个 133 MHz 的 64 位总线,使用 AGTL+逻辑电平。

在逆向工程中,了解和理解芯片之间连接的类型至关重要,因为连接类型将决定拦截各个组件之间传输的数据有多困难。关于相对容易接入的总线——HyperTransport 总线——的细节将在第八章“逆向工程 Xbox 安全”中讨论。

在 Xbox 中,南桥芯片是由 nVidia 设计的,称为 MCPX;它是 nVidia nForce MCP 多媒体和通信处理器的衍生产品。北桥芯片也是由 nVidia 设计的,称为 NV2A GPU。北桥和南桥芯片都是由 TSMC(台湾半导体制造公司)制造的。NV2A 结合了 GPU(图形处理单元)和大多数北桥芯片中发现的传统内存和扩展总线控制器。如前所述,将图形处理器和北桥结合在一起允许系统设计者将图形内存合并到主内存中,虽然会付出一些性能代价。

RAM

Xbox 主板使用 64 MB 的 DDR SDRAM 作为主内存。DDR SDRAM 代表双数据速率同步动态随机存取存储器。通过结合同步和 DDR 技术,Xbox 主内存的总带宽达到 6.4 吉字节/秒。RAM 基本上是一个由 CPU 索引的信息表。RAM 中的每个位置都有一个唯一的索引号,称为其地址,正如“随机访问”这个名字所暗示的,在 RAM 中对数据访问的顺序没有限制。¹

“动态”一词用于需要不断刷新以保持数据完整性的 RAM。例如,Xbox 中使用的 RAM 必须每秒大约读取和写入每个位置三十次。性能代价并没有听起来那么糟糕,因为现代 DRAM 芯片中内置了特殊硬件,有助于优化这个过程。

“同步”前缀意味着在 DRAM 内部,数据访问的过程被分解成一系列步骤。这些步骤中的每一个都是独立的,并且可以并行发生,因此可以同时处理多个数据请求。一个称为时钟的外部时序信号用于同步数据访问请求在 DRAM 内部各个步骤中的移动。因此,数据访问请求就像水流过管道一样流经每个步骤,这种技术也被称为流水线。同步 DRAM 比其前辈具有更高的带宽吞吐量,因为流水线允许一次处理多个请求。然而,从首次向 SDRAM 发出访问请求到数据最终出现在输出端所需的时间——即访问延迟——并不会因为流水线而得到改善。

“双数据速率”这一术语指的是同步数据相对于同步时钟的传输方式。时钟波形由高和低信号的重复模式组成。在传统系统中,数据仅在时钟波形的低到高转换时传输。在 DDR 系统中,数据在低到高和高到低转换时都进行传输。因此,对于相同的时钟频率,可以传输两倍的数据量。DDR SDRAM 供应商引用的 DDR266 等性能助记符指的是传输速率,因此实际的时钟速度是性能助记符的一半,在本例中为 133 MHz。

ROM

每台计算机都需要某种持久或非易失性存储器来存储启动程序或引导程序。上面讨论的 DDR SDRAM 不适用于此应用,因为当断电时,DDR SDRAM 中的所有数据都会丢失。当前版本的 Xbox 使用闪存 ROM 来存储即使在断电时也需要持久的数据。ROM 代表只读存储器,而 FLASH 指的是一种特定的可电子重新编程的存储元件。在 PC 中,FLASH 风格存储器很方便,因为最终用户可以重新编程以修复引导代码中的错误。然而,在 Xbox 中,用户对闪存 ROM 的编程是故意禁用的。编程所需的写信号通过省略位于 Xbox 主板背面组件位置 R7R4 处的跳线来断开(有关更多信息,请参阅侧边栏标题为“启用 FLASH ROM 编程硬件”)。在 Xbox 的情况下,FLASH 的可重新编程性主要被用作微软在开发和生产过程中的便利。很可能在几个月后,一旦微软认为其引导程序和内核已经准备好刻录成石(或硅,视情况而定),Xbox 将使用更便宜的硬连线“掩模 ROM”。

引导 ROM 在逆向工程任何计算机中都起着至关重要的作用,因为它包含负责初始化整个系统的关键代码。在 Xbox 的情况下,引导闪存 ROM 扮演着更加关键的角色,因为它部分负责实施严格的软件安全系统。闪存 ROM 在安全系统中的确切作用将在稍后解释,但当前需要记住的重要一点是,闪存 ROM 控制 Xbox 中硬件的初始化,并包含初始操作系统内核映像。

启用 FLASH ROM 编程硬件

为了防止在系统内进行 FLASH ROM 编程,微软断开了信号,修复这一问题的过程相对简单。FLASH ROM 写入信号是通过省略位于 Xbox 主板底部 7R 区的单个电阻器,组件编号 R7R4,来断开的。您可以在电阻器的两个银色焊盘之间焊接一段电线,或者甚至可以用大量的焊锡直接连接这两个焊盘。请注意,尽管通过此修复已启用 FLASH ROM 编程,但您仍然没有实际进行重新编程的程序。由于微软实施的加密软件安全系统,运行此类程序是一个更大的挑战。

些零碎事项

Xbox 拥有一个名为系统管理控制器(System Management Controller,简称 SMC)的小型 8 位协处理器。SMC 是一个完整的微型计算机,包含 RAM、ROM 和处理器,全部封装在一个单一组件中。SMC 内部的处理器使用的是 PIC(外围接口控制器)架构,该架构最初于 1975 年在哈佛大学开发,并由通用仪器公司进行商业化改造。亚利桑那微芯片技术公司(现称为 Microchip Technology,网址:www.microchip.com)于 1985 年收购了 PIC 产品线,并自此开始销售。SMC 可在 Xbox 的 7B 区找到,其参考设计号为 U7B2。SMC 监控 Xbox 前面的电源按钮,因此即使 CPU 关闭,SMC 也必须运行。因此,Xbox 电源具有一个低电流的 3.3V “待机”电源线,当 Xbox 连接电源时始终处于活跃状态。SMC 还负责控制 Xbox 电源按钮周围的灯光,并控制 DVD 弹出机制。最后,SMC 还有一个监控 CPU 健康的功能,并在 CPU 崩溃时重启 CPU。如果您想在 Xbox 上运行自己的操作系统,必须禁用 SMC 监控功能。SMC 通过 MCPX 通过一个称为 I2C 的 1 位串行接口与 CPU 通信。

Xbox 的另一个重要特性是 LPC 调试端口。LPC 调试端口是一个 4 位宽的 33 MHz 总线。LPC 代表“低引脚计数”,它最初是为了通过一个简单的中间转换芯片将大量慢速的旧设备(如键盘、串行端口、并行端口和引导 ROM)连接到南桥芯片而设计的。LPC 调试端口可能是微软的硬件承包商为了制造测试目的而提供的。当 Xbox 接近生产最后阶段时,LPC 调试端口用于在 Xbox 主板上加载一个执行测试、诊断和烧录的程序。LPC 调试端口将在第十一章中更详细地讨论,但你现在需要知道的重要事情是,可以通过连接一个符合 LPC 规范的 ROM 设备并短路 FLASH ROM 上的一个数据引脚(D0)到特定的电压(零伏特)来强制 Xbox 通过 LPC 调试端口读取其初始引导 ROM 映像。这可能是在知道如何绕过保护 Xbox 的保密引导代码的情况下强制 Xbox 启动你自己的代码的最简单方法。

模式匹配

现在我们已经熟悉了 Xbox 架构,我们有一个参考点,可能是最强大的逆向工程工具之一——模式匹配。通过仅仅观察各个部分的连接性、位置和形状来对各种部件的功能做出有根据的猜测,是成为一名优秀的逆向工程师的第一步。为了展示模式匹配的力量,我们将比较 Xbox 主板与 PC 主板以及任天堂 Gamecube 主板。

学习大量模式是成为优秀模式匹配者的最佳方式。我拆解了我购买的每一件设备,并仔细研究电路板,试图通过“阅读”电路板来学习其他设计师知道的内容。每个电路板都讲述着其设计过程的故事;很少会遇到没有一些预定目的的奇特电路特性。

警告

图片

在拆卸任何电子设备时,务必首先拔掉电源插头,并等待一分钟,以便电源中的大电容上的电荷消散。此外,务必使用第一章中描述的适当的静电控制措施!

比较:Xbox 与 PC

Xbox 与 PC 的相似性对黑客来说是个福音,因为 PC 平台非常详细地记录了。Xbox 中的每个部件在典型的 PC 中都有一个对应部分,因此几乎任何高级问题都可以通过阅读类似 PC 部件的资料来解答。因此,仔细研究 Xbox 主板与标准 PC 主板之间的相似性是有益的。另一个好处是,本书中的许多信息将直接适用于 PC,因此你可以轻松地将从破解 Xbox 中学到的知识应用到大量情况中。

Xbox 最接近的亲属是基于使用统一内存架构的芯片组系统,例如 nVidia 的 nForce 或 Via Technology 的 ProSavageDDR。前一小节中展示的架构图是通过阅读 Xbox 的发布规范和 nVidia 网站上关于 nForce 芯片组的资料得出的。在本节中,我们将比较 Xbox 与基于 Via Technology ProSavageDDR 的 P4M266 主板。在这里,Xbox 与非 nVidia 芯片组主板进行比较,以强调 Xbox 与 PC 的广泛相似性。

图 2-7 展示了一块 PC 主板的图片,即 Via P4M266。尽管芯片组由不同的厂商制造,但 P4M266 与 Xbox 之间的相似性非常明显。前一小节中涵盖的所有内容几乎都适用于这块 PC 主板。主要的不同之处在于一些杂项端口和连接器,以及存在 PCI 和 AGP 高性能扩展端口。由于所有传统外围设备都直接由一个 LPC 多 I/O 芯片实现,因此 Via P4M266 缺少一个明确的 LPC 调试连接器。

图片

图 2-7:带有集成图形的 P4M266 主板。

对比:Xbox 与 Gamecube

任天堂 Gamecube 与 Xbox 相比非常有趣。Gamecube 是一款与 Xbox 相同目的——游戏——设计的机器,但设计理念却大相径庭。Xbox 和 Gamecube 都采用了相同的总体架构——一个 CPU、一个图形协处理器、一些内存和一些支持芯片——但相似之处到此为止。Gamecube 的设计体现了对细节和成本的严格要求。Gamecube 的主板小巧简单,组件数量保持在最低限度,散热和热设计非常简单。Gamecube 主板上的大部分 PCB 线路的整洁、直线布局反映了几乎每个 IC 都是专门为 Gamecube 定制的这一事实。因此,Gamecube 是一个比 Xbox 更经济的构建平台。

可以通过从任天堂提供的基本营销信息中推断每个芯片的功能来识别 Gamecube 的整体组织结构。由于 Gamecube 使用了大量在标准 PC 中没有对应部件的定制组件,因此很难推断 Gamecube 的架构细节。根据主板上的走线模式,人们可能会认为位于主板中央的大芯片“Flipper”芯片相当于 PC 中集成图形北桥芯片。这几乎是正确的。一个关键的区别是,尽管 Flipper 芯片将内存控制器和图形控制器组合到一个单一封装中,但图形功能仍然有自己的专用内存,该内存建在同一芯片内部。这种组织结构允许图形引擎使用非常高性能的内存,但代价是内存的体积比使用片外内存要小。片上内存体积较小的问题部分通过使用极快的片外内存得到补偿。

Gamecube 不像 Xbox 那样使用 DDR SDRAM;相反,它使用一种称为 1-T SRAM 的内存。1-T SRAM 是模拟一种称为静态 RAM(SRAM)的非常快速内存类型的 DRAM 内存。SRAM 的随机访问延迟比 DRAM 低得多,而且它们也不需要像 DRAM 那样每秒刷新 30 次每个内存单元。DRAM 如何伪装成快速 SRAM 背后的实际魔法相当复杂,超出了本书的范围,但您可以在 1-T SRAM 制造商的网站上找到更多信息,网址为 www.mosys.com。

图片

图 2-8:Gamecube 主板及其电源调节卡。主板的大小大约是 Xbox 主板的一半。

Gamecube 还有另一块内存,称为 ARAM,其速度比 1-T SRAM 慢,用于存储不需要高带宽访问的音频样本等。拥有不同的内存架构意味着 Gamecube 可以从每个子系统中获得更一致的性能,这对于将帧延迟保持在最低非常重要。然而,权衡的是,Gamecube 可能更难编程,而且对多个内存部件的管理不当可能导致性能问题。

Gamecube 与 Xbox 之间的另一个重要区别是,Gamecube 的功耗比 Xbox 低得多。一开始,功耗可能看起来并不重要,因为这两款游戏机都设计成可以插入电源插座,但 Gamecube 较低的功耗需要更少的传热组件和更小的电源来使用,从而节省成本。图 2-8 包含了一张 Gamecube 电源调节器的图片供参考;电源调节器的体积只是 Xbox 电源供应器加上 Xbox 主板上的本地开关调节器体积的一小部分。

公平地说,请注意,Gamecube 确实有一个小型的外部交流电转直流电转换器,而 Xbox 则直接将市电接入游戏机。此外,电子元件在较高温度下会更快地退化,正如阿伦尼乌斯定律所描述的。例如,将工作温度提高 10 摄氏度大约可以将元件的故障率翻倍。因此,由于 Gamecube 产生的热量较少,并且其热管理系统与 Xbox 相当,甚至更好,所以 Gamecube 在多年后应该比 Xbox 更可靠。

最后,值得注意的是,Gamecube 在各个地方都使用了专有的 I/O 接口。游戏光盘格式是一种迷你 DVD 格式,DVD 读取器通过专有连接器连接到主板。使用较小的 DVD 媒体可以让任天堂减少数据查找的延迟,这意味着更短的加载游戏时间。游戏控制器和存储卡也使用专有信号格式。Gamecube 中的所有东西在某种程度上都类似于我们熟悉的 PC,但没有任何东西在设计上直接被采纳而不做任何改变。

除了优化 Gamecube 的制造性和成本外,主要使用专有芯片和标准使得该游戏机比 Xbox 更难以逆向工程。例如,注意在图 2-8 中,Gamecube 中没有明显的 ROM 芯片。因此,为了开始查看 Gamecube 代码,必须在一个主板上某个芯片中搜寻并提取一个隐藏的 ROM!这是少数几个通过隐蔽性实现安全性的情况之一。即使 Gamecube 上没有任何安全措施,尝试将自定义代码烧录到任天堂的 DVD 格式上的成本和努力对于个人爱好者来说也是不值得的。


¹ 实际上,SDRAMs 由于性能原因,对内存访问模式(如页面模式和突发模式)可能有一些限制。"随机"这个名称是为了区分 RAMs 和采用严格排序规则访问数据的先进先出(FIFO)和后进先出(LIFO)风格的存储器。

第三章:-

安装蓝色 LED

现在你已经拆下了你的 Xbox 外壳,是时候做一些入门级项目了。接下来的章节将指导你进行一些基本的修改和维修,这些你可以在你的 Xbox 上完成。这些项目是为那些对硬件黑客经验很少或没有经验的读者设计的。更高级的 Xbox 主题可以在后面的章节中找到。

在本章中,你将学习如何将 Xbox 前面板上的通常为绿色的 LED 更换为蓝色 LED。这个项目需要的焊接很少;大部分的工作在于拆卸前面板和 LED 电路组件。让我们开始吧!

注意

标准的 Xbox 使用绿色/红色组合 LED,但红色 LED 仅用于指示错误状态。本章中描述的程序将把你的 Xbox 前面板 指示灯转换为仅蓝色 LED。合适的替代品将是蓝色/红色组合 LED(T-1,3 毫米直径透镜)。然而,它们很难找到,所以这里的说明不会使用它们。说明将提供必要的背景知识,以便如果你愿意,你可以即兴发挥并融入你自己的 LED 解决方案。

你需要什么

以下是你完成此项目所需的设备清单:

• 带细尖头的低功率烙铁

• 焊锡

• 焊剂和烙铁头清洁剂(可选)

• 小型平头螺丝刀

• T-10 位托克斯驱动器

• 两个低压(3 伏特)的 T-1(3 毫米)外壳蓝色 LED

• 在焊接过程中固定部件的遮蔽胶带

你可以使用你喜欢的任何颜色的 LED,但它必须在约 3 伏特的电压下打开,并具有 T-1 风格的壳体。购买 LED 时请注意,因为许多蓝色和白色 LED 仅被评定为在 5 伏特下工作。这里使用的 LED 是 Lumex SSL-LX3044USBC,你可以通过 Digi-Key(www.digikey.com)购买;零件编号为 67-1747-ND。(对于预算有限的用户,Digi-Key 可以通过美国邮政服务的一等邮件发送 LED。请注意,通过 Digi-Key 的订单低于 25 美元时,将收取 5 美元的手续费。)

如果 Digi-Key 的最小订单限制对你来说是个问题,Mouser Electronics(www.mouser.com)也有一系列蓝色 LED,而且他们没有最低订单要求。一个例子是 Kingbright 蓝色 LED,带有一个水清透镜的 T-1 外壳;Mouser 库存编号为 604-L7104PBC/H,这是亮度更高、电压略高的版本,或者 604-L7104QB/D,这是一个在较低电压下运行但亮度较低的版本。

如果你希望同时保持错误状态 LED 的功能,你也可以使用双色 LED。Xbox 需要一个带有三个引脚的 T-1 外壳的共阴双色 LED。不幸的是,带有蓝色元素的较小 T-1 外壳的双色 LED 很难找到。

拆卸 Xbox 前面板

Xbox 前面板是由 ABS 塑料模压而成的部件,用四个 T-10 六角螺钉和三个模压摩擦锁固定。前面板中的电子设备通过一个九线连接器连接到 Xbox 主板,该连接器穿过金属电磁干扰屏蔽上的一个孔。

按照第一章中的说明打开 Xbox。抬起并移动硬盘驱动器和 DVD 驱动器,使其向上并向后移动,以便露出 Xbox 主板的前边缘。你不需要解开任何硬盘驱动器的电缆。图 3-1 说明了这些步骤后你的 Xbox 应该看起来是什么样子。

图片

图 3-1:将光盘驱动器放置,以便露出主板的前边缘。

注意

图片

较旧的 Xbox 型号在 Xbox 前面附近将有一个垂直安装的 PC 板。可以通过握住板子并将其从插座中拔出移除该 PC 板。你可能发现移除垂直安装的 PC 板有助于释放前面板中间的摩擦锁。完成工作后,不要忘记更换 PC 板!

拆下固定前面板组件的四个螺丝(见图 3-2)。

按照图 3-3 所示从 Xbox 主板上拆下前面板线连接器。连接器只需要稳定而有力的力量。(不要猛拉连接器,以免损坏电线。)

图片

图 3-2:前面板组件上四个固定螺丝的位置。

现在是棘手的部分:摩擦锁。摩擦锁是由塑料制成的钩子,用于固定部件。钩子的形状使得插入容易,但取出困难。释放摩擦锁通常需要在塑料上弯曲或推压。

图片

图 3-3:从 Xbox 主板上拆下前面板线连接器。

三个摩擦锁固定前面板:一个在前面板的每个边缘,一个在中间穿过金属电磁干扰屏蔽。首先,使用如图 3-4 所示的薄刃平头螺丝刀松开边缘的摩擦锁。这些锁非常紧,你可能需要分段释放,从顶部开始。将螺丝刀尖端插入面板和主箱体侧面的空间中,直到感觉到轻微的松动。移开螺丝刀并重复在箱体底部附近的过程。你可能需要尝试几次才能使锁释放。不要对箱体施加过多力量,以免划伤或损坏塑料。当前面板的边缘自由时,你将能够将其从箱体中弯曲出来。对两个边缘重复此过程。

图片

图 3-4:使用平口螺丝刀松开边缘摩擦锁。 (1) 从顶部开始工作,向下移动; (2) 一旦面板松动,它应该从机箱向外弯曲。

一旦两边都松开,向上拉中间的摩擦锁(如图 3-5 所示),前面板应该弹出。

一旦前面板松开,将前面板线连接器穿过金属电磁干扰屏蔽的孔,并将面板平放在桌子上,外表面朝下。

图片

图 3-5:拇指正在按中间的摩擦锁。

拆卸前面板电路板

Xbox 的前面板组件包含一个小电路板,用一个摩擦锁固定片固定,如图 3-6 所示。用手指或螺丝刀按摩擦锁并从前面板的托架上拉出前面板电路板组件。

将电路板组件平放在桌子上,绿色面朝下。你应该能看到两个清晰的 LED 和两个扁平的按钮开关。

图片

图 3-6:将印刷电路组件从前面板中取出。 (1) 使用螺丝刀向下按摩擦锁卡扣(如有必要), (2) 然后将组件从前面板中取出。

安装蓝色 LED

现在电路板组件已被移除,是时候安装蓝色 LED 了。这需要一些焊接,所以请插入电烙铁并让它预热。请注意,使用细尖烙铁和使用烙铁头清洁剂在焊接前清洁烙铁头非常重要。如果您需要这些物品中的任何一项,请参阅附录 A,“如何获取您的黑客工具”,您只需花费比视频游戏稍多的费用就可以装备自己。

使用平口剪线钳移除两个现有的 LED。尽可能保留从 LED 中伸出的金属腿,因为您稍后需要用它们来安装蓝色 LED。图 3-7 显示了完成后的电路板应该看起来是什么样子。

图片

图 3-7:从电路板组件上剪下现有的 LED。 (顶部) 尽可能靠近机箱剪下 LED; (底部) LED 已被移除。使用此程序移除两个 LED。

为了帮助焊接,用一块胶带将电路板固定在平坦的表面上,使其不会移动。将蓝色 LED 放置在电路板组件上的旧 LED 的金属短柄上,使其腿接触。 (图 3-8 展示了如何识别 LED 的极性和它们在电路板组件上的正确方向。如果您不确定如何识别 LED 的极性,请参阅侧边栏“LED 的解剖结构”。)

使用胶带将 LED 的透镜部分固定到位,以免在焊接时滚动。你需要弯曲或切割将安装在电路板右侧的 LED 的引脚,因为黄色线连接器会挡住。

警告

请注意 LED 的正负极。如果你将 LED 反向安装,将不会发出光线。如果你不确定如何识别 LED 的正负极,请参阅侧边栏 关于 LED 的解剖结构。**

figure_3-8

图 3-8:蓝色 LED 在前面板电路板组件上的放置。注意电路板两侧 LED 颜色的反对称。

图 3-8 还说明了库存 Xbox LED 的正负极和功能。鼓励勇于尝试的读者进行创新,安装多个 LED 或表面贴装 LED 组件,以尝试获得更多颜色和功能。通过首先打磨 LED 的边缘,可以安装比 Xbox 中使用的 T-1 包装略大的 LED。

一旦你检查了 LED 的正负极并确认两个 LED 的短引脚都紧贴着原始 LED 的中心引脚的残留部分,就可以将 LED 焊接到位。图 3-10 显示了 LED 焊接到位的情况。(如果你以前从未焊接过,你可能需要在继续之前阅读附录 B,“焊接技术”。)

在使用烙铁之前,熔化一小段焊锡丝以验证尖端是否足够热。如果烙铁足够热,焊锡丝应立即熔化。如果烙铁太冷,你将无法形成良好的接头,并且有损坏电路板的风险。

将烙铁尖端对准蓝色 LED 的引脚,并将引脚推入电路板组件上的金属短柄。当引脚加热时,将一小段焊锡丝涂在蓝色 LED 引脚与金属短柄相交的点。熔融焊锡的表面张力应使焊锡润湿蓝色 LED 的引脚和电路板组件上的金属短柄。如果这种情况没有发生,请取下烙铁,并在接头处涂上一点助焊剂,然后再次尝试。

LED 的解剖结构

LED,或称为发光二极管,是极化设备,只允许电流单向流动。这意味着如果反向安装,它们将不会工作。图 3-9 说明了 LED 的解剖结构。LED 包装侧面的较短的引脚,带有小平面的是阴极。为了使 LED 工作,阴极必须连接到一个比另一个引脚(阳极)更负的电位。

figure_3-9

图 3-9:LED 的解剖结构。

不同的 LED 在点亮时需要的正向电压不同。红色 LED 通常需要 1.7 伏,绿色 LED 需要大约 2.1 伏,蓝色 LED 需要 3.5 伏及以上。早期的蓝色 LED 需要接近 5 伏的正向电压,但随着技术的进步,它们的电压已经降低,使得它们更容易集成到电池供电和低压电子设备中。在为这个项目购买 LED 时,请注意所需的正向电压。如果你安装了一个 5 伏的蓝色 LED,由于 Xbox 驱动器产生的最大正向电压大约为 3 伏,其光输出将会非常暗淡。

不要将烙铁尖端长时间对准金属短柄,否则会熔化固定短柄的焊锡。当你看到短柄的焊锡连接到板上开始自由摆动时,你就知道短柄的焊锡连接已经熔化。如果发生这种情况,将烙铁尖端对准板,并慢慢将烙铁尖端移开。移动尖端可以防止短柄被烙铁拉出。等待短柄冷却,并将短柄弯回到原位。

图 3-10:将 LED 焊接到位。注意电路板和 LED 是如何使用遮蔽胶带固定在原位的。

一旦你将两个 LED 上的所有四个连接点焊接好,将多余的 LED 引脚剪成尽可能短,但不要剪断金属短柄。完成的电路板应类似于图 3-11。

图 3-11:完成的电路板组装。

重新组装前面板

通过将顶部边缘对齐到固定夹下,并推动卡片进入摩擦锁,将电路板组装重新卡回到前面板。

现在,取下完整的前面板组装,并将其与 Xbox 匹配。首先,将线连接器通过电磁干扰屏蔽的原始椭圆形孔穿过去。然后,将前面板推入 Xbox,所有三个摩擦锁应该会自动卡到位。

将前面板线连接器重新连接到 Xbox 主板上。该连接器的形状使得只能按一个方向插入,但连接器模具中使用的塑料较软,如果你用力过猛,可能会反向插入,这可能会对其造成不可逆的损坏。通过将板上的缺失引脚与连接器端头上的缺失电线对齐,如图 3-12 所示,来验证正确的方向。

如果你有一个较旧的 Xbox,通过将其推入插座来重新连接垂直电路板组装。这个电路板是 Xbox 游戏控制器的接口卡,所以你肯定希望它安装正确。

现在,你已经准备好测试你刚刚修改的前面板组件。将磁盘驱动器放入其托盘,并验证它们的电源线和扁平电缆连接是否牢固。插入 Xbox 电源,你应该会看到 Xbox 前面板发出的蓝色光芒。(如果你没有看到预期的效果,不要慌张。下一节“调试”提供了对一些可能问题的解决方案。)

一旦你对 Xbox 的修改满意,关闭 Xbox 并更换前面板组件上的四个固定螺丝。(你需要再次移除磁盘驱动器以访问螺丝孔。)更换磁盘驱动器,再次开启 Xbox 以验证一切正常,然后按照第一章所述重新组装 Xbox 的其余部分。

图 3-12:前面板线连接器的方向特性。箭头指示空极化针的位置。

调试

有时事情会出错。根据我的经验,事情出错的情况比不出错的情况更为常见。如果某件事不工作,最重要的是不要慌张!保持冷静,观察出错的情况,并尝试推测故障的原因。为了参考,表 3-1 包含了一列常见问题和它们可能的原因。附录 E,“调试:提示和技巧”包含了对调试技术的更深入讨论。

问题 可能的原因
Xbox 无法开启。 • 前面板线连接器未正确插入。• Xbox 未插入。• 前面板线连接器损坏,或前面板电路板组件损坏。
Xbox 已开启并正常工作,但 LED 灯不亮或只有围绕弹出按钮的一半灯圈亮起。 • 安装了一个或多个 LED 灯方向错误。• 安装了一个或多个 LED 灯在红色 LED 的金属支架上,而不是绿色 LED 的金属支架上。通过在不插入视频线的情况下开启 Xbox 来验证这一点。这将导致 Xbox 向红色和绿色 LED 发送闪烁信号。
Xbox 已开启并按顺序通过初始动画,但控制台指示需要服务。 • 硬盘或 DVD 连接器已松动。验证灰色扁平电缆接头是否已完全插入每个驱动器,以及每个驱动器的电源连接器是否已完全插入。在较老的 Xbox 型号上,检查垂直游戏控制器接口板是否已正确重新安装。
Xbox 已开启,但游戏控制器无响应。 • 在较老的 Xbox 型号上,检查垂直游戏控制器接口板是否已正确重新安装。
Xbox 已开启,但 DVD 无法弹出。 • 验证前面板和 Xbox 主板之间的线连接器是否已正确插入。• 验证 DVD 电源连接器是否已正确插入。

表 3-1:安装蓝色 LED 的调试指南。

第四章:-

构建 USB 适配器

线缆制作是硬件黑客活动的一个必选部分。在硬件上进行的许多修改和实验都需要定制线缆来适应您现有的连接器。

在本章中,您将学习如何为 Xbox 构建 USB 适配器线缆,这在大多数零售店中不可用(尽管一些在线供应商,如 Lik-Sang(www.lik-sang.com)确实提供此商品)。USB 适配器允许标准 USB 集线器、键盘和鼠标连接到 Xbox,用于运行 Linux。(本章以教程的形式介绍了稳健线缆构建的基础;经验丰富的硬件黑客可以自由地浏览或跳过此部分。)

起始材料

此项目需要以下材料:

• 一个 Xbox 游戏控制器断开连接线替换件或游戏控制器延长线。(见图 4-1。)

• 一个 USB 类型 A 延长线或 USB 类型 A 母座。(USB 类型 A 母座的图片见图 4-2。)

• 焊锡枪、焊锡和助焊剂。

• 一个斜口钳和剥线器。

• 电胶带。

•(可选)3/8 英寸热缩管和热胶。

•(可选)第三只手焊接辅助工具。

本章的逐步描述使用的是断开连接线替换件(可在任何视频游戏零售商处购买),以及 USB 延长线。如果您想使用其他东西,请参阅附录 F,“Xbox 硬件参考”,了解 Xbox 使用的各种连接器的引脚排列。

图片

图 4-1:(左)Xbox 游戏控制器延长线。(右)Xbox 断开连接线。

图片

图 4-2:USB 类型 A 母座。

策略

在构建 Xbox USB 适配器线缆时,基本思路是将 Xbox 断开连接线和 USB 延长线各剪成两半,并将两条线的适当端连接起来。幸运的是,USB 兼容线缆有一个标准的接线代码。红色是+5V 电源,黑色是地线,白色是数据(-),绿色是数据(+)。为了将线缆连接起来,只需将相同颜色的线连接在一起。(注意,Xbox 线缆将有一个额外的黄色线,它携带复合视频同步信号的副本,用于光枪类型游戏接口。这个额外的黄色线可以安全忽略。)本章将逐步指导您连接电线和密封线缆。

警告

图片

一些 USB 线缆制造商不遵守标准 USB 接线代码。最常见的是将白色和绿色线反接,尽管偶尔会完全忽略颜色代码。始终使用万用表验证您的 USB 延长线实际上符合 USB 颜色代码是一个好主意。

实施

首先,在 Xbox 断开电缆靠近(大约 2 英寸)Xbox 连接器端的地方剪断,并在 USB 延长电缆靠近母接头端的地方剪断。丢弃 USB 延长电缆的公头部分和带有较小连接器的 Xbox 电缆的一半。

接下来,使用斜口钳在每个电缆的绝缘层上切出 1/2 英寸的缝隙,如图 4-3 中的框架 1 所示。将绝缘层剥开以露出电线,这些电线将由编织金属屏蔽和一些金属箔保护。将金属编织和箔剥开,并剪掉多余的绝缘和屏蔽。将红色、绿色、白色和黑色电线的末端剥去,使大约 1/8 英寸的裸导体露出。(不要剥去 Xbox 断开电缆中的黄色电线。)将导体的裸露末端浸入一些焊锡膏中。(见图 4-3。)

如果你担心适配器电缆组件的坚固性或安全性,将一段 1-1/4 英寸的热缩管套在电缆上。(这段管子将被套在裸露的焊点上,并用热胶填充以形成坚固的连接。)屏蔽不是必需的,但没有热缩加固的电缆将不那么坚固;如果反复弯曲或拉伸,它将容易断裂。

按照图 4-4 所示,继续电缆构建过程,将相同颜色的电线焊接在一起。在焊接时,让朋友帮助你固定电缆,或者使用带有鳄鱼夹的“第三只手”工具(Jameco 订单号 26690)来固定电缆。所有的焊点都应该看起来光滑且闪亮。对每个焊点进行一次稳固的拉扯,以验证焊锡连接良好。用一小段电工胶带缠绕在开放的焊点上,以防止暴露的焊点短路在一起。在继续到下一步,即焊点将被永久封装之前,测试电缆。

图片

图 4-3: (1) 在电缆绝缘层上切出缝隙,(2) 将绝缘层剥开以露出内部的电线和屏蔽。 (3) 剪掉多余的屏蔽和绝缘层,并从电线末端剥去 1/8 英寸。 (注意右侧 Xbox 连接电缆中的黄色电线没有被剥去。) (4) 最后,将剥开的电线末端浸入焊锡膏中。

一旦电缆经过测试并确认良好,就是时候在焊点上放置坚固的封装以进行机械加固,如图 4-5 所示。在开放的焊点上放置几滴热胶以固定它们,防止它们相互短路,然后将热缩管套在焊点上,然后在管子的两侧填充热胶。管子应该因胶的热量而收缩,并在焊点周围形成坚固的、永久的封装。(热胶还起到对焊点的应力缓解作用,因此电缆在大多数正常操作情况下将是坚固的。)

图片

图 4-4: (1) 在焊接之前,将一段热缩管套在电缆上。 (2) 将电线焊接在一起,颜色对应颜色。 (3) 用绝缘胶带缠绕电线,以防止短路。测试电缆。 (4) 在测试好的电缆上涂上少量热胶,以固定绝缘胶带和电线,为下一步做好准备。

虽然没有热胶和热缩管处理,电缆仍然可以完全正常工作,但如果您没有这些物品,您仍然可以通过小心地将绝缘胶带缠绕在各个接合处作为临时机械加固来提高连接的稳定性。

现在您已经完成了 USB 到 Xbox 游戏端口适配器的制作,第十一章和第十二章描述了一些在 Xbox 上安装 Linux 所必需的步骤,这样您就可以使用您的新适配器了。

图片

图 4-5: (1) 将热缩管滑过接合处,并开始用热胶填充管子。 (2) 热胶会使热缩管收缩。 (3) 最终产品是一个永久性的防护套,可以抵抗大多数损坏。 (4) 最终产品的图片,显示了 Xbox 和 USB 电缆的末端。

第五章:-

更换损坏的电源

在不幸(而且令人惊讶地常见)的情况下,如果 Xbox 在三个月保修期结束后损坏,唯一官方的修复方法是向微软支付维修费用。即使是简单的修复也可能超过一百美元,大约是控制台原始购买价格的一半。因此,我收到了许多来自询问如何修复损坏的电源和硬盘的人的电子邮件。

不幸的是,更换损坏的硬盘需要克服 Xbox 的安全系统,因为有一个独特的密钥用于锁定 Xbox 主板到特定的硬盘。安装新的硬盘需要一种可以重新编程或绕过硬盘锁的 modchip。此外,还需要一份工厂预装 Xbox 软件的副本,即使是为了维修目的,分发或复制也是非法的。因此,Xbox 硬盘更换的话题过于敏感,不适合在本文中讨论。鼓励读者在网上搜索有关更换硬盘的众多常见问题解答。

另一方面,Xbox 使用的电源与标准 PC 使用的电源非常相似。您可以在许多网站上购买确切的 Xbox 电源替换件,例如 Llama.com(www.llama.com/xbox/Repairs/repairs.htm)、XboxRepair.com(www.xboxrepair.com)和 Firefly-HK(www.firefly-hk.com),或者您可以尝试使用标准 PC 电源自己组装一个!

考虑到电源故障的频率,我将向您展示如何将标准 PC ATX 电源适配到 Xbox。本节中描述的方法不需要焊接,但需要额外翻转一个开关来开启 Xbox。附录 C,“进入 PCB 布局”,描述了一个简单的项目,您可以通过它来获得无需额外电源开关的便利。当然,直接更换电源比适配电源的教育价值要小。如果您决定将 ATX 电源适配到 Xbox 使用,您将学习如何制作压接电缆,以及了解一些电子理论以及 Xbox 的工作原理。

将标准 PC ATX 电源适配到 Xbox 的另一个原因是为控制台提供额外的电源。原始设备制造商(OEM)或“标准”Xbox 电源只能提供刚好足够的电力来满足 Xbox 的需求。将额外的驱动器或风扇连接到未经修改的 Xbox 可能会导致 OEM Xbox 电源过载并烧毁。

注意,截至本文撰写时,Xbox(在 Xbox 破解社区中被称为“v1.2”)发布了一个新的硬件版本,它似乎有一个标准的 ATX 电源连接器,而不是本章后面描述的专有 Xbox 电源连接器。在继续进行适配程序之前,请检查您的 Xbox 电源连接器是否与本章中描述的连接器匹配。本章中假设的 Xbox 电源连接器在一行中有十二个引脚,而较新的 Xbox 电源连接器有 20 个引脚,排列成两行,每行十个。此外,尽管最新的 Xbox 硬件版本有一个类似 ATX 的连接器,但它不一定与标准 ATX 电源电学兼容。在尝试将标准 ATX 电源与具有新 ATX 类似连接器的 Xbox 连接之前,测量电源连接器上的电压并与 ATX 规范(www.formfactors.org/developer/specs/atx/atx2_1.pdf)进行比较是明智的。

警告

更换电源可能会暴露您于危险电压。在移除电源之前,始终从电源插座上拔下 Xbox,并等待一分钟以使储存的电荷消散。此外,不正确的更换电源可能导致控制台永久性甚至爆炸性的损坏。只有当您确信电源已放电并关闭,并且您愿意承担进一步损坏控制台的风险时,才执行此程序。

诊断损坏的电源

如果您的 Xbox 在开机时遇到问题,您必须首先诊断问题并找到故障源。如果故障实际上在控制台或电源插座内部,更换电源是没有用的。执行以下诊断步骤以验证 Xbox 电源确实是问题所在,而不是其他原因。

  1. 通过将灯泡插入插座来验证电源插座是否正常工作。使用至少 100 瓦的灯泡以准确模拟 Xbox 的负载。

  2. 视觉检查电源线是否有弯曲或割痕。

  3. 确认电源线插头已牢固地插入 Xbox 电源插座,并且尽管进行了这些检查,Xbox 仍然无法开机。

  4. 视觉检查 Xbox 内部是否有烧焦痕迹或破裂的电容器。如果主板上可见烧焦痕迹,您可能需要更换 Xbox 主板(即购买新的 Xbox)。如果电源上有烧焦痕迹,很可能是电源损坏了,您可以开始更换它。(请注意,电源故障也可能损坏主板,因此更换电源后,Xbox 可能仍然无法工作。)

  5. 确认主电源连接器和前面板电路组件连接器都已牢固安装。(前面板电路组件连接器的位置在第三章“安装蓝 LED”的图 3-3 中说明。)Xbox 的电源开关通过前面板电路组件连接器连接到主板。

  6. 当 Xbox 关闭但仍然连接时,使用电压表来验证 3.3V 待机电压(3.3VSB)是否在规范范围内。通过从靠近前面板的端子开始,探测电源连接器中的第六根线来测量 3.3VSB,以及电源连接器上的任何一根黑色线。你可以通过将电压表探针的尖端插入电源线和电源连接器之间的空闲空间来测量电源电压。(主板电源连接器体内的电源线周围有一个金属环。)如果 3.3VSB 的值不在 3.14 到 3.47 伏之间,你可能需要更换电源。

  7. 按下 Xbox 上的电源按钮以将其“开启”(假设电源损坏,Xbox 可能不会做太多)。如果电源发出噪音或冒烟,请拔掉盒子并继续更换电源。如果盒子看起来已经没有反应,请测量电源输出的每个主要电压。黄色线应有 11.4 到 12.6 伏的电压;红色线应有 4.8 到 5.25 伏的电压;橙色线应有 3.14 到 3.47 伏的电压。(所有这些电压都是以黑色线为参考的。)此外,检查 Power OK 信号(位于 12 号引脚,即离前面板最远的引脚)的电压是否高于 3.1 伏。

如果上一页列表中的所有项目都检查无误,那么问题很可能不在于你的电源。接下来需要检查的是电源开关的电学和机械完整性(参见第三章了解如何移除带电源开关的电路板)以及主板的性能。然而,如果你确实观察到了电源故障的迹象,请继续阅读。

更换电源

更换 Xbox 电源的整体策略是将标准 PC ATX 电源适配到 Xbox 上。以下是你将需要的设备列表:

标准 ATX 电源。 1U 电源可以适应 Xbox 机箱的尺寸,但它可能稍微高一点,无法完全关闭机箱。

(可选)ATX 主板电源线延长线。 电源线延长线可以通过多个供应商购买,包括 PC Power and Cooling www.pcpowerandcooling.com)。修改延长线以适应 Xbox 而不是 ATX 电源线的电缆,允许你在准备丢弃 Xbox 后,在标准 PC 上重复使用电源。

压接工具。Molex 通用压接工具(Digi-Key 零件号 WM9999-ND)强烈推荐,但价格略高(约 35 美元)。可以购买更便宜的压接工具,如 Jameco 159265,价格大约是三分之一,但使用起来更令人沮丧,并且可能需要在压接处使用焊锡以达到所需的连接强度。

一个 12 位置 0.156 英寸间距的连接器外壳(即 Digi-Key 零件号 WM2313-ND)两个堆叠的 6 位置 0.156 英寸间距的连接器外壳(即 Jameco 零件号 104731)。这个外壳用于 Xbox 电源连接器的替换。

13 个 0.156 英寸间距的压接端子用于电源连接器(即 Digi-Key 零件号 WM2313-ND 或 Jameco 零件号 78318)。

两个封装为 DO-41 的 1N4001 或更好的硅整流二极管(即 Digi-Key 零件号 1N4001DICT-ND 或 Jameco 零件号 35975)。

剥线钳。任何可以处理 18 号线的剥线钳都适用。

剪刀。任何斜口剪刀都适用。

绝缘胶带。

使用二极管降低电压

Xbox 需要+3.3V 的备用电源电压,但 ATX 电源只输出+5V 的备用电源电压。解决这个问题“正确”的方法是使用一个精确地将+5V 转换为+3.3V 的稳压器,但这个修改的目标是用最少的焊接来替换电源。

另一种解决方案是使用两个二极管将+5 伏电源降低到“足够接近”的+3.6 伏电源。我们可以这样做,因为二极管两端的电压与通过二极管的电流成对数比例。换句话说,对于大多数电流,二极管两端的电压几乎是恒定的。结果发现,硅二极管几乎均匀地具有大约 0.7 伏的正向电压降,所以两个串联起来会降低 1.4 伏。

在这个修改中使用的二极管,1N4001,只能传导 1 安培的电流,所以不要在其他需要大量电流的应用中使用这个技巧。幸运的是,Xbox 的备用电源只需要非常小的电流,因此烧毁二极管不是问题。

最后一点,二极管降低的电压会随着通过它的电流量的变化而略有波动,所以不要在需要精确调节电压的应用中使用这个技巧。在 Xbox 应用中,我们稍微提高了电压,但幸运的是,从这个电源供电的数字逻辑可以容忍这种条件。

策略

标准 ATX 电源的接口与 Xbox 电源的接口非常相似。Xbox 需要+3.3V、+5V、+12V、一个+3.3V 待机电源,以及两个控制信号,“电源 OK”和“电源开启”。电源 OK 信号表示电源输出的电源稳定且正确调节,而电源开启信号是 Xbox 发送的控制信号,用于打开和关闭电源。典型的 ATX 电源有+3.3V、+5V、+12V 输出,足以运行 Xbox,并且它还有一个与 Xbox 主板兼容的电源 OK 信号。然而,ATX 电源产生的是+5V 待机电压而不是+3.3V 待机电压,电源开启信号与 Xbox 的极性相反。这两种不兼容性可以通过不需要焊接的方式解决。使用两个串联的二极管将+5V 待机电压降低到略低于+3.6V 的电压。ATX 电源的电源开启信号默认为“开启”,因此即使控制台关闭,电源也会保持开启状态。这对控制台的电子设备来说没有问题,但可能从美学上令人不安。附录 C,“进入 PCB 布局”,描述了一个你可以实施的示例设计,以更优雅的方式避免这些不兼容性。然而,附录中概述的设计将需要你在焊接和电路板设计上投入一些努力。

步骤

替换 Xbox 电源的步骤分为两部分:

  1. 将标准 ATX 电源线修改为 Xbox 电源线。

  2. 移除旧电源并安装新电源。

构建 Xbox 电源线

首先切断现有 ATX 电源的主板连接器,如图 5-1 所示。你可以选择使用 ATX 主板电源延长线进行此修改,这样你可以保留电源上的 ATX 电源连接器以供将来使用。两种选项的步骤是相同的,但本章中的图片是使用 ATX 主板延长线拍摄的。

现在,将压接端子连接到以下电线,ATX 线缆中的十根,如图 5-2 所示:

• 一根黄色电线

• 三根红色电线

• 一根橙色电线

• 四根黑色电线

• 一根灰色电线

如果你使用的是较便宜的压接工具,可能难以制作足够坚固的压接连接。在这种情况下,通过将压接端子焊接在电线上来完成连接。焊接时使用大量的热量,否则焊锡将无法完全渗透到电线和压接端子中。电烙铁应在施加焊锡前后的约五秒钟内与接头接触。

在紫色线(+5V 待机线)上,将两个二极管串联连接到线的末端和压接端子之间。图 5-3 中所示的过程使用压接端子的部分来连接二极管,因此不需要焊接。(注意:二极管是有极性的设备:如果安装方向错误,它们将不会导电。二极管应安装时,其阴极(带涂层的末端)朝向主板。)

图 5-1:从 ATX 电源电缆上切断连接器。

接下来,用绝缘胶带缠绕 ATX 电缆上所有未使用的电线,以防止任何意外短路损坏电源和可能的游戏机 Xbox。务必也将二极管用绝缘胶带缠绕好。(见图 5-4。)

最后,将完成的压接端子插入 0.156 英寸的连接器外壳。当压接端子完全且正确地插入时,它们将锁定在外壳内。(见图 5-5。)按照表 5-1 中指定的顺序插入电线。

一些供应商不销售较大的 12 位连接器外壳。在这种情况下,使用两个六位连接器外壳,并特别注意您选择的堆叠连接器的顺序。此外,注意 1 号引脚相对于连接器极化唇的位置。当极化唇在左侧且您从插入电线的侧面观察连接器时,1 号引脚位于连接器的顶部。由于很容易颠倒连接器并以此方式反转,因此使用现有的 Xbox 连接器作为参考。黄色、红色、橙色和黑色电线应相互对齐。

图 5-2:将压接端子连接到线的末端。(1)从线的末端剥去大约 1/8 英寸的绝缘层。(2)如有必要,从固定带中取出一个未使用的压接端子。(3 和 4)将电线插入压接端子,使 1/16 英寸的绝缘层位于较长的压接指之间。(5)压接绝缘部分(较长的压接指部分)。(6)显示仅压接绝缘部分的电线。(7)压接导体部分的压接指。(8)完成的压接端子。导体压接端子应紧密折叠在裸露的导线上以获得良好的接触。通过牢固地拉扯端子端来测试压接连接。

图 5-3:在紫色线的末端和进入电源连接器的压接端子之间串联连接两个二极管。箭头指示涂在二极管末端极化线的正确方向。此过程将消耗总共三个压接端子。(1)将一个二极管用极化带靠近压接端子的方式连接到压接端子上。(2)将压接端子剪成两半以去除叶片接触。(3 和 4)将二极管放置在切断的连接器的压接部分内,注意二极管的极性。(5)压接后的二极管。(6)使用第二个切断的压接端子,按照相同的程序将二极管连接到紫色线的末端。

在完成电源电缆组装后,仔细检查您的作品,因为任何错误都可能导致控制台永久且不可修复的损坏。图 5-6 显示了完成后的连接器组装应该看起来像什么。如果有的话,您可能希望使用电缆扎带将未使用的电线捆绑起来,以免妨碍并意外短路或损坏。

图 5-4:将未使用的电线和二极管用绝缘胶带包裹起来,以防止意外短路。

table_5-1

表 5-1:连接 ATX 电源线缆到 Xbox 电源连接器的接线表(从线缆入口侧查看,极化肋位于左侧)。

图 5-5:将压接连接器插入连接器引脚。

图 5-6:最终电缆组装。

图 5-7:两个电源安装螺丝的位置。

安装备用电源

现在我们已经准备了一个备用电源,我们必须更换旧的、损坏的电源。首先,按照第一章“取消保修”中所述,拆下 Xbox 机箱的顶部,然后断开硬盘电源连接器,将硬盘从机箱中取出。您不需要断开连接到硬盘的灰色 IDE 电缆。

注意

在此阶段,请确认 Xbox 已拔掉插头,并且它 已有机会至少静置一分钟以消散电源中储存的电荷。在插上电源的情况下或在拔掉电源后不久工作在 Xbox 上,极其危险。如果在此电荷消散之前您用裸手触摸电源的任何部分,Xbox 将提供令人讨厌的、可能致命的电击。

  1. 通过握住整个电源线束并用手抓住电缆的同时向下按住盒子,拔掉 Xbox 电源连接器。注意在拔出电缆时机箱的尖锐金属边缘和散热器。

  2. 拆下固定 Xbox 电源的两个 T-10 托克斯螺丝。(见图 5-7。)

  3. 首先抬起电源的一端,使其靠近 Xbox 的前端,然后将电源从 Xbox 机箱中取出。

  4. 将你创建的电缆与 Xbox 电源线缆进行比较,确保极化肋对齐。红色、黄色、橙色和黑色线应在这两个连接器之间对齐。(此检查将有助于确保你不会因为电缆的接线错误而损坏 Xbox。)

  5. 将你的 ATX 电源线缆组件插入 Xbox 电源连接器。黄色线应与 Xbox 前面的最近端引脚对齐。记住,没有任何东西可以阻止你将电源线插入偏移一个或两个引脚。如果你在电源连接器上看到裸露的引脚,那么你已将电缆插入一个引脚偏移。请务必检查此情况,因为这可能会永久损坏 Xbox 硬件和/或电源。

  6. 将 Xbox 硬盘驱动器插入 ATX 电源的一个磁盘驱动器电源连接器。硬盘驱动器使用与标准 PC 磁盘驱动器电源连接器相同的连接器,因此无需修改。

  7. 检查是否有电线短路到机箱或卡在冷却风扇的叶片中。现在,你可以开启 Xbox 的电源了。

使用替换电源

大多数 ATX 电源都带有电源开关。将此开关设置为关闭,然后插入 ATX 电源,然后打开电源开关。此时,ATX 电源将给 Xbox 供电,即使 Xbox 的系统控制器认为盒子是关闭的。因此,Xbox 内部的冷却风扇应该开始旋转。现在,按下 Xbox 前面的电源开关。此时,Xbox 应该正常启动。如果是这样,恭喜你!

谨慎

图片

某些 Xbox 版本缺少 GPU 散热风扇。 如果你的 Xbox 主板没有直接安装在芯片上的风扇,那么你就拥有这样的 Xbox。 缺少 GPU 散热风扇的 Xbox 在某些条件下容易过热,并且必须将磁盘驱动器安装在主板上以实现可靠的长期运行。磁盘驱动器的底部形成了一个空气通道系统,引导空气从 Xbox 主机箱风扇流过 GPU 散热器。(你的 ATX 电源线缆将防止磁盘驱动器与机箱平齐安装,但这不是空气通道的主要问题。)

图片

图 5-8:使用修改后的 ATX 电源延长线缆连接到 Xbox 的 1U 瘦型 ATX 电源。

当你准备关闭 Xbox 时,你可以简单地翻转 ATX 电源上的电源开关。或者,你可以使用 Xbox 前面的电源开关首先关闭 Xbox 的电源,然后关闭 ATX 电源。

调试技巧

如果更换电源后 Xbox 没有正确启动,请使用本章开头“诊断损坏的电源”部分中的清单测试你的电源线缆。你可能会遇到的最常见问题是糟糕的压接连接或连接不良或不当的二极管。糟糕的压接连接也可能导致间歇性操作,即 Xbox 可以启动但经常崩溃。

如果 Xbox 可以启动,但在启动过程中由于某种原因停止,请参阅第三章末尾“调试”部分的表 3-1,以获取可能的问题及其原因列表。附录 E,“调试:提示和技巧”包含对调试技术和方法的更深入讨论。

如果 Xbox 运行正常但偶尔会崩溃,你可能有一个没有 GPU 散热风扇的 Xbox。请参阅面对页上的警告说明,描述了这个问题。要解决这个问题,你可能需要添加一个额外的风扇,或者用一张纸和一些粘性胶带增强现有的通风系统。

第六章:-

最佳 Xbox 游戏:安全黑客

在修改和调整 Xbox 硬件之后,下一步是控制 Xbox 硬件。不幸的是,获取硬件控制并不像人们想象中那么容易。Xbox 的设计者投入了大量精力来确保硬件免受复杂的软件攻击以及大多数简单的硬件攻击。Xbox 的安全机制是其数字版权管理架构的产物。

注意

从原则上讲,将硬件应用于“合理使用”目的,例如运行自己的自制程序,不应是非法的。然而,合理使用、受保护硬件以及相对较新的版权控制规避法律之间的关系仍然不明确。第十二章“警告黑客”详细讨论了黑客攻击的法律问题。

有许多方法可以绕过 Xbox 的安全措施。在本章和第八章“逆向工程 Xbox 安全”中,我讲述了我的冒险经历,绘制了 Xbox 安全系统的地图。我不仅讲述了成功之处,还讲述了遇到的失败,以便你能从我的经验中学习。第九章“偷偷进入后门”解释了其他人用来绕过 Xbox 安全措施的一些方法。第七章“安全简明指南”提供了欣赏第八章和第九章所需的背景知识。

与偏执设计的初次接触

当 Xbox 在 2000 年春季发布时,兴奋的波纹席卷了硬件爱好者社区。这种兴奋的原因不仅仅是 Xbox 的游戏潜力,还有它作为高性能、网络连接的 x86 架构 PC 在 300 美元的实惠价格上的潜力。几个月后价格下调,Xbox 的价格已经降至 200 美元以下。Xbox 与 x86 PC 的相似性意味着理论上大量现有的应用程序和专业知识可以轻松移植到游戏机上。

我第一次看到 Xbox 是在 2001 年 11 月底,当时我的女朋友(现在是未婚妻)把它作为早起的圣诞礼物给了我。我立刻开始着手。为了控制 Xbox 硬件,首要任务是提取引导 ROM 并分析其内容:回想一下第二章关于 Xbox 架构的讨论,Xbox 的引导 ROM 包含了建立 Xbox 操作环境所需的所有代码。

窃取 ROM

Xbox 使用的 ROM 类型是一种称为 FLASH ROM 的电气可擦写和可编程品种。FLASH ROM 通常有几种封装类型,Xbox 使用的是最受欢迎的封装之一,即 TSOP(薄型小外形封装)。它位于 Xbox 主板顶部的 U7 区域,该部件的参考设计符为 U7D1。TSOP 封装非常容易识别,因为它是非常少数的矩形封装之一,只有封装的窄边上有引脚。大多数其他封装将引脚放在长边或所有边上以最大化连接性,但 FLASH ROM 的每平方硅的 I/O 要求相对较低。通过在搜索引擎上快速检查基础部件编号 29F080,可以验证这个部件确实是一个 8 Mbit FLASH ROM。

有几种技术可以用来读取(snarf)FLASH ROM 的内容。无焊接的方法是购买一个可以夹在 FLASH ROM 上的测试夹具,通过测试夹具供电并控制 ROM,同时关闭 Xbox 的其他部分来读取其内容。为此目的,可以从 Emulation Technology,www.emulationtechnology.com 购买合适的测试夹具。(测试夹具覆盖方法有几个问题,最大的问题是可能会永久损坏通过测试夹具供电的连接到 FLASH ROM 的芯片。然而,在 Xbox 的情况下,这似乎不是一个问题,尝试这种方法的人也取得了成功。¹ 我最初没有采用这种方法,因为我不想冒险损坏主板,而且我负担不起完成这项工作所需的 300 美元的测试夹具。)

另一种巧妙的方法是将电线焊接到 FLASH ROM 周围的测试点上,以监听 Xbox 读取 ROM 内容的过程。监听可以通过将电线连接到可以与 ROM 接口的定制板,或者使用逻辑分析仪捕获 Xbox CPU 访问数据时的情况来实现。后者也被成功使用,实际上,通过这种方法还发现了 Xbox 引导序列中的几个后门。² 我也没有选择使用这种方法,因为我第一次得到 Xbox 时没有逻辑分析仪,而且将所有电线焊接到位可能非常繁琐、困难且容易出错。我的方法更传统:只是移除 FLASH ROM 并将其放入 ROM 读取器中。我还将插座放置在主板上,这样将来移除和编程 ROM 将非常快速和可靠。

图片

图 6-1:使用夹子式焊接铁移除 Xbox FLASH ROM。

如果你有合适的工具,以保持其细针完整性的方式移除 FLASH ROM 很简单,如果没有合适的工具,几乎是不可能的。关键是同时加热 FLASH ROM 的所有针;一旦达到均匀加热,FLASH ROM 就会直接从主板上脱落。显然,标准的铅笔式烙铁无法同时加热所有针。适用于这项工作的正确工具是图 6-1 中所示的“钳子”或“镊子”式烙铁。这些烙铁有两个加热元件,因此可以同时加热芯片的两面。此外,烙铁必须有一个足够宽的桨形尖端,以便一次性加热芯片的整个长度。

具有这些功能的烙铁可能相当昂贵(数百美元),但这是一个值得的投资,因为它在各种情况下都很有用。我使用的是 Ersa SMT Unit 60A 烙铁,我在交易会地板上以折扣价购买,通过在完成学位的同时接一些额外的电路板组装工作,它很快就赚回了成本。通过 Jameco(#168410)可以购买到 Xytronic 生产的更经济实惠的烙铁,大约 70 美元,但我没有使用过它,因此无法对其质量作出保证。另一种非常简单直接的方法是使用附录 B 中描述的脱焊合金。(请注意,适合 ROM³的合适插座相对便宜——低于 20 美元——尽管安装它确实需要稳定的手和某种类型的放大设备。)

一旦 ROM 被移除,其针被清洁和检查后,其内容就可以在 ROM 读卡器中读取。当然,可以购买 ROM 读卡器,但自己动手制作总是一次很好的学习经历。你可以在我的网站上了解一些我制作的 ROM 编程器,网址为 http://www.xenatera.com/bunnie。我的原始 Flashburner⁴编程器是一个简单易懂且易于构建的设备,比其第二次修订⁵更容易理解,但功能较弱。

然而,如果你的目标是尽可能快地读取 ROM,只需直接购买 ROM 读卡器即可。一个好的 ROM 读卡器是任何严肃硬件黑客工具箱中的必备工具。Needham 的电子产品(http://www.needhams.com)生产了一系列适合各种预算的优秀的 ROM 编程器/读卡器。

与微软的遭遇

在提取 ROM 内容之后,下一步是将其内容与同行黑客分享以进行分析。或者不是吗?在我将 ROM 内容发布到我的网站后的十二小时内,我接到一位微软工程师的电话,他礼貌地要求我将其版权内容从我的网站上删除。当然,我立即从我的网站上删除了他们的内容;我本应该在最初发布时就意识到这一点。

这第一次与微软的接触是一个令人清醒的警告,表明逆向工程 Xbox 不会像其他任何家用电器的逆向工程项目一样。有法律保护逆向工程的某些方面,还有大量版权法保护知识产权(IP)所有者。在尊重微软权利的同时合作逆向工程 Xbox 是一个法律雷区。

一方面,微软应该能够投资于一个产品并承担风险以期望获得利润。然而,法律并不保证盈利。例如,像微软那样以巨大亏损出售游戏机,希望通过销售软件来弥补损失(作为“亏损领导者”),这是一个风险很大的提议,法律也没有保证微软最终必须盈利。另一方面,我们作为黑客有权利使用自己辛苦赚来的钱购买的硬件(“合理使用”),如果微软想以大幅折扣向我们销售 PC,那也无可厚非。我们是否购买足够多的游戏(大约十个或更多)来弥补微软在 Xbox 上的损失,完全取决于微软的商业和营销策略。

在我看来,微软的大额亏损与收入比是这个行业的异常现象。索尼和任天堂在游戏机硬件成本上大致收支平衡。此外,手机提供商经常以与 Xbox 相当的成本亏损销售手机,但要求订阅者签订合同以确保手机的成本得到补偿;违约意味着终止费用。这可能反映了微软对 Xbox Live 业务模式的信心。

在所有这些中间,是加密版权保护机制和公平使用权的相互作用。结果是,Xbox 广泛使用加密来执行版权保护和游戏机使用政策,这把我们带到了 1998 年的《数字千年版权法案》(DMCA),这是一部相对较新、未经检验的法律。由于缺乏既定的法院先例和法律条款之间的许多灰色地带,作为黑客的你必须评估你可能会面临的风险。第十二章“黑客警告”更详细地探讨了新世纪黑客的法律问题。

分析 ROM 内容

虽然被微软拒绝,但 ROM 内容仍在手中,我继续分析 ROM 内容。人们可能会预期引导 ROM 包含硬件初始化程序,随后是加载操作系统的指令,以及可能还有操作系统代码本身。但应该从哪里开始呢?

ROM 内部的程序可以想象成一团线球:一旦找到线的起点,就只是时间和毅力的问题,直到你将线球完全解开到核心。

幸运的是,英特尔对 Xbox 的 Pentium 处理器的起点进行了非常详细的文档记录。在开机时,处理器从特殊硬连线位置开始运行代码,这个位置被称为复位向量。这个复位向量位于地址 0xFFFF.FFF0,接近内存的顶部。让我们看看这个位置包含的数据(以十六进制表示):

0xFFFF.FFF0 EBC6 8BFF 1800 D8FF FFFF 80C2 04B0 02EE


// key initialization routine
  unsigned char K[256]; // 0xFFFFC80 in flash
  unsigned char S[256]; // 0x10000 in SDRAM

  for( i = 0; i < 256; i++ ) {
    S[i] = i;
  }
  j = 0;
  for( i = 0; i < 256; i++ ) {
    // RC-4 would do j = (j + K[i] + S[i]) % 256
    j = (j + K[i] + S[j]) % 256;
    // swap S[i], S[j]
    temp = S[i];
    S[i] = S[j];
    S[j] = temp;
  }

  // decryption routine
  unsigned char cipherText[16384]; // 0xFFFFA000 in FLASH
  unsigned char plainText[16384];  // 0x400000   in SDRAM

  for( index = 0x4000, i = 0, k = 0; index > 0; index— ) {
    // xbox version
    t = (S[i] ^ cipherText[k]) % 256;
    plainText[k] = t;

    // swap( S[i], S[t] );
    temp = S[i];
    S[i] = S[t];
    S[t] = temp;
    i = (i + 1) % 256;
    k++;
  }

列表 6-1:在 FLASH ROM 中找到的虚拟加密算法的反汇编。

前两个字节,EBC6,是一个跳转到位置 0xFFFF.FFB8 的跳转指令。第一个字节,EB,是“跳转,短,相对,相对于下一条指令的位移”的特定操作码;第二个字节,C6,是跳转的 8 位有符号偏移量。换句话说,处理器首先做的事情是跳转到另一个位置——这是每个引导程序都会做的事情,因为你在复位向量中只有 16 个字节的运行空间,一旦超出内存的高端就会崩溃。由于这段代码对于复位向量来说是典型的,因此为了教育目的,可以在这里重新打印代码。

下一段代码是一段初始化处理器 GDT(全局描述符表)和 IDT(中断描述符表)状态的代码。GDT 和 IDT 设置了处理器的内存管理方案和中断处理方案。你不需要确切了解这些寄存器的作用,但如果你有兴趣,英特尔“IA-32 Intel 架构软件开发者手册,第 3 卷:系统编程指南”详细解释了这些寄存器的功能。这本手册可在英特尔开发者网站上找到,网址为 http://developer.intel.com

在设置这些寄存器之后,处理器被切换到保护模式,并跳转到 0xFFFF.FE00——一个位于内存顶部的 512 字节以下的区域——从这里开始事情变得有趣起来。在一段设置段寄存器的简短代码之后,一个名为jam 表解释器(在 Xbox 社区中也称为 X-Code 解释器)的程序被执行。jam 表是行业术语,指的是包含读取、写入和简单决策操作码的值表,用于硬件初始化的上下文中。初始化一个典型的 PC 需要数百个操作,而 jam 表有助于处理这种复杂性,而不会使核心初始化代码库膨胀。使用 jam 表也有助于使初始化更加灵活,能够处理用户可配置的硬件参数,例如安装的内存类型和数量。在 Xbox 的情况下,jam 表解释器从接近 FLASH ROM 底部的位置开始获取 jam 表操作码。(请记住,jam 表解释器实现的操作码非常强大;可以使用 jam 表操作码从 Xbox 的任何位置写入和读取数据。)

一旦终端操作码被干扰表解释器执行,处理器清除 MTRRs(内存类型范围寄存器,用于声明内存各个区域的缓存能力)并开始解密从 0xFFFF.A000 开始的 16 kB 内存区域。用于解密这个内存区域的密码看起来非常类似于 RC-4,但有细微的差异。列表 6-1 显示了使用 Data Rescue 公司的一个工具 IDA Pro 将密码反汇编成 C 代码,这个工具将在接下来的几章中详细介绍。

由这个密码解密的数据实际上是一块在解密过程结束时执行的代码,但这里出了很大的问题。解密后的代码是垃圾。它不起作用。

内存地址解码技巧

存在许多技巧可以使内存区域在某些方面看起来与它们的物理表示不同。与 Xbox 引导序列分析相关的两个技巧是别名和覆盖。

当两个地址指向相同的内存位置时,内存位置被别名化,通常通过忽略一些地址位来实现。为了说明别名化,考虑一个使用 3 位地址的系统。在 3 位系统中,只有 8 个唯一的地址是可寻址的:000、001、010、011、100、101、110 和 111。现在假设你有一个有四个位置的内存;它只需要两个位来区分这四个位置:00、01、10 和 11。如果你使用我们的 3 位地址方案与这个四位置内存通信,必须忽略一个地址位。如果忽略最高位,那么地址 000 和 100 都将映射到内存中的位置 00。换句话说,位置 00 被别名化为地址 000 和 100。

内存覆盖是一种技术,其中使用带外信息来选择不同内存银行的内存。假设我们希望有一个秘密内存银行。为此,我们在公共和秘密内存之间插入一个选择器,以及 CPU。这个选择器可以选择向 CPU 提供来自秘密内存或公共内存的数据,如图 6-2 所示。因此,控制地址选择器的程序也控制着谁可以访问秘密块。如果计算机启动并运行位于秘密内存银行的代码,秘密代码区域的程序可以使用这种机制通过在运行公共内存中的程序之前将选择器设置为指向公共内存来隐藏自己。

figure_6-2

图 6-2:内存覆盖以隐藏秘密区域。

此外,干扰表操作码似乎已被损坏。这一现象得到了其他正在解决这个问题黑客的证实,因此排除了代码转换错误。显然,Xbox 远不止表面看起来那么简单。

开始出现理论和谣言来解释这种奇怪的行为。一些流行的理论包括:

地址和/或数据线打乱。 在某个地方,地址或数据线被某种 1:1 映射函数反转或排列。打乱函数可以作为初始化过程的一部分编程到芯片组中,这样初始启动块就会像明文一样读取,而其余的数据会被打乱。

二级加密处理器。 Xbox 上的另一个处理器实际上在处理 Xbox 的初始化,而 ROM 中的启动代码是无效的。

处理器中的启动代码。 处理器实际上是由处理器芯片上的代码块初始化的,而 ROM 中的启动代码是无效的。

芯片组中的启动代码。 处理器功能与标准 Pentium 相同,但芯片组包含覆盖 ROM 中无效代码的启动代码。

对于几乎所有这些理论,唯一证明或反驳它们的方法是在硬件上执行实验。例如,为了确保系统管理控制器(SMC,一个在 Xbox 插入时始终开启的 8 位自包含处理器)在机器的安全启动序列中没有发挥作用,黑客捕捉了所有 SMC 引脚上的波形,并将它们与如果 SMC 在机器初始化中发挥关键作用时预期的事件序列进行了分析。

来自一位黑客的关键观察是,即使在 0xFFFF.FFF0 处的重置向量代码被更改后,Xbox 也能完美启动。人们可能会预期,如果处理器在 0xFFFF.FFF0 处执行的第一条指令被破坏,那么机器会崩溃。然而,机器运行得毫无故障。这一观察通过一系列实验得到了验证,在这些实验中,有意破坏了 FLASH ROM 的各个部分。结果显示,破坏 FLASH ROM 中意外大的区域对 Xbox 的启动没有影响。特别是,从 0xFFFF.FE00 到 0xFFFF.FFFF 的整个启动初始化序列可以被清除,而 Xbox 仍然可以正常启动。

这个发现本身强烈支持了 FLASH ROM 中存在无效启动块的理论。然而,关于真正的启动代码存储在哪里的问题仍然存在。有三个选项:在二级加密处理器中、在处理器中以及在芯片组中。基于没有芯片在主板上足够强大或足够活跃,足以在启动时扮演加密处理器的角色,因此排除了二级加密处理器的理论。将启动块存储在处理器中也被认为比将启动块存储在芯片组中可能性更小。

这种分析的理论依据是芯片制造的经济性。Pentium III 处理器非常复杂,包含许多手工制作的模块,要将安全引导块集成到硅片中需要大量的工程资源,以及大约 25 万美元的前期投资,仅用于生产定制硅片的掩模。此外,有传言称微软最初为 Xbox 选择了 AMD 处理器,但在最后一刻改用了英特尔。如果定制模块集成到处理器核心中,微软就不可能如此轻易地在 CPU 供应商之间切换。另一方面,nVidia 的芯片组是使用硅编译器模块化设计的,因此技术上更容易添加像安全引导块这样的瑕疵。此外,Xbox 中的芯片组是专为微软定制的 nForce,专门针对英特尔前端总线(FSB)。因此,添加安全引导块的成本可以并入分配给此类项目的工程资源和掩模集。

在假设真实引导代码位于芯片组中一个秘密的 ROM 覆盖层中的理论指导下,剩余的挑战是要确定代码存储在哪个芯片(北桥或南桥)中,以及如何提取这个秘密 ROM。以下是一些提取秘密 ROM 的策略:

在 Pentium 上使用 JTAG“边界扫描”功能,试图捕获初始引导代码。JTAG 是一种诊断总线,允许你通过一个特殊的串行端口读取和设置芯片上每个引脚的状态。它是一个非常强大且多功能的调试工具。

探测处理器前端总线(Front Side Bus),试图捕获引导代码进入处理器时的状态。

安装内存嗅探器,试图捕获写入内存的解密数据流。

使用显微镜从芯片表面读取安全引导区域的内容。

探测南桥和 北桥芯片之间的总线,试图捕获芯片组发送给处理器的引导代码。这只有在引导数据存储在南桥芯片的某个地方时才会有效。

图片

图 6-3:缺少 JTAG。注意填充的铜区域(较亮区域)中有一个孔,那里原本有一个通孔。这是由于在最后时刻对电路板布局进行了更改,而没有重新计算填充区域的结果。

这些理论中的任何一个都不容易测试,因此随着沮丧的黑客放弃尝试破解 FLASH ROM 映像,Xbox 破解的努力逐渐放缓。如果不是一群坚定的黑客给我鼓励,我可能也会成为那些放弃者之一(毕竟,我还有一篇博士论文要在几个月内完成)。2001 年 12 月的圣诞节假期,我通过 IRC 频道和网页论坛与我的黑客朋友们保持联系。来自世界各地和各行各业的黑客充斥着 Xbox 破解的 IRC 频道,我从他们那里学到了很多,并且乐于与他们交流他们的各种经历,无论是技术上的还是个人方面的。

尽管我决心在 1 月份写完我的博士论文并避免 Xbox 破解,但我仍然被 Xbox 所采用的复杂安全机制所吸引。随着时间的推移,需要一位硬件专家加入在 IRC 频道上闲逛的小组核心黑客的需求变得越来越明显。到了 1 月底,我听到的关于 Xbox 安全方案的报告太有趣了,无法忽视。

我购买了一个二手 Xbox,并开始使用热风枪拆除它的所有关键部件。拆解 Xbox 有很多用途。首先,移除芯片暴露了 Xbox 上所有的痕迹和连接,这样我就可以轻松地用万用表的通断测试模式追踪芯片之间的连接。其次,我能够将所有有趣的芯片放入热酸浴中,去除它们的塑料封装,以便在显微镜下进行分析。最后,购买一个 Xbox 并将其完全拆解,在探测和修改一个工作 Xbox 时给了我一种内心的平静。(逆向工程就像园艺。如果你试图保持双手和膝盖干净,那么种植花园会更具挑战性,所以你不妨放下这些,开始与泥土为伍。)

Xbox 拆解的结果揭示了微软为防止硬件黑客攻击所采取的一些措施。例如,我首先检查了 Pentium CPU 上的 JTAG 连接。所有的 JTAG 信号都方便地连接到处理器附近的一组易于接触的电阻上,除了一个,那就是 TRST#信号。TRST#在初始化 JTAG 接口中起着关键作用。有趣的是,TRST#被连接到内部接地平面,在一个难以接触的区域,永久地禁用了 JTAG 机制。进一步检查 Xbox 主板揭示了 TRST#信号在最后一刻被移除的线索。(最大的线索是一个缺失的通孔,它位于一个电源迹线上的孔,大小正好适合一个通孔,该通孔位于一组专门用于 JTAG 信号的通孔簇附近,如图 6-3 所示。)

对于提取秘密 ROM 的 JTAG 方法来说,另一个打击是英特尔 JTAG 扫描码是专有的。将这些代码逆向工程到我可以用来提取秘密启动数据的地步是一个重大的项目。

放弃了 JTAG 方法后,提取秘密 ROM 的下一种方法是剥去 CPU、GPU 和 MCPX 的封装,用显微镜检查裸芯片并寻找任何候选的 ROM 结构。通过将芯片浸泡在冒烟的热硫酸中来去除封装或“去封装”。(我不建议在家尝试这种方法;有一次我不小心把有毒的腐蚀性溶液洒了一身,幸运的是,我的防护装备被消耗掉了,而不是我的皮肤。冒烟的硫酸比燃烧的火焰消耗有机材料更快。)冒烟的硝酸也非常有毒和危险,也可以使用。虽然我自己没有尝试过,但报告显示,冒烟的硝酸在去除环氧封装方面更有效,尤其是在需要选择性去除封装的情况下。

使用传统可见光显微镜进行人工检查的方法提供了一些希望;然而,该技术受限于光的物理特性。即使是最好的可见光显微镜技术也无法分辨 150 纳米的晶体管,因为光的最短波长是 450 纳米(对应蓝色)。我原本希望秘密代码会存储在芯片上,使用传统的阵列 ROM 结构,金属线路定义的 1 或 0 刻入顶层金属层,这些可以通过光学显微镜识别。使用硬连线 ROM 结构是出于成本的考虑:FLASH ROM 和基于熔丝的 PROM 需要额外的加工和制造步骤,这可能会显著增加系统的成本,而使用顶层金属层则是出于设计者风险管理方面的考虑。顶层金属层是最粗糙的层(粗糙到光学显微镜可能可以分辨它们),因此如果 ROM 代码中存在错误,它们是最便宜的层之一。此外,在初始启动过程中,顶层是最容易使用芯片修复机(称为 FIB 机,即聚焦离子束机)切割和跳线的。不幸的是,在显微镜下快速查看芯片时,并没有发现这样的结构。

在这个阶段,提取秘密 ROM 的唯一选择是探测活着的 Xbox 硬件,试图在代码加载到 Xbox 处理器时捕获它。在上桥芯片和 FLASH ROM 上游监听代码意味着探测前端总线、北桥-南桥总线或主内存总线。我们将在下一章简要介绍基本安全概念之后,在第八章讨论执行这些探测方法的权衡。


¹ 安迪·格林有一个优秀的页面,记录了他使用测试夹具方法的经历,请访问 http://www.warmcat.com/milksop/milksop.html。

² Visor 在 http://www.xboxhacker.net/visor/aXventure1.txt 上记录了他使用逻辑分析仪窃听方法的经历。

³ 模拟技术公司(http://www.emulation.com)生产了一系列价格合理的插座,适用于此类用途。针对 Xbox 的具体型号是 S-TS-SM-040-A。

http://www.xenatera.com/bunnie/proj/flashburn/fb.html

http://www.xenatera.com/bunnie/proj/fb2/

⁶ 对于对超级计算机架构、数据与线程迁移、容错性、高速低延迟网络或大规模多线程机器感兴趣的人,请查看我的论文,链接为 http://www.xenatera.com/bunnie/phdthesis.pdf。

第七章:-

安全简明指南

黑客攻击 Xbox 需要除了硬件和固件黑客攻击之外的安全黑客攻击,正如你在上一章中发现的那样。我们将探讨在像游戏机这样平凡的事物上添加复杂安全性的可能动机,然后我们将深入了解理解和欣赏 Xbox 安全机制所需的基本原理和算法。

谁需要安全,毕竟?

游戏机对大多数人来说只是一个玩具:它成本低廉,属于消费电子产品。为什么微软要费这么大的劲来确保他们的系统安全?在安全黑客游戏中,了解安全者的动机通常有助于发现可以利用的弱点。

密码学不是安全。密码学是实现安全的一种手段,但真正的安全涉及整个系统架构,包括最终用户。正如凯文·米特尼克在最近的 Slashdot 访谈中所说,“……安全不是可以现成购买的产品,而是由政策、人员、流程和技术组成的。”¹我相信安全从根本上讲是一个社会概念。在实践中,你可以打开窗户,但锁上门,人们不会仅仅通过窗户走进来或撬锁,尽管这两项任务相对简单。锁着的门和开着的窗户之所以有效,是因为锁着的门主要是一种象征性的措施;它迫使入侵者做出违反规定的自觉行为才能进入房屋,而这本身就足以将罪犯与好人区分开来。索尼的 PlayStation 游戏机就是一个很好的前门锁安全例子。他们用来复制保护游戏的方法很简单,不涉及密码学,而且可以通过安装便宜且容易的硬件修改来轻松绕过。尽管如此,销售数据显示购买 PlayStation 游戏仍然很流行;前门锁是有效的。

微软采用了前门锁式安全的一种变体。Xbox 游戏使用的是(到目前为止)不可复制的 DVD-9 格式,这是一种单面双层媒体格式。另一方面,用户可写的 DVD 总是采用 DVD-5 格式,这是一种单面单层媒体格式。由于制作能够在不影响另一层完整性的情况下烧录单层的写入系统很困难,因此 DVD-9 兼容的刻录机可能不会很快出现。因此,通过在 DVD-9 盘的两层之间分配安全数据,并要求游戏可执行文件来自 DVD-9 媒体,微软对其视频游戏实施了一种相当有效的“前门锁”。通过巧妙地要求 DVD-9 格式,微软几乎迫使任何潜在的盗版游戏者进入一个需要某种硬件修改的领域。

那么,微软为什么要冒险在 Xbox 上投资如此复杂的加密方案呢?微软的主要动机真的是为了遏制盗版吗?实际上,Xbox 安全系统其余部分——安全引导扇区、签名可执行文件、信任关系和加密/认证网络协议——的主要理由可能并不在于反盗版措施。

所有这些安全措施的一个可能动机是为了防止将 Xbox 游戏机用于除游戏以外的任何目的。Xbox 游戏机处于一个独特的位置,它几乎是一个 100% 的库存 PC。与 Gamecube 和 Playstation2 不同,有一大批软件似乎应该在 Xbox 上运行,只要进行适当的 BIOS 编程。更糟糕的是,与竞争对手相比,微软在游戏机硬件上的亏损要多得多。有些人估计,其亏损可能高达每台 200 美元,假设最新的零售价为 199 美元。因此,对微软来说,确保它不是在销售补贴的 GNU/Linux 硬件盒很有兴趣。然而,这甚至可能不是微软的主要目标。Xbox 的 64 MB 主内存、没有键盘或鼠标以及相对较慢的处理器(按照今天的标准),使得它不如 2002 年晚些时候在沃尔玛出售的 200 美元 Microtel PC 有吸引力。此外,微软财大气粗;如果 Xbox 在市场上取得成功,并且销量超过索尼的 Playstation2,微软只需承担数十亿美元的初期亏损——与它坐拥的大约 400 亿美元现金储备相比,这个数字相对较小。因此,Xbox 安全性的关键任务可能不是防止替代游戏机使用或阻止盗版。

也许 Xbox 复杂安全性的真正原因是为了确保 Xbox Live 的成功,这是微软的在线游戏服务。微软的市场炒作和公关声明表明,它正在押注 Xbox Live 的成功来推动硬件销售。此外,Xbox Live 是一项订阅服务,从其推出之日起,用户将不得不支付每月费用。如果微软能让其订阅者对 Xbox Live 上瘾,那么突然之间,Xbox 业务看起来非常有利可图,即使在前端硬件上损失了大量资金。当然,关键是要让 Xbox 用户对 Xbox Live 上瘾。被誉为“在线游戏的迪士尼乐园”,Xbox Live 的目标是提供执行良好且公平的游戏体验。Xbox Live 的价值主张的核心是没有任何作弊者。为了确保没有人作弊,用户必须被迫通过 Xbox Live 维护的注册表进行身份验证,并且他们的游戏状态必须保持安全且不可修改。此外,游戏软件必须未经修补。更重要的是,只需要少数几个作弊者就能破坏整个用户群体的游戏体验。如果你把企业的成功赌在数百万二十多岁的硬核男性玩家身上,他们分布广泛,具有一定的计算机知识,那么你面临的几率是相当不利的。硬件必须可信,网络连接安全,可执行文件必须签名并密封。

硬件必须可信这一说法值得反复强调。考虑到用户基础不可信,与客户建立信任关系的唯一途径是确保每一件硬件中都有一个信任的种子。因此,微软必须在每个客户端中包含一块防篡改的硬件,以实现某种形式的证明。证明是指能够证明某些数据,例如玩家的身份或游戏状态,实际上是由未受污染的软件和硬件生成的。防篡改的硬件不必直接实现证明功能,但它必须至少确保在证明之前系统处于可信状态。

确保硬件可信任有许多方法。最简单的方法是使整个硬件物理上安全。自动取款机(ATM)是物理安全的硬件的典型例子。密封在厚金属板中,并覆盖有入侵传感器,很难物理穿透和修改 ATM 的硬件。然而,虽然这种方法有效,但对于游戏机来说,这是一个不切实际且昂贵的解决方案。一个更经济的方法是使用一小块可信任的防篡改硬件,可以对系统其余部分进行“测量”。这类测量通常通过使用加密哈希函数来完成。如果所有这些信任度量都与预期值相符,那么可以得出结论,整个系统是可信任的。

我说“可能”,因为这个方案仍然容易受到中间人攻击,黑客会向测量查询发送伪造的有效数据。中间人攻击指的是一类攻击,其中攻击者可以自由修改和控制两个当事人之间传递的信息。由于中间人弱点,使用极其复杂的防篡改模块进行系统测量是没有意义的。一个封装的硅芯片可能就足够了,因为通常更容易拦截和伪造在印刷电路板上传输的测量数据,而不是穿透芯片的环氧封装并修改芯片的电路。

信任度量系统可以使用一次测量方法实现。从处理器的冷启动序列开始,每一段代码在执行前都会进行信任度测量。如果处理器从未执行过不受信任的代码,那么还有什么不信任的呢?这个方案需要一个非常简单的防篡改硬件模块——一个防篡改的只读存储器(ROM),它存储着冷启动代码,作为信任的“种子”。用于测量和验证过程的加密类型通常是哈希和公钥加密的组合。在这个应用中,公钥加密更受欢迎,因为生成有效代码段所需的私钥只由硬件供应商保密保存。再次强调,这个方案容易受到许多中间人攻击,以及纯加密攻击和对系统实现的攻击。

密码学简明指南

cipher ( n): 1 a: 零 b: 没有重量、价值或影响力的人 : 非实体。2 a: 转换文本以隐藏其意义的方法——与“code”²比较

密码本身并不提供安全性。更具体地说,只有当密钥安全、算法强大且系统中没有后门时,密码才提供安全性。如果有人给你一个用强大密码加密的 CD-ROM,并把你锁在一个填充的房间里,超级计算机可能在你解密 CD-ROM 之前就会发生超新星爆炸。另一方面,如果你能够观察并探测到机器在加密 CD-ROM 时的操作,那么加密就毫无意义了。你可以通过监听键盘来获取加密密钥。或者,你可以转储计算机内存的内容,从而在不了解密钥的情况下获得明文。

Xbox 的情况与后者类似。最终,Xbox 必须访问和运行在有效磁盘上提供的程序。此外,Xbox 中使用的 Pentium CPU 无法区分授权指令和未授权指令。最后,用户可以完全访问探测和修改 Xbox 硬件。因此,即使 Xbox 使用强大的密码,密钥的安全性也值得怀疑,系统中可能存在后门。

本节将简要介绍 Xbox 中使用的加密算法种类。我们将关注这些算法的实际影响和实现问题。为了理解 Xbox 安全系统中的可用攻击,您需要了解这些算法。

注意

我并不假装要讨论密码学的理论方面;那些超出了我的能力,也超出了本书的范围。相反,我将有兴趣的读者推荐到布鲁斯·施奈尔(Bruce Schneier)的优秀著作《应用密码学》(John Wiley & Sons);我大部分关于密码学的知识都来自这本书。对于已经熟悉密码学的读者,应该能够快速浏览或跳过本章的剩余部分。

密码学算法类别

Xbox 中使用了几个重要的密码学算法类别。这些包括:

• 散列

• 对称加密

• 公钥加密

散列有多种类型。密码学散列用于总结或“摘要”大量数据。这个总结是一个固定长度的数字,通常长度在 100 到 200 位之间,而源数据几乎可以是任何大小。散列最重要的特性是它是一个单向计算。换句话说,计算散列很容易,但要推导出具有相同散列摘要的数据序列或从散列中确定有关原始数据的任何信息是非常困难的(参见侧边栏“非常困难的问题”以了解这究竟意味着什么)。

哈希函数抵御找到两个哈希值相同的序列数据的强度被称为其抗碰撞性,一般来说,一个好的 n 位哈希函数需要大约 2^n/2 个随机数据序列进行哈希和比较,以引起碰撞。由于哈希函数被设计得非常容易计算和具有很高的抗碰撞性,因此它们常用于检测在大型安全数据区域中是否有位发生变化。对于许多应用来说,只需包含消息的加密哈希值,而不是花费计算努力加密整个消息,就足够了。

对称加密是那些加密和解密密钥可以很容易地从对方推导出来的算法。大多数情况下,加密和解密密钥是相同的。对称加密使用混合函数密钥调度表与经过某些密码函数处理过的数据进行组合。这种混合可能在单个数据块上重复多次,如在分组密码中,或者可能只发生一次,如在流密码中。对称加密中的所有基本函数在计算上都很简单,因此对称加密是加密大量数据的首选方法。

混合函数的典型例子有异或(XOR)、模加和模乘。最简单的函数是异或,它具有任何数与自身进行异或运算结果为零的性质。异或运算通常用符号⊕表示。异或运算也具有所有通常的算术性质(交换律、结合律、分配律等),因此

(A ⊕ B) ⊕ B = A ⊕ (B ⊕ B) = A ⊕ 0 = A

因此,如果 A 是消息,B 是密钥,(A ⊕ B)将是密文,通过再次对 B 进行异或运算,可以简单地恢复明文。

密钥调度表是一种算法,它将一个相对较短的关键字扩展到一系列较长的位上。密钥调度表用于帮助将密钥数据扩散到更大的数据块上,以掩盖密文与密钥之间的关系。

非常困难的问题

密码函数都是基于数学算法的,给定所有操作数时,其结果容易计算,但给定仅结果时,其操作数却非常难以计算。密码函数的安全性正是给定仅结果时计算这些操作数的难度。让我们花一点时间来探讨什么是非常困难。

以对称加密算法 AES 为例。它使用 128 位密钥,到目前为止,它对所有已知的分析性密码攻击都表现出强大的抵抗力,例如差分和线性密码分析。当我提到它对分析 X 有抵抗力时,我的意思是使用暴力搜索恢复密钥或明文至少需要与使用分析 X 一样多的操作。暴力搜索是指我使用一个非常快的计算机,尝试所有 2¹²⁸可能的密钥,以恢复原始数据。今天大多数常用的加密算法都对所有已知的密码分析技术有抵抗力,所以重要的是要了解暴力破解攻击的强度。

实际上,像 DES 这样的旧算法,一个 56 位的加密算法并不是一个很难的问题。使用 FPGA(现场可编程门阵列)构建一个能够以大约 2²²密钥/秒/美元的经济效益破解密钥的机器相当容易(2²²大约是四百万)。请注意,这个数字随着时间的推移以与摩尔定律相当的速度增加。今天,如果你愿意等待大约一周的时间来破解每个密钥,你就可以以一辆好车的价格来恢复它们。让我们希望银行不要使用 DES 来加密他们的账户数据!

DES 的继任者 AES,是一种可以使用 128 位、192 位或 56 位密钥的加密算法。这些密钥足够大,以至于被认为是无法通过暴力破解攻击(即一个非常困难的问题)来攻破的。根据 NIST(http://csrc.nist.gov/encryption/aes/aesfact.html)发布的 AES 问答,一个足够强大的机器,每秒通过暴力破解恢复一个 DES 密钥(平均每秒尝试 255 个密钥),仍然需要 149 万亿年的时间来恢复一个 128 位的 AES 密钥。我最喜欢的关于 256 位密钥对抗暴力破解攻击强度的分析来自布鲁斯·施奈尔的《应用密码学》。在他的书中,他使用了一个基于破解 256 位密钥所需能量的论点。结果是,即使是一个热力学上理想的计算机,也需要超过我们太阳年能量的 32 倍才能计算出 2¹⁹²,更不用说做任何有用的事情了。(我必须强调,所有这些都假设最有效的攻击是暴力破解。谁知道呢,也许有人会发现算法中的弱点,可以用来发起更有效的攻击。新的分析技术不断被发明,逐渐削弱了加密算法的强度。)

相反,公钥加密算法基于各种难以逆转的数学运算,例如素数乘法和模幂运算。因此,许多公钥加密算法的密钥空间很稀疏,所以需要更多的密钥位才能达到与对称加密算法相当的安全性。例如,RSA 公钥加密算法的密钥长度通常有几千位长。

RSA 公钥长度与对称密钥长度之间的确切相关性尚不清楚。RSA 的安全性被认为是大素数乘积分解的难度;然而,可能还有其他尚未发现的算法攻击。即便如此,分解大素数乘积的有效难度不仅因计算技术的进步(摩尔定律)而降低,还因数论方面的进步而降低,例如二次筛和一般数域筛法的发明和改进。1999 年 8 月,一组研究人员使用数域筛法在 7.4 个月内分解了一个 512 位的素数,包括设置分解运行所需的时间¹。此外,新技术如量子计算有望在多项式时间内实现素数的分解。然而,我并不抱有太大希望;关于是否能够构建足够大的量子计算机来分解有趣的素数,目前仍存在争议。截至今天,RSA Security,Inc.建议大多数企业使用 1024 位的密钥长度,对于“极其宝贵的密钥”则建议 2048 位²。布鲁斯·施奈尔在《应用密码学》的第二版中估计,2304 位的公钥长度提供了相当于 128 位对称密钥的安全性,而 1792 位的公钥长度则相当于大约 112 位的对称密钥。

当你阅读有关 Xbox 安全方案的内容时,请记住这些关于使用暴力破解法破解这些安全方案可能有多困难的基本指南。一次又一次,黑客论坛和公告板上贴出消息询问:“我们为什么不为这些密钥启动分布式密钥搜索工作?”现在你知道答案了。

¹ http://www.rsasecurity.com/rsalabs/challenges/factoring/rsa155.html

² http://www.rsasecurity.com/rsalabs/faq/3-1-5.html

在对称分组密码中使用的典型加密函数由一组精心设计的替换、置换、压缩和扩展组成。这些函数的作用是混淆和扩散明文。加密函数任何一部分的细微变化通常都会对密码的安全性产生深远的影响。

在对称密码中,加密和解密密钥密切相关,这使得它们在特定的安全应用中难以使用。例如,如果我想将加密文档分发给一个邮件列表,那么邮件列表上的每个人如果能够阅读文档,就必须有效地知道我的加密密钥。此外,与远程方建立联系也很困难,因为我在某个时候必须向他们传输密钥。有人观察传输介质可能会窃取密钥并读取、伪造和修改所有后续消息。

公钥密码是使用不同密钥进行加密和解密的算法。因此,它们也被称为非对称密码。公钥密码的一个主要优点是其中一个密钥可以保密。这允许与不受信任的用户进行数据交换,而不给不受信任的用户伪造或读取其他受保护内容的能力。公钥算法的缺点是它们通常需要更复杂的计算,因此比对称密码慢。公钥密码也倾向于需要更长的密钥才能达到等效的安全性。因此,如果需要交换大量数据,通常使用公钥密码来加密用于加密大量数据的对称密码的密钥。这个对称密码密钥可以针对每次交易是唯一的,因此它通常被称为“会话密钥。”

SHA-1 散列

SHA-1 是联邦政府在 FIPS 出版物 180-1(http://www.itl.nist.gov/fipspubs/fip180-1.htm)中推荐的安全散列算法。由 NSA 设计,基于 Ronald L. Rivest 的 MD4 消息摘要算法,SHA-1 可以处理长度小于 264 位的任何消息,并生成 160 位的输出。SHA-1 散列算法从确定性的 160 位种子状态开始;这个状态在四个回合中与 512 位的消息数据块混合。每一轮由一系列非线性函数、旋转、移位和异或操作组成。每一轮的结果被用来作为下一轮计算的种子。一般来说,需要生成 280 个随机消息,进行散列和“同时”比较,以找到具有相同散列值的两个消息(即散列冲突)。找到具有相同散列值的两个随机消息被称为“生日攻击”,这个名字来源于被称为“生日悖论”的概率现象:在 23 人的房间里,两个人共享同一生日的机会超过 50%。另一方面,需要生成 2160 个随机消息,进行散列和比较,以找到散列值与特定消息相同的消息。因此,散列函数的强度在很大程度上取决于其使用方式。


void encipher(unsigned long *const v,unsigned long *const w,
               const unsigned long *const k)
{
  register unsigned long
           y=v[0], z=v[1], sum=0, delta=0x9E3779B9,
           a=k[0], b=k[1], c=k[2], d=k[3], n=32;

  while(n—>0) {
     sum += delta;
     y += (z << 4)+a ^ z+sum ^ (z >> 5)+b;
     z += (y << 4)+c ^ y+sum ^ (y >> 5)+d;
  }

   w[0]=y; w[1]=z;
}

列表 7-1:TEA 算法在 ANSI C³ 中

TEA

TEA,或小型加密算法,是由剑桥大学计算机实验室的 David Wheeler 和 Roger Needham 开发的。(开发者有一个关于 TEA 的网页 http://vader.brad.ac.uk/tea/tea.shtml;这里展示的大部分材料都是从该页面上获取的。)

如其名所示,TEA 是一个紧凑、快速的加密算法,适合加密实时数据流和处理器性能和存储空间紧张的应用。TEA 有一个 128 位的密钥,它一次操作 64 位数据,并且它的每个 32 轮都只使用位移、XOR 和加法。(该算法,如列表 7-1 和图 7-2 所示,是针对 32 位通用处理器优化的。)

figure_7-1

图 7-1:TEA 密码的使用场景。

figure_7-2

图 7-2:TEA 的内部结构。此图描述了 TEA 的单轮,它被重复 32 次以完成整个密码。密钥调度在右侧的框中描述,用于作为密码和哈希函数。

人们认为,当用于加密和解密数据时,bantam TEA 算法相当安全。然而,在 Xbox 中并没有使用 TEA 进行加密;实际上,它通过在修改后的 Davies-Meyer 模式下运行密码,作为哈希函数使用。要哈希的区域被分为 64 位块。这些源数据块被用作 TEA 密钥输入的一半。密钥输入的另一半来自前一个 TEA 操作的结果,第一个 TEA 操作使用一个魔术数字作为其输入。

结果是一个 64 位的哈希函数,如图 7-1 所示。这个哈希函数对生日攻击比较脆弱,尤其是在 TEA 的计算效率下,平均只需要测试 2³²个消息对来找到碰撞。尽管生日攻击在 Xbox 的使用场景中不适用,但 Xbox 运行哈希两次,每次使用不同的魔术数字种子,并将结果连接起来生成一个单一的 128 位哈希值——这可能是为了防止暴力攻击。

不幸的是,TEA 在其密钥调度中有一个弱点:每个 TEA 密钥都有四个相关密钥。换句话说,对于每个密钥,你可以生成三个其他密钥,这些密钥使用相同的输入数据产生相同的密文结果。相关密钥生成就像补全密钥位的对(位 31 和 63 是一对,位 95 和 127 是另一对)。这使得 TEA 不适合用作哈希函数,这个弱点在 John Kelsey、Bruce Schneier 和 David Wagner 撰写的论文“IDEA、G-DES、GOST、SAFER 和三重 DES 的密钥调度密码分析”中得到了很好的记录,这篇论文是在多年前的 CRYPTO 1996 会议上提出的。这个弱点后来被 Andy Green 领导的一个团队利用,以破解 Xbox 安全方案的第二个版本。

RC-4

RC-4(罗恩的代码或 Rivest 密码 4)是由罗恩·里韦斯特提出的一种可变密钥长度的流密码。RC-4 的核心是密钥流生成器。它可以被认为是一个密码学伪随机数生成器(CPRNG)。CPRNG 的输出逐字节与明文流进行 XOR 运算以生成密文。解密以类似的方式完成。简单来说,生成器通过一个值(密钥)进行“初始化”,该值最长可达 256 字节(2048 位)。如果密钥短于 256 字节,它将被重复以填充 256 字节,然后作为种子使用;这允许密钥长度可变。在 Xbox 中,密钥长度为 16 字节(128 位),因此该加密算法被称为 RC-4/128。

typedef struct rc4_key {
  unsigned char state[256];
  unsigned char x;
  unsigned char y;
} rc4_key;

void prepare_key(unsigned char *key_data_ptr, int key_data_len,
                rc4_key *key) {
  unsigned char swapByte, index1, index2;
  unsigned char* state;
  short counter;

  state = &key->state[0];
  for(counter = 0; counter &lt; 256; counter++)
    state[counter] = counter;
    key->x = 0;     key->y = 0;
    index1 = 0;     index2 = 0;
  for(counter = 0; counter &lt; 256; counter++) {
    index2 = (key_data_ptr[index1] + state[counter] +
              index2) % 256;
    swap_byte(&state[counter], &state[index2]);
    index1 = (index1 + 1) % key_data_len;
  }
}

void rc4(unsigned char *buffer_ptr, int buffer_len, rc4_key
        *key) {
  unsigned char x, y, xorIndex;
  unsigned char* state;
  short counter;

  x = key->x;     y = key->y;

  state = &key->state[0];
  for(counter = 0; counter &lt; buffer_len; counter ++) {
    x = (x + 1) % 256;
    y = (state[x] + y) % 256;
    swap_byte(&state[x], &state[y]);
    xorIndex = state[x] + (state[y]) % 256;
    buffer_ptr[counter] ^= state[xorIndex];
  }
  key->x = x;     key->y = y;
}

列表 7-2:RC-4 的 C 语言代码,来自原始 Usenet 帖子。⁴

RC-4 被认为是一种强大的加密算法,尽管在密钥调度算法中存在一些已知的弱点,这些弱点可以在设计不良的加密系统中被利用,例如 WEP。斯科特·弗卢勒、伊齐克·曼丁和艾迪·沙米尔在题为“RC4 密钥调度算法的弱点”的论文中记录了这些弱点,该论文是在 2001 年第八届密码学选区年度研讨会(8 月)上提出的。这些弱点中没有任何一个可以应用于 Xbox 对 RC-4 的实现。

然而,在 Xbox 安全性的第一版中,RC-4 的使用方式存在一个潜在问题。RC-4 在 Xbox 上用于加密一系列 x86 代码,并且对解密后的代码没有进行任何显著的检查以确保明文的完整性。这意味着密文中的变化将导致 Xbox 执行的代码发生变化。关键是找出密文中导致代码有意义修改的变化。由于 RC-4 一次加密一个字节,而 x86 操作码可以短至一个字节,因此通过变异密文最多需要 2⁸ = 256 次迭代来“暴力破解”一个指令到单个已知位置。

确定要暴力破解的位置可能很棘手,但我怀疑通过变异密文位并观察指令提取模式的改变,即使开启缓存,也能推导出大量信息。目标将是尝试识别跳转操作码操作数的位置,并修改跳转目标,使得受保护程序跳入内存中的非受保护区域。这个过程类似于玩经典的桌面游戏“战舰”。记住,攻击如此简单,猜测一个千字节代码只需要最多 218 次迭代。通过在主机计算机上运行的控制脚本将逻辑分析仪与 ROM 仿真器集成,可以自动化猜测过程。

RC-4 背后的历史实际上非常有趣。RC-4 是在 1987 年由 Ron Rivest 发明的,并被 RSA Security 公司作为商业机密保留,直到 1994 年通过一个匿名帖子发布到一个密码朋克邮件列表(见列表 7-2)。由于 RC-4 的简单性和健壮性,它被广泛应用于多个应用中,包括 WEP、SSL、SQL 和 CDPD。尽管 RC-4 的源代码广泛分发且众所周知,但该加密算法仍然是 RSA Security 的知识产权。在没有首先从 RSA Security 获得许可的情况下,我不建议将其集成到商业产品中。

figure_7-3

图 7-3:使用会话密钥的 RSA。

figure_7-4

图 7-4:RSA 用于实现数字签名。

RSA

RSA 是由 Ron Rivest、Adi Shamir 和 Leonard Adleman 在 1977 年设计的一种公钥算法。在公钥算法中,使用两个不同的密钥,即公钥和私钥。正如它们的名称所暗示的,私钥必须保密,而公钥可以自由分发。RSA 背后的数学原理在标题为“RSA 算法”的侧边栏中简要描述。您不需要理解 RSA 背后的数学细节,就可以理解 RSA 在 Xbox 环境中的应用。

目前认为,在超过约一千位长度的密钥上对 RSA 进行暴力攻击是不可行的。同时请注意,对 RSA 如何集成到加密系统中不能过于轻率。存在一些针对使用 RSA 的协议的攻击,例如诱使私钥持有者签署精心设计的消息,然后可以使用这些消息推导出签名者的私钥。

使用 RSA 加密消息就像在消息上调用 RSA 一样简单。然而,RSA 加密是在消息块上进行的,这些块太短,加密过程也太慢,以至于对于大多数消息来说不实用。因此,RSA 通常用于加密一个单次使用的随机密钥,称为会话密钥,然后使用这个会话密钥加密大量消息。这个过程在图 7-3 中进行了说明。

除了加密之外,RSA 还支持数字签名。数字签名允许在不安全介质上交换消息的各方保证消息没有被伪造且未被修改。消息不必被加密。一个典型的数字签名协议的工作方式如下:发送者计算要发送的消息的哈希值。然后,使用发送者的私钥加密这个哈希值,并将其与消息明文一起包含。接收者使用发送者的公钥解密加密的消息哈希,并将其与接收到的消息的本地计算的哈希值进行比较。如果与消息一起发送的解密哈希值和本地计算的哈希值一致,那么接收者可以得出结论,该消息是真实的且未被篡改。这个过程在图 7-4 中进行了概述。

RSA 算法

RSA 算法于 1983 年由麻省理工学院获得专利,并独家许可给 RSA 数据安全公司。RSA 算法的专利已于 2000 年 9 月到期。因此,今天 RSA 可以在任何应用中免费使用。现在互联网上可以找到许多使用 RSA 的出色教程和教育示例。使用关键词“RSA 算法”进行谷歌搜索,以找到其中的一些示例。

RSA 算法如下(改编自 http://world.std.com/~franl/crypto/rsa-guts.html):

  1. 找到两个大(数千位长)的质数,“P”和“Q”。

  2. 选择“E”,使得 1 < E < PQ,并且 E 与(P-1)(Q-1)互质。E 不必是质数,但它必须是奇数。E 和 PQ 的这对组合是公钥

  3. 计算“D”,使得(DE - 1)能被(P-1)(Q-1)整除。这可以通过找到一个整数 X,使得 D = (X(P-1)(Q-1) + 1)/E 是一个整数来实现。D 是 私钥

  4. 明文“T”使用以下函数进行加密

C = (T^E) mod PQ

  1. 使用以下函数解密密文“C”

T = (C^D) mod PQ

注意 T < PQ。大于 PQ 的消息必须分解成一系列较小的消息,而非常短的消息必须用精心选择的值填充,以防止字典攻击等问题。

如果这个协议听起来很复杂,那么它确实很复杂。有很多地方可能会出错。接收者可能拥有发送者公钥的虚假副本。发送者的私钥可能已被泄露。哈希可能存在弱点。在对抗性环境中使用数字签名需要在系统设计的所有层面上注意细节。

在 Xbox 中,数字签名用于控制控制台程序的发行和销售。微软实际上控制着消息的发送者和接收者。接收者——Xbox 控制台——被编程为只能运行由微软数字签名的程序。在理想的世界里,这保证了微软对谁可以在控制台上运行程序或不能运行程序有最终决定权,黑客无法修改游戏以插入病毒、特洛伊木马或后门。保存的游戏也使用加密进行密封,因此,名义上不可能通过修补可执行文件或提高角色统计数据来破解游戏并作弊。

显然,破解 Xbox 游戏机的关键问题在于其数字签名系统的实现。Xbox 使用 SHA-1 散列和 2048 位 RSA 密钥,这使得成功暴力破解攻击的可能性非常非常小。当然,如果你从未尝试过,概率为零,但成功的几率对你来说很小(参见侧边栏“非常困难的问题”)。你尝试赢得彩票的机会可能会更大。这绝非偶然;私钥的发现将使游戏复制变得简单,开发者不必向微软支付版税(从法律上讲,他们可能负有义务,但没有技术上的理由阻止他们)。鉴于这个密钥可能对微软价值数十亿美元,很可能没有单个人类知道完整的密钥,因为橡皮管(殴打)和绿纸(贿赂)密码分析技术对人类来说通常非常有效。(如果你试图保护极其宝贵的秘密,不要低估真正的“暴力破解”!)像 BBN 的 SignAssure™证书管理机构这样的产品确保了高价值密钥的物理安全,并实施了需要多个可信用户激活机器的秘密共享方案。

如前所述,存在一些针对 RSA 的已知可行攻击,但并非所有这些攻击都适用于 Xbox 场景,因为它们依赖于用户群体或需要选择密文。此外,弱点列表是广为人知的,大多数数字签名实现都采取了适当的对策来保护免受此类攻击。

图片的其余部分

一个有效的安全系统需要良好的密钥管理、强大的协议,以及对于 Xbox 来说,除了强大的加密和散列算法之外,还需要物理安全。

密钥管理可能是任何安全架构师面临的最困难系统实现任务之一。最终,解密密钥需要落入用户手中。用户界面必须设计得让经过最少培训的普通用户不会意外泄露密钥信息。随着加密算法的增强,攻击的最简单途径越来越多地是通过用户。通过监控视频进行监听、社会工程学,甚至分析键盘按键时产生的声音模式作为密码,可能会在单位努力中获得关于通行证的信息,这比密码分析更有可能。公钥密码学部分解决了密钥分发的问题,但公钥指纹应该亲自比较,以排除中间人攻击的可能性。公钥密码学也不能防止有人物理访问客户端机器,从而监听解密后的输出。

此外,协议攻击发现了在处理密钥和数据的方式,或者在强加密算法的使用方式中存在的弱点。对 RC-4 的 WEP 攻击以及 Mike Bond 和 Ross Anderson 对 IBM 4758 密码处理器的攻击都是协议攻击的例子。潜在协议攻击的红旗是实施向后兼容性措施的系统和由那些主要工作不是密码安全工程师实施的系统。

最后,在像 Xbox 这样的系统中,其中一个目标是建立一个可信赖的客户端,后门和缓冲区溢出攻击也是对机器信任状态的有效攻击。没有广泛使用的商用处理器在指令流或数据标签中嵌入执行权限。处理器盲目地执行任何它被指示跳转的代码,无论这种跳转是通过瞬时的硬件故障还是通过恶意放置的代码引起的。机器状态的周期性散列可以用来弥补这种不足,但即便如此,状态检查也可能被欺骗。

如本章开头所讨论的,建立客户端的信任状态还需要一个防篡改的硬件部件来携带信任的种子。物理安全必须足够,使得一次破坏安全变得不经济,并且足够强大,以至于一次安全破坏不会使对其他控制台进行简单攻击变得容易。在下一章中,将讨论设计物理安全时的权衡以及微软为此做出的决策。

本章的寓意是,安全需要设计良好的系统。尽管加密算法已经足够强大,使得暴力攻击变得无关紧要,但系统的复杂性却在增加。这种复杂性增加了可行协议或后门攻击的可能性,但几乎没有帮助用户免受更传统的窃听、橡皮管攻击和用户错误攻击。


¹ http://interviews.slashdot.org/article.pl?sid=03/02/04/2233250&mode=nocomment&tid=103&tid=123&tid=172

² Merriam-Webster 在线词典 (www.webster.com)。

³ 代码来自 http://vader.brad.ac.uk/tea/source.shtml#ansi

⁴ 代码来自 http://www.cc.jyu.fi/~paasivir/crypt/rciv/rc4article.txt。对空白进行了轻微的修改,以便全部内容都能适应一页。交换字节函数的定义也没有包含,但你可以通过其名称猜测其功能。

第八章:-

反向工程 Xbox 安全性

在本章中,我将描述我是如何击败了第六章中首次遇到的 Xbox 安全系统的初始生产版本。该安全系统是在分析 FLASH ROM 并意识到真正的硬件初始化和引导映像解密序列以某种方式隐藏在 FLASH ROM 之外后发现的。第七章介绍了一些基本的加密概念,这些概念将有助于理解本章的内容。

从硬件中提取秘密

如第六章所述,Xbox 中的隐藏引导代码可以通过监听以下总线之一来恢复:(1)前端总线(FSB),(2)主内存总线,或(3)北桥-南桥连接。

Xbox 中使用的 Pentium 处理器的前端总线(FSB)格式在 Intel 开发者网站上可用的 Pentium III 处理器数据表中进行了记录。FSB 是一个双向 64 位数据总线,大约有五十个地址和控制信号,所有信号都以 133 MHz 的速度运行。总线使用一种称为 AGTL+的信号约定。由于信号数量众多且物理形式因素具有挑战性,监听此总线是一个昂贵且困难的做法。可行的方案包括:(a)使用价值数千美元的特殊仿真器断开插座来安装处理器,或(b)反向工程 Xbox 主板上的每个 FSB 迹线的含义,并在几乎每一个信号上焊接一段短探针线。此外,还需要一个支持 AGTL+信号的逻辑分析仪。所有这些因素的结合使我不得不在其他地方寻找监听的起点。

我们下一个监听候选者,主内存总线,是一个 128 位数据总线,带有地址和控制信号,以 200 MHz 的双倍数据速率(DDR)时钟运行。内存总线使用一种称为 SSTL-2 的信号约定。(通过阅读三星 K4D263238M 内存部件的数据表,可以推断出此总线的详细信息,该数据表可在三星电子网站上找到。)尽管速度更高,但由于 Xbox 主板中设计了空(备用)内存足迹,监听主内存总线可能比监听处理器 FSB 更容易。

一个相对便宜的标准 100 引脚 TQFP 适配器(薄型四边扁平封装,一种具有 100 个鹤嘴形引脚的矩形芯片封装)可以被焊接在空白的内存焊盘上。这些适配器将提供方便的探针点,用于连接逻辑分析仪。这种方法的问题是你只能捕获写入主内存的数据。解密密钥通常是只读数据,只读数据将直接从隐藏的引导只读存储器进入处理器缓存,而不会存储到主内存中。一旦处理器处理完包含密钥的缓存行,它将被覆盖,因此密钥永远不会离开处理器的物理边界。

关于高速信息传输的更多信息

在计算机总线上窃听和修改数据是一种强大且难以防御的技术。为了理解如何窃听,你需要了解一些关于数字信息如何在计算机内部传输的背景知识。

信号标准主要有两大类:单端和差分。在导线上传输数字信息需要将其转换为物理量,如电压和电流。传统上,信号是以相对于一个称为“地”的公共参考电势测量的电压来定义的。这种信号被称为单端或非平衡信号。不幸的是,地参考点的概念仅在信号相对于其传播时间变化缓慢时才有效。实际上,每一个电势的变化都伴随着电流的流动。自然法则要求电流守恒,即对于每一个方向的电流流动,必须有相反方向的电流流动。在单端信号中,反向电流,也称为返回电流,必须通过“地”返回。在非常高的速度下,电流的返回路径不一定与信号电流的路径相同。这种不平衡导致信号失真。

差分信号通过使用两根线来传输信号,其中一根用于信号电流,另一根用于显式的返回电流路径,以此来解决上述问题。差分方法允许信号和返回路径被布置得相互跟踪,确保电流的流动保持平衡。结果是,以两倍线数为代价,得到了一个更健壮的信号传输系统。

一种将电压解释为逻辑值的特定标准称为信号约定。在晶体管性能如此之差的时期,发明了值得尊敬的 TTL 和 3.3V CMOS 信号约定,那时需要大的信号波动。最近,许多新的甚至旧的信号约定正在变得越来越受欢迎,如 SSTL(串联假负载终止逻辑)、GTL(枪式收发器逻辑)、LVDS(低电压差分信号)和 PECL(伪发射极耦合逻辑)。这些高速信号约定解释了电波相对于数据传输速率传播得较慢的事实。它们还解释了电波携带的能量必须在旅程结束时耗散,否则能量将反射并干扰入射波的事实。

在高速应用中,为了强调这些波相对于信号转换时间(信号在“1”和“0”状态之间转换所需的时间)传播得较慢,通常将电线称为“传输线”。(请注意,速度比较是相对于信号的转换时间进行的,而不是其粗略的信号频率。)一个常见的错误是认为由于信号的时钟频率较慢,可以忽略传输线效应。即使每年只有一个转换,如果该转换的持续时间仅为皮秒(一万亿分之一秒),问题仍然可能发生。

对于新手来说,好消息是来自 Xilinx 等供应商的最新 FPGA 带有对几乎所有广泛部署的信号标准的内置支持。另一个好消息是信号标准正变得越来越有文档记录。例如,Xilinx FPGA 数据表说明了每个支持的信号标准所期望的终端电阻的位置和值。通过遵循数据表和应用说明中的推荐做法,您可以使用 FPGA 监听广泛的信号。只需记住将您的监听探头尽可能保持短,您就不会出错。

第三种潜在的监听候选者是北桥到南桥的连接,这是一对单向、8 位宽的差分总线,每个总线只有一个控制信号和一个时钟信号。该总线使用 HyperTransport 信号约定,以 DDR 时钟频率 200 MHz 运行。总线的信号约定是从 nVidia 网站上关于与 Xbox 芯片组紧密相关的 nForce 的公开可用信息中推断出来的。使用示波器进行了一些测量,并与 HyperTransport 联盟网站上可用的开放 HyperTransport 规范进行了交叉验证,以验证假设 HyperTransport 信号约定确实在使用。

HyperTransport 总线在 Xbox 主板上实现,所有信号都是并行且均匀分布的,这个决定可能是由总线的高运行速度所驱动的。这使得总线成为窃听的理想目标,除了它运行在如此高的数据率之外。在如此高速率运行的总线上窃听需要特别注意窃听轨迹的长度(以保持信号的完整性),并且还需要一个相当昂贵的逻辑分析仪或定制的分析电路。

最终,北桥-南桥连接被选为第一个窃听的总线,因为它拥有的线缆数量最少,因此需要的焊接量也最少。北桥-南桥连接只有十个独特的信号,而 FSB 和主内存各有大约一百个信号。焊接大量连接不仅消耗大量时间,而且由于焊桥或损坏的轨迹,还大大增加了硬件故障的风险。因此,最小化焊接连接的数量可以最小化对主板的附带损害风险。

窃听高速总线

我在 2002 年 1 月下旬承诺采用 HyperTransport 窃听方法。这种方法存在一些重大的技术问题:

• 在不破坏信号完整性的情况下窃听高速差分总线

• 寻找或构建一个能够跟上 HyperTransport 总线 400 MB/s 数据率的日志工具

• 确定主板上的差分 HyperTransport 总线轨迹的极性和比特顺序

在预算内挖掘总线

前两个问题紧密相连。高速总线分析和日志工具通常具有专有接口,这需要为 Xbox 主板定制适配器。最后一个问题,确定比特极性和顺序,只需要在数据记录器连接并运行后进行大量的后处理和数据整理。

HyperTransport 是一个获得行业认可的开标准,这意味着市场上可以找到适用于总线的现成协议分析仪和日志工具。一个例子是 FuturePlus 的 HyperTransport 协议分析仪。不幸的是,这个协议分析仪在开展工作时的价格超过了 25,000 美元。此外,协议分析仪需要目标板特别设计以适应协议分析仪的接口模块。

与其购买协议分析仪并投入时间和精力来适应它在 Xbox 上的使用,我构建了自己的简化版。这项任务可行,因为 HyperTransport 协议相当简单。Xbox 对 HyperTransport 的实现使用了两个 8 位单向总线,一个用于发送,一个用于接收。每个总线都与其相关联一个时钟和一条选通线。信号标准要求在时钟的每个边缘上呈现有效数据。新数据包的开始由数据线离开空闲状态来指示。选通线区分命令和数据包。所有其他总线典型的边带信号,如地址、读写控制、芯片选择和中断线,在 HyperTransport 中都是通过带内命令包来处理的。因此,只需要十个差分信号(二十根线)就可以监听总线——这对黑客来说是个好消息。

HyperTransport 协议足够简单,但如何找到既能物理连接到 Xbox 总线又能跟上 400 MB/s 速度的东西呢?构建这个 HyperTransport 总线分接的理想工具是一个 FPGA。然而,在当时,没有 FPGA 能够跟上高速数据率,更重要的是,没有经过供应商认证可用于 HyperTransport 的 FPGA。理论上,Xilinx Virtex-II FPGA 适用于这个应用,但该产品刚刚推出,设备价格昂贵且难以获得(如今,你可以以不到一百美元的价格购买低端 Virtex-II FPGA)。当时我手头最好的 FPGA 是一个 Xilinx Virtex-E FPGA,我之前将其设计到我的论文原型超级计算机网络路由器中。该网络路由器板使用 CTT(中心抽头终止)信号为其网络接口,并且板上还配备了一个 Intel StrongArm 处理器,用于配置、控制和调试目的。

因此,挑战归结为如何将 HyperTransport 信号与 CTT 信号接口,以及如何从本意不用于这些速度的 FPGA 中榨取 400 MB/s 的性能。

结果表明,HyperTransport 信号约定与更常见的 LVDS(低电压差分信号)约定非常接近,该约定在 TIA/EIA-644 标准中指定。HyperTransport 驱动器通常创建一个中心在 600 mV 共模电压周围的 600 mV 差分摆幅的信号。另一方面,LVDS 接收器可以理解具有大于 100 mV 差分摆幅和 50 mV 至 2.35 V 之间任何共模电压的数据。因此,LVDS 接收器可以直接与 HyperTransport 驱动器兼容!(尽管 Virtex-E 支持直接连接到 LVDS 信号,但我无法利用这一点,因为我拥有的 Virtex-E 部件已经被设计进了一个为 CTT 信号硬连线的系统中。)如果你正在设计自己的分接板,最佳方法将是使用 FPGA 的本地 LVDS 功能,而不是这里描述的破解方法。此外,LVDS 接收器必须非常靠近 Xbox 主板,以避免损坏目标信号。长电缆会从线上耗散能量,并引入可能使系统停止工作的噪声和反射。

关于驱动信号到 HyperTransport 的思考?

本章描述的窃听应用只需要一个 HyperTransport 接收器。像“中间人”攻击这样的应用则需要一种可以覆盖 HyperTransport 信号并插入一个或两个错误比特的设备。这样的设备是可行的,因为 HyperTransport,就像 LVDS 一样,使用电流模式驱动器。换句话说,驱动器被设计成只将一定量的电流驱动到线上,而不考虑它产生的电压。在正常情况下,这工作得非常好,因为线的阻抗根据欧姆定律将电流转换成电压。然而,电流可以相加并相互抵消。一个对抗性的差分驱动器可以连接到 HyperTransport 线上,并施加一个过驱动电流来抵消预期的信号。这种过驱动可以使用 Xilinx Virtex-E 和 Virtex II 等 FPGA 中提供的灵活、可编程的 I/O 来实现。

这种总线覆盖设备的简单应用之一将是修改重置向量的目的地,当它被发送到 CPU 时,这样你就可以控制 Xbox。重置向量的目的地编码在一个单字节中,该字节位于 0xFFFF.FFF0 处的“跳转”操作码之后。重置向量很可能在重置去激活后以确定性的时钟数被传输,因此这个攻击的定时元素可以只是一个由 HyperTransport 总线时钟时钟并由重置信号同步的计时器。这种“中间人”攻击甚至可以击败加密安全的公钥引导块实现。

解决将 HyperTransport 信号传输到 FPGA 问题的方案是使用信号转换芯片。LVDS 是电信系统中广泛使用的 LCD 面板接口和背板的标准,因此有大量的低成本 LVDS 到 CMOS 转换器可供选择。当然,所需的信号约定是 CTT,但仔细观察后发现,将 CMOS 驱动器连接到 CTT 接收器实际上并不成问题。CTT 是一种电流模式信号约定,它将+8 mA 或-8 mA 电流驱动到 1.5 伏特终止的 50 欧姆传输线。接收器是一个差分放大器,它将参考终止电压与传输线电压进行比较。在 Virtex-E 中,CTT 接收器放大器被指定在接收电压相对于参考电压上下波动超过 200 mV 时工作。大多数驱动 CTT 终止线的 CMOS 发射器在向 50 欧姆负载提供或吸收 8 mA 电流时都不会有问题。此外,CMOS 发射器应该没有问题驱动连接到固定电压的电线。因此,标准的 LVDS 到 CMOS 转换器芯片可以用来将 Xbox 主板上的 HyperTransport 信号传输到我为我的论文之前构建的板上。我选择的芯片是德州仪器的 SN65LVDS386,你可以在德州仪器的网站上找到该芯片的数据表。

通过 Xbox 主板上的 HyperTransport 总线使用的整洁布局,将 LVDS 到 CMOS 转换器芯片连接到板上变得非常简单。图 8-1 展示了 HyperTransport 总线布局的样子。注意所有电线是如何平行运行的,以及它们是如何均匀分布的。一些电线,如时钟(TX CK/TX CX* 和 RX CK/RX CX)和选通线(TXD8/TXD8 和 RXD8/RXD8*),甚至被标记了极性标记!这种简单的布局使得使用易于设计的分接板成为可能。

分接板仅包含 LVDS 到 CMOS 转换器芯片、一些电源调节电路,以及一组直接延伸到板边缘的线路,这些线路的间距与 Xbox 主板上的 HyperTransport 总线相同。为了实现相同的间距和便于对齐及安装,我使用数字卡尺测量了这些线路的尺寸。图 8-2 展示了 HyperTransport 总线线路的尺寸。

图片

图 8-1:Xbox 主板上的 HyperTransport 总线布局。

测量有点棘手。我的方法是测量总总线宽度,然后将宽度除以走线和空间的数量,以获得平均预期的间距和走线宽度。然后我用 PCB CAD 程序布置这些走线,并在 1:1 的比例下将布局打印在纸上。我比较了打印的走线与电路板上的走线,并手动进行了一些调整。(请注意,许多打印机都有一些小的缩放误差,所以如果你尝试这样做,通过打印出几条已知长度的长线并测量它们来校准自己。打印机在水平和垂直轴上可能会有不同的缩放误差,所以务必在两个方向上打印线条。)

figure_8-2

图 8-2:Xbox 主板上的 HyperTransport 总线走线的尺寸。1“mil”等于 1/1000 英寸或 25.4 微米。

使用合适的软件设计自己的电路板相当容易。你可以通过阅读附录 C,“进入 PCB 布局”,了解更多关于如何制作自己的电路板的信息。

一旦组件选择过程完成,HyperTransport 插针和信号转换电路板的设计和布局仅花了几个小时。电路板设计的示意图可以在图 8-6 中看到。然后,通过互联网下的订单来制造电路板。许多电路板制造商提供经济实惠、快速周转的电路板制造服务,这些服务通过电子邮件或 ftp 上传接受 Gerber 文件格式的电路板设计。在这种情况下,我五天内制作了两块电路板,每块电路板的价格为 33 美元(有关如何制作自己的电路板更多信息,请参见附录 C,“进入 PCB 布局”)。这个价格仅包括将电路板切割成方形部件的费用。然而,我需要电路板带有 HyperTransport 插针的一侧具有特殊形状,以便在不干扰 Xbox 主板上的现有组件的情况下安装电路板。我还需要电路板的配对边缘被斜切,这样电路板就可以以轻微的角度安装,简化将插针电路板焊接到主板上的任务。我使用砂光带手动雕刻边缘,使其符合图 8-3 中描述的形状。在雕刻时,电路板必须以使砂光带的磨料带首先接触电路板的走线侧的方式进行定位,以防止砂光带撕裂电路板上的铜走线。在使用砂光带雕刻像插针电路板这样的小电路板时要小心——砂光带同样可能意外地雕刻你的手指。

figure_8-3图 8-3:HyperTransport 插针电路板边缘的形状。

在雕刻斜边之后,所有部件都被焊接到了电路板上。(参见附录 B,“焊接技术”。)

完成的测试板现在必须固定到 Xbox 主板上。这一关键步骤可能是最困难的一个。首先,使用细砂纸去除 Xbox 主板上的绿色焊膏,露出目标焊线的亮铜色。然后,这些焊线被涂上助焊剂,并使用热烙铁尖端涂上一层薄薄的焊锡。

我用于将测试板固定到主板上的步骤在图 8-4 中展示。准备好的测试板使用一根细线(30 AWG)焊接在测试板上的一个焊线和主板上的一个焊线之间,以大约的位置和角度固定在主板上。搭接线仅作为临时辅助工具,用于固定板子,将被移除,因此如果线桥接多个焊线无关紧要。一旦线被固定,我小心地调整了测试板在主板上的位置,加热线以释放其连接,避免抬起任何铜线。 (我使用显微镜帮助确定最佳对齐。)一旦我对板子的位置满意,我就将强环氧树脂涂在板接缝上,以固定所有部件。环氧树脂应该固化并形成一个刚性、坚固的接缝。(请注意,某些环氧树脂如果应用不当会固化成凝胶;这是不可接受的,因为接缝的整个机械完整性必须来自环氧树脂,而不是焊缝。)我使用了 Miller-Stephenson 环氧树脂配方 907,它固化后足够坚固,我可以通过测试板提起 Xbox,而不会干扰测试连接。

figure_8-4

图 8-4:测试板焊接步骤。

图 8-5:安装在 Xbox 主板上的 HyperTransport 测试板。

环氧固化后,我移除了用于固定测试板的临时搭接线,并用一小块焊锡膏和助焊剂清理了裸露的焊接线。将测试板焊接线焊接到裸露的主板焊接线上的最后一步现在与将任何表面贴装组件焊接到板上的步骤没有区别;附录 B 中描述的大多数标准技术可以直接应用于这种情况。图 8-5 显示了最终组装的外观。

构建数据记录器

监听 HyperTransport 总线面临的第二个挑战是获取或构建一个能够跟上总线 400 MB/s 数据率的记录设备。考虑到我的预算,我决定我的唯一选择是构建一个记录器,因为购买任何足够性能的工具都远远超出了我的预算。

图 8-6:HyperTransport 测试板的电路图。

在构建记录设备时,我决定使用一个集成在我之前构建的板上的 Virtex-E FPGA。然而,使用 Virtex-E FPGA 的一个问题是 FPGA 的性能(如数据手册中指定)不足以跟上 HyperTransport 总线。幸运的是,FPGA 可以很好地超频,因为它们的制造公差非常保守,并且因为 FPGA 性能主要受可配置布线织物中的信号传播延迟的限制。因此,可以通过软延迟线和选择性地反转时钟手动识别和补偿一些关键性能限制路径。最敏感的性能块可以手动放置以优化延迟,而编译器和自动放置和路由工具处理电路的非关键部分。图 8-7 显示了用于在 HyperTransport 总线上捕获数据的整体设计。

figure_8-7

图 8-7:Xilinx Virtex-E FPGA 中构建的数据记录器框图。

在概念上,设计相当简单:从 HyperTransport 总线上取下高速数据,并将其时钟输入到四分之一的时钟的四相中,创建一个速度慢四倍但宽度增加四倍的数据流。这使所有手动放置和调整仅限于前几个输入触发器。接下来,使用一组延迟和旋转器重新对齐数据,并将数据逐个存储在先进先出(FIFO)内存中。触发 FIFO 捕获开始的信号由一个计时器比较器生成,该比较器从第一次复位开始计数。可以通过连接多次运行的结果来捕获长时间的数据窗口,每次运行的捕获触发点都比前一次延迟。对触发电路的后期优化是“不存储零”(DNSZ)功能。在 DNSZ 模式下,由所有 0 组成的数据不会存储在 FIFO 中。这有助于剔除 HyperTransport 总线上的所有空闲数据。结果数据轨迹是一系列带时间戳的 32 位字。

FPGA 数据记录器设计中最困难的部分是在输入路径上校准延迟。延迟校准是通过使用示波器探测 HyperTransport 总线上的一个小数据窗口来完成的。通过调整线延迟和字节宽度的旋转,直到探测到的数据与日志数据匹配。这个过程得益于在空闲时间内,每几百微秒在总线上重复一个常见的命令序列,这作为校准参考。

确定总线顺序和极性

在记录数据后的最终挑战是确定 HyperTransport 总线上的信号顺序及其极性。请注意,虽然 Xbox 主板上 HyperTransport 总线的两个最重要的信号为我们标注了标签,但剩余的八条数据线具有模糊的极性和位顺序。

八个数据信号的正确极性是通过观察空闲总线数据位模式确定的。HyperTransport 总线大部分时间处于空闲状态,因此这并不困难。如果空闲模式应该是全 0,那么任何显示为 1 的位位置其极性被反转。这通过在 FPGA 上适当线路上插入一个反转项在硬件中得到了纠正。

然而,确定正确的位顺序要困难得多。在假设通过 HyperTransport 总线传入的数据大部分来自 FLASH ROM 的情况下,按字节逐字节进行了 1 的计数。理论上是总线顺序是一个纯排列,这意味着字节中二进制 1 的数量在 FLASH ROM 数据和由记录器捕获的数据之间保持不变。将 1 的计数模式并排放置以识别 FLASH ROM 和记录数据之间对应候选区域的模式。幸运的是,HyperTransport 总线上的前几个字是位于 FLASH 内存底部的芯片组特定初始化,因此找到正确对齐的模式并没有花费太多时间。每个 ROM 和记录器的字节集被列出,并且,借助一个简短的 C 程序,位列被转置,直到找到一个使所有行值匹配的顺序。

解读捕获的数据

现在已经提取了有效的数据跟踪,但问题仍然是解读其含义。在这样做之前,让我们回顾一下我们目前收集到的数据。

时间相关性。 在宏观尺度上,记录的数据应该与预期的初始化事件序列有强烈的时间相关性:首先是干扰表初始化,然后是解密步骤,接着是从 RAM 执行。日志跟踪中对应于这些每个事件的区域可以通过观察大爆发活动发生的时间,然后是寂静区域来确定。

事务长度。 由于 Pentium 处理器既有数据缓存也有指令缓存,因此 HyperTransport 总线对 FLASH ROM 或隐藏引导 ROM 的所有获取都应该以偶数长度的流量爆发到来。

保证顺序。收集的数据带有时间戳,并且按时间顺序排列,因此如果能够在数据日志中识别出重置向量的第一个指令,就可以推断出其余指令的位置和结构。最初,我忽略了检查通过 HyperTransport 总线传输的数据的宏观组织结构,这给我带来了一些麻烦。图 8-7 中记录机器的简化框图表明,每当 HyperTransport 总线重置时,记录 FIFO 都会重置。这听起来是个不错的主意,然而我最初错误地假设 HyperTransport 总线在施加电源时只会重置一次。实际上,HyperTransport 总线在初始化跳转表步骤后会重置第二次。因此,当我最初开始查看跟踪时,我看到的只是加密数据和一些零散的代码,这些代码都无法以任何逻辑方式与引导向量对齐。

想象一下那有多令人失望!我退后一步,用示波器观察了 HyperTransport 总线事件,时间刻度设置为每分度毫秒。我发现有一个较早的重置脉冲,调整触发机制只捕获第一个脉冲后,引导指令就很容易识别了。在秘密 ROM 中的 0xFFFF.FFF0 地址处的十六字节恰好与 FLASH ROM 中的相同十六字节相同。从那时起,我通过进行大量的跟踪和反汇编,并做好记录,跟踪程序计数器的当前值,以便将每个指令块放置在内存中的正确位置。每个缓存行读取由 16 或 32 个连续的字节组成,这导致了一个独特的数据记录器时间戳模式,有助于逆向工程过程。经过几小时的筛选,我收集了足够的代码输入到反汇编器中。(有关我使用的反汇编器的更多信息,请参阅软件分析工具的侧边栏。)

更多行业工具:软件分析工具

在你的黑客经验中,不可避免地会在某个时刻遇到需要反汇编一些汇编语言代码的需求。2002 年 1 月,当我正在逆向工程 Xbox 安全系统时,一些软件黑客向我介绍了一个用于这项工作的优秀工具。这个工具由 Ilfak Guilfanov 开发,名为“IDA Pro”,由 DataRescue Corporation(http://www.datarescue.com/idabase/)销售。IDA Pro 不仅能够反汇编 x86 代码,还能反汇编大量嵌入式处理器的代码。IDA Pro 输出的质量也非常高:代码段会自动标注和整理以提高可读性。IDA Pro 还提供了一系列实用且有趣的功能。我最喜欢的功能之一是能够自动匹配代码库签名与函数调用,以及能够通过按下一个键来跟踪跳转。

在代码分析期间,另一个非常有用的工具是 HackMan。HackMan 是 TechnoLogismiki 公司(http://www.technologismiki.com/hackman/)的免费软件。它本质上是一个“十六进制编辑器”,即一个允许你直接操作二进制数据的文件编辑器,但它有很多独特的功能,远超简单的编辑。例如,HackMan 内置了解码器。解码器不如 IDA Pro 强大,但它与十六进制编辑器是交互式的。这使我能够在追踪数据日志的同时,快速测试候选缓存行是否为有效代码,并组装秘密 ROM 的最终二进制图像。

在进行了一些数据处理,并得到了一些在线黑客朋友的很大帮助后,我们确定所使用的密钥是 RC-4/128。RC-4 是一种对称密钥,密钥必须存储在 Xbox 的某个地方,但我很难在数据流中识别出密钥。看起来密钥跨越了与当时我无法定位的代码片段共享的缓存行提取。

随着夜晚的深入,我厌倦了盯着十六进制数字,决定尝试一种本不应该奏效的方法。我将 RC-4 解密程序改编成使用从数据日志中的滑动窗口中导出的密钥来解密 FLASH ROM 中的目标图像。这是一个相当蛮力式的方法,因为它需要成千上万次的解密(日志中的每一个字节都需要一次)来搜索整个数据流。我通过将 RC-4 解密程序的输出输入到直方图程序来自动化这个过程。如果密钥不匹配,输出应该是统计上的“白色”。换句话说,输出直方图应该显示所有值对于非匹配密钥来说概率大致相等。然而,如果密钥是正确的,直方图应该是有偏的,某些值比所有其他值更受欢迎。

最终,我在大约凌晨 5 点完成了程序,trykeys,用于执行这种蛮力搜索。我疲惫不堪,眼睛模糊,决定在结束这一天的努力之前先测试一下程序。想象一下,当我看着程序处理候选数据流时的惊讶表情:

$ ./trykeys.exe ms4.bin binout.full
.............................................................
.....................found possible key combo: avg 96, min 5,
offset 8745..................................................
..............................................................

FLASH ROM 映像被命名为 ms4.bin,二进制数据记录器跟踪文件被命名为 binout.full。trykeys 程序已经识别出一个在统计上不同的直方图(平均值为 96,最小桶高度为 5),这是通过使用起始偏移量为 8745 的数据作为测试密钥来解密 ROM 映像的结果。然后,我从数据流中隔离出候选密钥,并使用该候选密钥分析了解密后的输出。输出看起来像是真实的、有效的代码。我在一个隐藏的引导扇区中找到了这个密钥,它存储在南桥芯片中!几天后,在休息并补上我的学校作业之后,我完成了对数据流的适当分析,并拼凑出了整个秘密引导扇区的映像。

拿到秘密引导代码的 RC-4 密钥后,我有能力生成任何 Xbox 都能接受的 FLASH ROM 映像。这意味着,通过仅仅覆盖或替换 Xbox 主板上的 ROM,就可以违反 Xbox 的整个信任机制。这是通过使用微软提供的测试结构来覆盖制造过程中的 FLASH ROM 以进行测试和诊断来实现的。Xbox 必须以每秒一个的速度下线,因此微软设计了一套快速连接测试点,以实现 FLASH ROM 覆盖。能够引导到替代 ROM 映像对于使用原生 Xbox CPU 运行生产测试程序非常有价值。Xbox LPC 接口实现的物理结构允许用户以及微软的合同制造商在不进行任何焊接的情况下安装设计良好的 FLASH ROM 覆盖设备。

黑客的法律挑战

回顾起来,破解 Xbox 在技术上不如在社会和法律上具有挑战性。在从南桥芯片中提取出密钥之后,我在麻省理工学院人工智能实验室与我的研究导师,汤姆·奈特教授,会面,讨论我的研究结果。我的导师指出,我的工作可能违反了 DMCA,因此在发表之前,我们联系了麻省理工学院的法务部门寻求咨询。麻省理工学院法务部门最终回应说,DMCA 使得这个案例风险太高,我必须以个人身份发表,尽管我的工作是在麻省理工学院作为我的计算机架构研究的一部分进行的。我感到绝望,认为我永远负担不起律师费用,也永远无法发表我的研究结果,但随后哈尔·阿贝尔森教授将我介绍给了电子前沿基金会(EFF)。结果,EFF 的李天和刘乔以及波士顿学院被分配来帮助我发表我的工作。随后几个月进行了深思熟虑和定位。这是一场在两个前线进行的战斗:我们必须说服麻省理工学院接受这项工作,同时试图安抚微软。经过四个月的斗争,在微软对我的工作进行了鼓励性的审查,以及我的实验室同事和教授们的压倒性支持下,麻省理工学院最终屈服了。麻省理工学院决定,我可以作为麻省理工学院的学生发表我的工作,而不是作为一个独立实体。五个月的法律僵局的结果是,一份人工智能实验室技术备忘录,随后在 2002 年 8 月于嵌入式系统加密硬件(CHES)会议上的学术展示。

虽然这个故事的结果可能很愉快,但如果不是我的导师、我的实验室以及 EFF 的杰出律师们的支持,事情可能会非常不同。DMCA 在流氓黑客和合法研究人员之间划了一条模糊的界限;或许没有麻省理工学院的背书,我就无法满足 DMCA 的研究豁免条件,我的研究可能永远不会发表,或者即使发表了也可能遭到微软的质疑。言论自由适用于所有人,而不仅仅是那些有幸坐在著名学术机构象牙塔中的人。还有无数其他人也在研究 Xbox 并取得了出色的成果,但他们的声音将永远在 DMCA 的幕后保持沉默。

显然,绕过 Xbox 中使用的信任机制具有棘手的法律含义。虽然我的主要意图是满足我的好奇心,其次是在 Xbox 上运行我自己的代码,行使我的公平使用权,但其他人有复制游戏和修改以及重新分发微软的版权内核代码的愿望。因为加密算法对它的应用是盲目的,提取 RC-4 密钥使得所有应用程序都平等。因此,我联系了电子前沿基金会(EFF)以帮助我解决法律问题。法律程序是缓慢而沉重的。我在 2002 年 2 月提取了密钥,直到几乎 6 月才被允许在适当的学术论坛上公布我的研究结果。

我从未经历过如此多的争议集中在 128 位上。1998 年的《数字千年版权法》(DMCA)永远改变了硬件黑客的格局。逆向工程曾经是一项受保护的行动,被认为是使市场健康和具有竞争力的因素之一。现在,在家中私底下对加密安全系统进行篡改和绕过,以行使您的公平使用权,可能会让您面临数千美元的罚款和诉讼。我强烈建议您阅读第十二章,“警告黑客”,以便了解您的法律权利和责任。

模糊安全

微软在 Xbox 第一版安全中使用的技巧是模糊安全的绝佳例子。为了防止人们分析 ROM 内容或创建自己的 ROM,使用了强大的加密算法 RC-4/128 来加密 ROM 镜像。然而,RC-4/128 是一种对称加密算法,这意味着 Xbox 必须包含一个也可以用作加密密钥的解密密钥。这个解密/加密密钥是隐藏在秘密引导 ROM 中的重要信息。隐藏这个密钥是模糊安全:一旦找到密钥,加密算法就变得无关紧要,所有安全都会丧失。

真正的安全需要用户能够访问 Xbox 的每一块零件,但仍无法加密他们自己的有效 FLASH ROM 镜像。这意味着必须将某些秘密保存在 Xbox 之外。公钥加密就是为了这种场景而发明的。如果微软使用公钥加密算法来加密或签名 Xbox 引导代码,那么知道安全引导 ROM 的全部内容将毫无用处,因为主要秘密,微软的私钥,仍然安全地保存在华盛顿雷德蒙德某个保险库中,我们无法触及。

然而,也有积极的一面。下一章将介绍我同事的研究成果,其中许多成果包括在 Xbox 初始化序列中发现后门。这些后门允许你在 Xbox 上运行自己的代码,而无需启用访问微软的版权作品,也无需启用游戏复制。下一章还将介绍 Xbox 安全版本 1.1,该版本在英国的 Andy Green 仅用几天时间就破解了。

第九章:-

悄悄进入后门

在这本书中描述 Xbox 可行的攻击范围太多,无法一一列举。Xbox 基于 PC 架构,这是一个复杂、演化的架构,最初设计时没有考虑到安全性。据我所知,许多被智能卡黑客利用的经典硬件安全漏洞,如电源调制、旁路攻击和时钟故障,在 Xbox 上甚至都没有触及。关于这些安全弱点,你可以在密码学硬件在嵌入式系统(CHES)会议的论文集、计算机科学系列讲座笔记(Springer-Verlag)中找到更多信息。

很不幸,控制台和安全的 PC 制造商并不关心硬件安全弱点,因为硬件攻击“对普通消费者来说太难执行”因此威胁很小。虽然研究攻击确实需要一位熟练的黑客和正确的工具,但实施攻击可能非常便宜且容易。我想起了这样一个寓言:一位机械师被叫来修理一台重要的损坏机器,他花了一个小时观察情况,然后只通过在正确的位置敲击一下就修复了机器。当收到 1000 美元的账单时,机器的所有者要求知道为什么敲击一下要花这么多钱。机械师回答说:“敲击一下只需要一角钱。知道在哪里敲击需要 999.90 美元。”这个寓言的推论是,如果给出具体的指示,任何人都可以执行敲击来修复机器。

安全攻击通常是相同的:难以弄清楚;容易分享和实施。安全的硬件制造商也应该关注采用主要针对黑客入侵的被动政策。许多黑客在秘密中进行工作,并保持他们的方法和结果低调,以便供应商不能开发出适当的对策。这些黑客还维护一个已知攻击和后门的库,一次只公开一个,这样具有被动硬件安全政策的供应商总是处于追赶状态。

命名约定的评论

黑客社区经常为重要概念发明自己的术语,这些术语可能因社区而异,也可能与行业标准术语不同。以下是由 Xbox-Linux 社区接受的术语列表。本书中使用的术语与我使用的任何偏差都将被注明。

  • X-code:跳转表操作码;秘密南桥(MCPX)引导 ROM 用于初始化 Xbox 硬件的操作码

  • 2BL:第二个引导加载程序。这是由秘密引导 ROM 解密的代码。它被称为第二个引导加载程序,因为该代码的主要责任是解密和解压缩内核映像。

  • Flash Boot Loader:在版本 1.1 安全性中,这是在秘密启动 ROM 和 2BL 之间的一个中间启动加载程序。FBL 通过对秘密启动 ROM 内部的一个硬编码值进行轻量级哈希验证。因此,如果不更改 MCPX 硅片,则无法更改 FBL。FBL 负责验证 FLASH ROM 所有关键部分的数字签名。

  • 内核:Xbox 内核代码。它以压缩和加密的形式存储在 FLASH ROM 中。

  • 版本 1.0 安全性:原始 Xbox 安全系统使用 RC-4 加密在 2BL 上。

  • 版本 1.1 安全性:第二个使用 TEA 哈希验证 FLASH ROM 区域的 Xbox 安全系统。带有版本 1.1 安全性的盒子最早的生产日期大约在 2002 年 8 月。

上一章描述了我对 Xbox 安全机制的监听攻击,最终得到了隐藏在一段秘密代码块中的 RC-4 密钥。本章描述了由我的同事设计的其他一些 Xbox 攻击,以及针对修订后的 Xbox 安全方案(在此称为安全版本 1.1)发起的攻击。

后门和安全漏洞

一类针对 Xbox 的后门攻击利用了秘密启动代码初始化硬件的基本弱点。这种弱点源于硬件初始化是通过一个强大的干扰表指令解释器完成的,该解释器以未经验证的明文形式存储其命令。

Visor 干扰表攻击

对 Xbox 的一种攻击涉及修改硬件初始化序列。回想一下,Xbox 的硬件初始化是通过一个指令解释器完成的,该解释器从未加密的 FLASH ROM 的一部分(称为“干扰表”)检索其命令。干扰表条目与 FLASH ROM 其余部分的关系如图 9-1 所示。干扰表条目以 <opcode, arg1, arg2> 元组的形式存储在最低 FLASH ROM 地址附近。可用的指令包括对 x86 架构中所有地址空间的内存读和写函数。由于干扰表以未加密的形式存储,并且从未检查过修改,因此可以在干扰表中插入指令,这些指令可以在 FLASH ROM 2BL 的 RC-4 解密之前“播种” Xbox 内存中的恶意指令或修改后的硬件状态。

干扰表修改的一个应用是恢复内核的明文,而不需要知道 RC-4 密钥。一位名叫 Visor 的黑客首先向我描述了这种方法。以下是 Visor 方法的总结:

  1. 正常启动 Xbox。正常启动过程中的一部分会将解密后的内核映像放入主内存。

  2. 在保持 Xbox 电源供电的情况下,将 FLASH ROM 的干扰表内容切换到另一个表,该表将主内存的区域复制到易于监控的位置,例如 FLASH ROM 的总线。

  3. 对 Xbox CPU 执行软重置。这会强制硬件重新初始化,但不会擦除主内存。

  4. 在修改后的 jam 表程序执行时记录主内存的内容。

figure_9-1

图 9-1:与 FLASH ROM 其余部分的 jam 表操作码。

在步骤 2 中,动态切换 FLASH ROM 内容可以通过 ROM 模拟器或使用带有额外地址位连接到开关组的超大规模 ROM 来完成。

Visor 还描述了如何将 jam 表用作复杂破解的一部分,以控制 Xbox 的指令指针(IP)。为了更好地理解这个破解,我们将进一步调查秘密引导代码如何处理无效 FLASH ROM 镜像的情况。

在解密 FLASH ROM 镜像中的 2BL 之后,秘密引导代码会在 2BL 末尾附近的位置检查一个魔数。对于无效的 FLASH ROM 镜像,这个数字不匹配,会导致 CPU 跳转到位于 0xFFFF.FFFA 的短指令序列。这组指令一直持续到物理内存中的最后一个可寻址位置,即位置 0xFFFF.FFFF。一旦 CPU 执行了无效 ROM 镜像的最后一个指令,它应该因为代码段边界错误而崩溃并停止执行,当 IP 从 0xFFFF.FFFF 翻转到 0x0000.0000 时。然而,这并没有发生;相反,CPU 愉快地尝试执行位于位置 0x0000.0000 的任何指令,无论有效还是无效。理论上,这个指令是无效的,CPU 仍然会因为指令故障而停止。然而,可以在 Xbox jam 表初始化序列中使用 jam 表内存写入操作码将有效指令放置在那里。因此,通过破坏或擦除加密的 FLASH ROM 镜像,并修改 jam 表以插入跳转到您自己的未加密 FLASH ROM 代码中的跳转指令,您可以在不接触任何加密或类似技术措施的情况下控制 Xbox CPU 的 IP。因此,这种破解可能符合 DMCA 的规定。我说“可能”,因为 DMCA 是一部经常含糊不清的法律,而且很少有法院先例来澄清这些含糊之处。这种方法的合法性论据在于,从未解密或执行过任何重要的微软版权代码。唯一的例外是必须执行的秘密引导 ROM 的部分,因为它们是硬连接到南桥的硅芯片上的。参见第十二章“警告黑客”,以更深入地讨论当今黑客社区面临的合法问题。

MIST 提前取消映射攻击¹

为了防止黑客控制 Xbox 时泄露秘密引导代码,南桥芯片中的秘密引导代码在退出前会自行解映射。换句话说,它在执行完毕后永久隐藏自己。因此,尝试访问内存中任何顶部 512 个字节的用户程序将看到 FLASH 内存中的诱饵块而不是秘密引导代码。Xbox-Linux 项目的负责人迈克尔·斯蒂尔发现了一种利用这一功能的方法。

解映射过程是通过写入 0x8000.8008 完成的,这是 PCI 配置空间中的一个硬件寄存器。基本策略是包含一个写入 0x8000.8008 并解映射秘密引导代码的干扰表操作码,在初始化序列完成之前。由于此时缓存已关闭,处理器将开始从诱饵块中获取和执行指令。幸运的是,由于诱饵块是 FLASH ROM 的一部分,因此可以自由修改。然而,干扰表解释器阻止了对位置 0x8000.8008 的写入,所以这不应该起作用。然而,南桥芯片组中 PCI 配置空间解码中的一个错误使得解映射指令对多个别名地址做出响应。特别是,“功能”位字段被忽略。因此,写入 0x8000.8X08(其中 X 不等于 0)也有效,并且这些写入不会被干扰表解释器阻止。因此,要使用 MIST 黑客技术控制 CPU IP,你必须修改 FLASH 中的诱饵块以包含你的代码,然后添加适当的干扰表操作码,在硬件初始化期间解映射秘密引导 ROM。

微软反击

安全漏洞的发现促使许多人猜测微软会迅速更换其安全方案。2002 年 8 月,配备了新主板的 Xbox 在澳大利亚悄然出现。关于新安全系统的第一条官方消息来自一个不太可能的消息来源:Xbox 所使用的芯片组的生产商 nVidia。在 2002 年第二季度表现平平之后,nVidia 的一位发言人将此作为季度表现不佳的几个原因之一:

“我们关于 Xbox 的说法是,我们已经达到了批量折扣的里程碑,进一步降低了利润率。并且我们将在第二季度进行库存减记,这与 MSFT 过渡到新的安全代码(通过 MIT 黑客)时变得过时的 Xbox MCP 数量以及我们为满足基于 Athlon 的 PC 更高需求而构建的 nForce 芯片组过剩有关。” —— 德雷克·佩雷斯,nVidia 公关总监²

逆向工程 v1.1 安全³

安全代码变更的具体细节直到 2002 年 10 月才被揭露,当时一名叫 Andy Green 的黑客开始调查在英国可用的第一版 1.1 Xbox。Xbox 1.1 和 1.0 版本在主板上的外观物理差异细微:GPU 将其风扇换成了更大的散热片,USB 子卡被合并到主板上,并且缺少了一个 PLL 时钟合成芯片。此外,还缺少了这里的滤波电容器,但似乎没有发生任何重大的变化。进一步的探测发现,MIST 攻击所利用的漏洞已被修补,但中断表操作码没有改变。LPC 总线,获取 Xbox 访问权限的关键向量,也存在且没有改变。

Andy 使用一名名叫 Asterisk 的同行黑客想出的程序,在一天内提取了 MCPX ROM。该程序利用了之前已识别的安全漏洞和后门的未公开组合。对 ROM 内容的初步分析显示,安全措施是以一种截然不同的方式实施的。对版本 1.1 Xbox 的初步概述表明,旧的通过隐蔽实现的安全方案已被抛弃,取而代之的是一种名义上从公钥密码的强度中获得安全性的方案。

figure_9-2

图 9-2:Xbox 安全版本 1.1。不能不更换 MCPX 硅片而更改的区域被阴影灰色覆盖

微软对新的安全方案的实施有点反直觉。因为 MCPX 内部的秘密引导 ROM 大小保持不变,为 512 字节,所以他们无法在秘密引导 ROM 中容纳完整的公钥数字签名算法。相反,他们选择在秘密引导 ROM 中使用轻量级的散列值来验证一个被称为 Flash Boot Loader(FBL)的 FLASH ROM 区域。FBL 包含用于数字签名验证 FLASH ROM 的代码(RSA 密码、SHA-1 散列、微软的公钥和驱动程序)。只有当 FBL 的散列值可以与存储在秘密引导 ROM 中的常数进行验证时,FBL 才会执行。因此,从理论上讲,FBL 与秘密引导 ROM 一样不可变,尽管它存储在可变的 FLASH ROM 中。

尽管这个方案听起来相当坚不可摧,但黑客社区并没有轻易放弃。他们详细检查了秘密引导 ROM 的散列值,并发现它基于 David Wheeler 和 Roger Needham 在剑桥大学计算机实验室开发的 Tiny Encryption Algorithm(TEA)。努力中的合作者 Franz Lehner 向新闻组 sci.crypt 发送了一个关于 TEA 散列弱点的查询。

在 10 月 11 日星期五下午,他们的查询得到了回答。John Kelsey、Bruce Schneier 和 David Wagner 在 CRYPTO 1996 上发表的一篇论文指出,TEA 加密算法在其密钥调度器中存在弱点,每个密钥都有三个相关密钥,可以通过反转某些比特对来生成(这个弱点以及 TEA 加密算法在第七章中进行了更详细的讨论)。在周六,Andy Green 将此信息发布到了 XboxHacker.net:

Aw, I'm a mere mortal, my feet are definitely made of
clay.

OK, I don't think its giving too much away to say the
first 5 bytes of the region.

ffffd400: E9 83 01 00 00

This is a relative longbranch to 0xffffd588

If I flip b31 of that as a DWORD (and flip its friend at
DWORD address +1 the same way) I branch instead to
0x7fd588.... Hmmmm that's, what, 8M up, where...

where
there's
RAM

Xcodes.. visor ram push method... (looks at MCPX for RAM
Write X-Code)

X-Code opcode 3 ... unrestricted

Hold on to your hat, boys! Its testing time!

(mviz, a marvelous and well-timed revelation, I feel
mysterious and invisble forces helping me along, for which
I am grateful!)4

换句话说,TEA 加密算法的相关键弱点意味着 FBL 中每对相邻的双字都可以通过改变一个比特,即最重要的比特,来修改,而不影响生成的哈希值。这种弱点给了 Andy 和他的团队足够的空间来修改单个跳转指令的目标,使其指向主内存中的某个位置。

个人简介:Andy Green

你能告诉我们更多关于你自己的信息,以及你是如何开始黑客生涯的吗?

我现在 37 岁,住在英格兰,东米德兰地区的凯特林附近,和我的妻子、我们的四个孩子和两只猫一起生活。

我从大约 12 岁开始对计算机产生兴趣,那时我的哥哥买了一台 Commodore Pet。这台 1MHz 的 6502 让我忙了好几个月,试图从杂志上输入 BASIC 代码,然后为它编写游戏;最终我用机器码编写了一个非常棒的字符单元格太空侵略者游戏。机器码就是你在直接用十六进制编程 CPU;我现在还能记得常见的 6502 操作码的十六进制表示。这是一项如此困难的努力,以至于我决定我的下一个项目将是一个用机器码编写的汇编器。1978 年是在互联网出现之前:我买不起商业汇编器,因为我只是个孩子,我们周围也没有人知道从哪里盗版一个副本。

这在汇编器中相当可怜,但它确实工作得很好。我从中学到了正确工具的价值,我可以用汇编器写得更快,而且整个种类的错误,比如手动计算相对分支的错误,都完全消失了。接下来我有了 BBC Model B 电脑,我又对制作工具和游戏产生了兴趣。我得到了一所公立学校的奖学金,但我拒绝了,并在 16 岁时辍学,没有接受进一步的教育。我对自学任何感兴趣的东西感到非常满足。

我为这个和另一个名为 Oric 的 6502 平台出售了一些游戏,并用那些钱成立了一家制作汇编器和其它开发工具的公司。在这个过程中,我学习了 C 和 C++,每次我都能解决一大堆的 bug 和浪费时间的问题。

这就像“人类简史”中的那张图片,从 Nethanderal 的相对分支计算到直立人及其虚拟函数。

在此同时,我开始探索数字硬件设计,再次通过经验自学。我发现硬件和软件是同一枚硬币的两面,尽管在教育中它们被完全分开对待。你选择在软件中还是硬件中实现你的逻辑功能,或者两者的混合,这实际上是一个实现细节。在两个领域都有立足点,能更深入地了解设计的本质:例如,可以说 C++在接口的重要性方面借鉴了许多电子学的概念。

在对 Xbox 产生兴趣之前,我曾在一家美国公司工作,该公司在牛津设有办公室,做过很多工作,但最后一个是设计智能卡硅片。尽管设计很有趣,那里也有一些出色的人在工作,但我对政治和管理问题越来越感到沮丧。而且,尽管我参与了几个项目,但由于我基于英国,我的薪水只有圣何塞员工的 2/3。更别提他们从我这里获得的专利,而我却没有任何回报。2001 年 12 月,我发现诚信比金钱更重要,于是辞职,决定重新开始自己工作。

离开这家公司时,我经历了一些不愉快的经历,这使得我感到有些脆弱。在消化这些经历的过程中,我发现自己在丑陋、贪婪、控制的本能与涉及知识产权的普通公司的观点之间,以及 GPL 项目的性质和参与鼓励减少专利和版权法严厉程度的人之间存在着巨大的差异。随着时间的推移,我越来越看到微软和我在前一家公司工作的公司是同样的光景。

之后,我在 Slashdot 上读到了 bunnie 的破解文章。我带着一些尖锐的情感阅读了 bunnie 的方法。我主要的想法是,这本来是我可以做的事情,因为我从 1989 年开始就使用 bunnie 使用的 FPGA,对攻击的简洁性表示钦佩,对自己没有做同样酷和有趣的事情——并且与我哲学上的偏好相匹配——感到沮丧。相反,我坐在那里阅读 Slashdot,喝咖啡,没有做出任何贡献。(顺便说一句,我认为这是许多 Slashdot 读者的常见经历,当他们读到别人的酷破解时,会感到一丝嫉妒和挑战。我认为这解释了那里持续的背景噪音,嘲笑和质疑为什么有人会想这样做。)

在接下来的几周里,我尽可能地收集了有关 Xbox 内部的信息;Xboxhacker.net 对这一点至关重要。这也是我遇到 Michael Steil 的地方,因为 Xbox Linux 项目刚开始。很快,我就能够确定我可以贡献的有趣项目,例如 Milksop 项目。再次通过这个,在 Surferdude 的帮助下,我能够组装出第一个能够启动并保持 Xbox 运行而不需要重置的干净 ROM。这后来成为了 crom 1MB Linux 和 cromwell,Xbox Linux 干净 ROM 的基础。在最初的破解和设计之后,我决定几乎完全致力于 Xbox Linux 的目标。

你能告诉我们你为什么破解 Xbox 吗?

为什么?每个人都有不同的理由,但对我来说,是我对微软无理取闹的反垄断行为的理解——否认一切,上诉一切,拖延一切,同时,在市场上创造和倾销(因为它们以低于成本的价格出售)数百万台仅适用于微软的 PC——Xbox。由于我们这里的欧洲和美国代表似乎并不关心(也许,就像最近在欧盟发生的那样,因为他们计划去微软工作并拿走他们的银色股份),能够成为揭露这个庞大垄断的邪恶计划的一部分,使用 GPL 和 Linux 的武器,将是一种荣誉。我知道人们闭上眼睛,想着他们的股票期权,但这对正派的人来说——当然,那里的大部分人都是这样——为这样一个怪物工作肯定很难。

我很幸运,在 2002 年得到了几个合同,让我能够全年专注于将第一个 Linux 内核放入 crom,并将 Cromwell 提升到能够控制盒子的主要外围设备,并从 HDD 或 CD 启动 Linux。从那时起,我的 Project A 奖金份额(多亏了捐赠者 Michael Robertson)将允许我继续全职工作,至少在接下来的几个月里。

你有什么建议想要分享吗?

我的最后想法是鼓励人们,尤其是年轻人,在遇到自己感兴趣的事情时,要听从自己的大脑。不要害怕去挖掘和尝试了解那些吸引你注意的事物。当你渴望理解某件事时,那种渴望,是你大脑告诉你,它认为这些知识将来可能有用。如果你足够听从它,你就有很大机会在正确的时间知道正确的事情,从而产生一些小的影响。

那个单一位置可以预先加载一个后续跳转指令,回到任何使用之前讨论的 jam 表代码的用户代码。Xbox 破解社区团结起来,进行了英勇的努力,三天内破解了 Xbox 安全版本 1.1。Xecuter 的另一个同样英勇的努力也在相同的时间内破解了安全系统。

这个故事的第一条道德准则是,安全性的强弱取决于其最薄弱的环节。虽然对于 RSA 密码和 SHA-1 散列在数字签名方面的鲁棒性几乎没有疑问,但这些并不是安全系统的唯一元素。用于扩展安全引导 ROM 信任域到 FLASH ROM 的 TEA 密码存在缺陷,这允许黑客绕过强大的数字签名算法。这引出了我们的第二条道德准则:复杂性滋生弱点。复杂的系统难以设计、测试和分析。Xbox 的 1.1 版本安全可能是在时间紧迫的情况下实施的,因此没有足够的时间分析系统中的弱点。要么是这样,要么是微软知道 TEA 的弱点,并故意将这个后门设计进系统中以减轻将 FBL 锁定在硅中的风险。微软故意包含这个后门似乎相当可疑,因为修改 MCPX 硅片是一个非常昂贵的提议(尽管最终费用落在了英伟达的账上)。另一方面,复杂性难以避免。我在麻省理工学院的导师汤姆·奈特曾告诉我:“在这个世界上有两种设计:那些有用的,以及那些你可以形式化证明是正确的。”在某种程度上,确保现实世界系统安全性的唯一方法就是使其细节公开(不要通过神秘来保证安全!)并从所有角度对系统进行分析。从某种意义上说,由于黑客社区的帮助,对 Xbox 安全性的彻底分析正在进行,而微软无需承担任何费用。

即使微软在秘密引导 ROM 中使用了更强的散列函数,仍然有许多针对 Xbox 的有效攻击尚未尝试。可以通过对 HyperTransport 总线进行中间人攻击(见第八章),通过精心定时脉冲过载信号来实现。这种攻击的实现相当简单,因为每个 HyperTransport 总线轨迹都有从主板组件侧可见的测试点。一个完整的硬件解决方案将涉及一个带有“弹跳针”床钉式测试连接器的板上的 FPGA。这个板可以压在这些测试点上而无需焊接。另一种攻击,由 Adi Shamir 在 CHES 会议上建议,是在 CPU 时钟或电源供应中引入定时故障,以干扰跳转目标地址的计算。这种攻击已经在加密智能卡的处理器上成功应用。同样,这种攻击可以相当容易且便宜地作为用户可安装的模块实现。(记住,如果目标是一次性破坏安全以恢复,例如,一个秘密密钥或一段关键代码,黑客有更广泛的攻击范围。)

后门威胁

正如本章所证明的,寻找后门是一种攻击加密保护硬件的实际方法。在 Xbox 中找到后门的高成功率部分是因为 Xbox 是第一个尝试对 PC 进行加密保护的重要尝试。尽管从 Xbox 的经验中吸取了教训,但未来的安全 PC 实现仍然面临硬件安全弱点的风险,因为 PC 的传统是一个开放且未受保护的硬件架构。

个人简介:Franz Lehner

Franz Lehner,29 岁,住在奥地利,与他的女朋友一起生活。他学习了 5 年的电气工程。现在,他在运营 ISP 的同时编写“自动化解决方案”。在他的业余时间,他寻找有趣且具有教育意义的工程项目。

在找到 bunnie 的 Xbox 破解文档后,他在 sourceforge.net 上遇到了 Xbox-Linux 团队。他加入了 Xbox-Linux 项目,以学习团队编程、Linux 内核破解和调试以及加密系统。他还加入了 Xbox-Linux 项目,以更好地理解相关系统,例如 Palladium。

PC 硬件复杂且脆弱,由于这种脆弱性,从其中构建信任链是困难的。从根本上讲,PC 中的每个组件都是设计为对其物理环境“信任”的。任何商业集成电路组件的规格都明确指出,该 IC 保证在一定的温度、电压、频率和其他条件下运行。如果违反了这些最大额定值,则设备的行为将是“未定义的”,所有赌注都无效。大多数芯片工程师甚至不考虑尝试使他们的电路从超出范围的条件下优雅地恢复,因为这已经足够困难,要使芯片在指定的操作条件下工作。此外,大多数消费类应用对成本非常敏感,构建健壮的容错措施的开销导致产品不具备价格竞争力。

因此,芯片通常没有内部错误检查。如果由于某种原因,算术逻辑单元(ALU,CPU 的计算“大脑”)错误地加上了两个数字,问题将只会以症状的形式表现出来;你只能观察到这种错误的效应,有时是在错误事件发生很长时间之后。人们可以将利用超出范围条件引起的故障的攻击视为软件世界中缓冲区溢出的类比。

PC 架构的另一个问题是处理器对其代码环境过于信任。奔腾处理器架构在硬件上没有提供区分不安全或安全代码的机制。如果指令指针偶然通过一个错误或诱导的故障进入了一个不安全的代码段,处理器将愉快地执行这段代码。

注意

图片

基于硬件安全级别的代码隔离 是一种不同于沙箱的技术。沙箱技术无法为需要从或与秘密或受保护代码或数据进行方向指引或交互的用户程序提供充分的解决方案。最近, 一些新的处理器架构被提出,可以通过使用嵌入某种安全审计日志的数据标签来解决这一问题。⁵

另一个后门来源是每个复杂芯片中存在的设计缺陷。将带有大量已知缺陷的芯片发货是一种常见做法,这些缺陷也被称为错误。例如,1991 年首次发布的 Intel i860 XP 处理器(不要与最近发布的用于 Pentium4 处理器的 i860 芯片组混淆)附带的错误列表与处理器数据表的大小相当。另一个更贴近的例子是 nVidia MCPX 地址空间解码器中的错误,这使得 MIST 提前取消映射攻击成为可能。大多数这些错误都有简单的解决方案,或者在正常条件下对芯片的功能影响很小。然而,一些错误,如涉及缓存一致性、地址解码和内存管理的错误,可能导致重大的软件安全漏洞。

在 Xbox 的情况下,硬件后门的商业影响可能很小。也许微软会损失一些游戏销售收入的微小部分,但与微软在硬件销售上的损失相比,盗版造成的损失微不足道。此外,Xbox 只是一个游戏机——奶奶的银行账户并没有因为 Xbox 的安全漏洞而被耗尽,或者信用卡号码被盗。然而,对于受信任的 PC 来说,风险将不仅仅是游戏收入。除非受信任的 PC 架构与旧 PC 有根本性的改变,否则人们将盲目地将财务秘密和个人数据安全托付给不可信的硬件。

就像生活中的大多数事情一样,第一步是教育。我们了解的硬件安全越多,即使这涉及到在游戏机上摸索,我们的安全系统明天就会越好。现在,继续上课吧……


¹ 来自 Andy Green 在第 19 届混沌通信大会关于 Xbox 安全黑客攻击的演讲。

² 来自《询问者》杂志的文章,http://www.theinquirer.net/?article=4735

³ 来自 Andy Green 在第 19 届混沌通信大会关于 Xbox 安全黑客攻击的演讲。

⁴ 来自 www.xboxhacker.net 的帖子,在 Xbox Hacker BBS 下的 Xbox Hacking (TECHNICAL) -> BIOS/Flash ROM/Firmware -> Xbox Linux Team 的新闻,MS“搞砸了”,内部结构暴露。

http://www.ai.mit.edu/projects/aries/Documents/Memos/ARIES-15.pdf. “通过动态确保安全信息流的最低可信计算基础,”由 Tom Knight 和 Jeremy Brown 撰写。

第十章:-

更多硬件项目

由于 Xbox 与 PC 架构的相似性,黑客在构建硬件项目时可以借用 PC 世界的科技和专业知识。因此,PC 硬件、显示器、电缆和外设都已被适配以与 Xbox 一起工作。本章介绍了由世界各地黑客发现、记录和实现的这些硬件项目。

LPC 接口

LPC(低引脚数)接口的 1.0 版本由英特尔在 1997 年定义。LPC 接口是一个无需支付版税的总线,旨在使没有明确 ISA 或 X-bus(用于内存或通用 I/O 设备的类似 ISA 扩展总线)能力的系统得以实现。LPC 接口的需求源于标准 PC 中存在的大量低比特率、高引脚数、接口不兼容的设备和总线,例如软盘、键盘、鼠标、串行、IrDA、并行、ISA 和引导 ROM 接口。所有这些设备消耗的总带宽很小,但支持所有这些设备所需的信号数量很容易超过 PCI 或 AGP 总线等高带宽总线所需的信号数量。更糟糕的是,并非所有计算机配置都需要所有这些传统 I/O 设备,而浪费的引脚和功能只是吞噬着利润。芯片封装上引脚的成本相对于支持这些简单接口所需的硅成本是高昂的。(一个经验法则是,一个封装引脚的成本是一分,而在 0.13µ 硅中,大约有十万个门——足以实现一个小型处理器——在硅面积上的成本是一分,假设设计不是受焊盘限制的¹。)

LPC 接口通过一个单一、低引脚数的总线(七根必需引脚,而 ISA 总线需要 36 根引脚)来解决这个问题,该总线以高速运行。所有传统的 I/O 和扩展功能都被映射到这个高带宽总线上,使得系统设计者能够创建所谓的“超级 I/O”芯片,这些芯片反过来又使得南桥芯片具有更低的引脚数。此外,将功能在超级 I/O 芯片和南桥芯片之间分离,使得设计者可以选择提供给定应用最佳功能集的超级 I/O 和南桥芯片组合。

LPC 物理接口相当简单。该接口是一个 4 位双向总线,以 33 MHz 的时钟速率运行。接口还有两个“边带”信号:一个帧信号,指示 LPC 总线周期的开始和结束,以及一个复位信号,强制所有 LPC 外围设备进入已知状态以进行初始化。此外,还有一些可选信号为 LPC 接口提供 DMA 和中断功能,以及更复杂 I/O 设备的电源管理。(有关 LPC 总线和其协议的更多信息,请参阅英特尔低引脚数(LPC)接口规范,版本 1.1。规范可以在英特尔公司网站上找到:http://www.intel.com/design/chipsets/industry/lpc.htm。)

Xbox 上的 LPC 接口

Xbox 主板集成了 LPC 接口。在这种情况下,LPC 接口用于实现一个调试和测试总线。可以通过这个 LPC 接口连接键盘和鼠标,以及用于诊断目的的备用引导 ROM。当 Xbox 上的 FLASH ROM 不可用时,会激活 LPC 接口来加载备用引导代码。可以通过强制将 FLASH ROM 数据总线上的最低数据位(D0)设置为零伏特来模拟缺少 FLASH ROM 设备。

许多人推测,由于 LPC 接口提供的备用引导 ROM 功能,它是 Xbox 生产线的一个关键部分。可以通过 LPC 接口对完全组装好的 Xbox 进行配置,以运行一个全面的自我测试程序。将 CPU 作为快速测试控制器使用,可以在工厂地板上快速有效地隔离有缺陷的单元,而无需昂贵的测试设备。

对于黑客来说,LPC 接口提供的备用引导 ROM 功能是一个将代码引入 Xbox 的理想机制。任何人都可以创建适用于 Xbox 的有效 LPC 引导 ROM 映像,因为 Xbox 的加密安全引导程序现在已经被完全理解。实际上,一些 Xbox 备用引导 ROM 设备的供应商利用了 Xbox 主板 LPC 接口引脚排列几何形状的规律性,创建了无需焊接即可安装的 ROM 设备。这些设备使用一套弹簧加载的“跳针”,类似于在生产过程中用于 Xbox 测试的跳针,只需施加压力即可接触 LPC 接口。(Xbox 上实现的 LPC 总线的引脚排列可以在附录 F,“Xbox 硬件参考”中找到。)

使用 LPC 接口

LPC 接口是行业标准的事实对 Xbox 硬件黑客来说非常方便。首先,有大量的 LPC 兼容接口设备,从 Super-I/O 芯片到内置 LPC 接口的固件 ROM。其次,LPC 接口作为通用 PC 的诊断和便利总线被广泛接受,有助于减轻使用 LPC 接口和销售 LPC 接口设备的法律风险。LPC 接口的固件 ROM 可以销售,无需包含任何 Xbox 特定的内容,因为最终用户可以使用简单的、便宜的适配器轻松重新编程他们的 PC 上的 LPC 总线设备。对 LPC 固件设备合法性的进一步帮助是,Xbox 的 LPC 接口引脚排列几乎与 Intel 为通用 PC 推荐的一致。因此,为 Xbox 销售的 LPC 固件设备与为标准 PC 销售的 LPC 固件设备非常相似。

第一款 LPC 引导 ROM 设备是由 Andy Green 开发的。该项目被称为“Cheapmod”,它是一个 SST 49LF020 设备(256 kByte FLASH ROM,带有集成 LPC 接口),通过插座连接到 LPC 兼容的接口。根据 Andy 的 Cheapmod 网页,“http://warmcat.com/milksop/cheapmod.html”,“如果你能以 2.50 美元的价格买到 SST 49LF020,你就可以用 4 美元的价格构建一个替代 BIOS。”这个设备可以使用他的“CheapLPC”编程器(http://warmcat.com/milksop/cheapLPC.html)进行编程,这是一个令人愉快的简单 PC 并行端口设备,可以(缓慢地)与 LPC 设备通信并重新编程。许多商业可用的替代固件设备都是基于或受其设计启发的,包括 Xodus/Matrix 设计。Xodus/Matrix 是 Andy 原始设计的特别有趣的变体,因为它是最先实现完全无焊点安装程序的 Xbox 替代固件设备。这为那些不愿意在 Xbox 中焊接线缆的软件黑客打开了 Xbox 破解的世界。(Xodus/Matrix 的照片见图 10-1。)Xodus/Matrix 设备没有预先编程任何代码;用户必须提供替代固件映像。

在选择用于 Xbox 的具有 LPC 接口的 FLASH ROM 芯片时,有一些重要的功能考虑因素。其中最显著的是,原生 Xbox 架构为引导 ROM 分配了 16 MB 的空间。如果物理引导 ROM 的大小小于 16 MB,则引导 ROM 的内容会被别名化以填充整个 16 MB 空间。这为 Xbox 设计者提供了更多的灵活性,在选择 ROM 芯片大小时不会对使用底部和顶部相对寻址的例程造成问题。

图片

图 10-1:无焊点 Xodus/Matrix 替代固件设备,展示了弹簧加载的“跳针”触点,这些触点允许无焊点连接到 Xbox 主板上 LPC 接口。

让我们通过一个例子使底地址和顶地址相对寻址的概念更加具体。Xbox 中 16 MB 引导 ROM 区域的地址范围从 0xFF00.0000 到 0xFFFF.FFFF。在 Xbox 上使用底地址相对寻址的程序将使用 0xFF00.0000 + offset(底地址加偏移量)来计算地址,而使用顶地址相对寻址的程序将使用 0xFFFF.FFFF – offset(顶地址减去偏移量)。假设在 Xbox 中安装了一个 1 MB 的引导 ROM。这意味着处理器将看到 16 个相同的 1 MB ROM 副本,均匀分布在 16 MB ROM 地址空间中。换句话说,引导内存的内容对于每个地址 A + 0xFF00.0000 + n * 0x0010.0000 都是相同的,其中 n = 0 到 15,A = 0 到 0x000F.FFFF。因此,程序员可以在较小的 1 MB 引导 ROM 中使用顶地址和底地址相对寻址来打包数据,而无需更改任何代码:有效的 ROM 映像在顶地址和底地址相对基址附近都出现。现在,假设微软决定节省成本并将 1 MB 的引导 ROM 缩小到 256 kB 的引导 ROM。现在,处理器将看到 64 个相同的 256 kB 引导 ROM 副本分布在 16 MB ROM 地址空间中,并且所有使用底地址和顶地址相对寻址的旧代码仍然有效。值得注意的是,Xbox 中的 CPU 在电源开启时从内存顶部 16 字节处的地址(其“复位向量”)开始执行代码,而硬件初始化例程被集成到 Xbox 芯片组中,这些例程使用位于 16 MB FLASH ROM 空间底部的 ROM 位置。因此,Xbox 硬件需要一个 16 MB 大小的 LPC ROM 实现,或者在整个 FLASH ROM 地址空间中别名一个较小的 ROM 的内容。(SST 49LF020 是少数几个在整个地址空间中别名 ROM 内容的 LPC FLASH ROM 之一。可以说,这个特性实际上是一个错误:通过忽略高地址位并在整个地址空间中别名 ROM 的内容,这个芯片占用了本可以分配给其他功能的空间。因此,SST 已经发布了该部件的更新“A-step”版本,称为 49LF020A,它不会在内存中别名 ROM 的内容。同样,A-step 硅片不能作为 Xbox 的备用固件设备使用。)

备用固件设备与 Modchips

一个替代固件设备是一个硬件模块,它提供了一种在 Xbox 硬件上运行用户指定固件的方法。替代固件设备与所谓的“modchip”不同,因为替代固件设备是一个空白设备,没有固有的绕过版权控制机制的能力。例如,一个空白 LPC 接口 ROM 设备就是一个替代固件设备:如果你想的话,可以在上面烧录一份美国权利法案。任何用户安装的空白 FLASH ROM 也是替代固件设备。另一方面,俗语中的 modchip 暗示的是一个专门为播放游戏备份和修改或删除 DRM(数字版权管理)策略限制而设计的设备。因此,术语 modchip 包括某些已经编程了允许修改 DRM 策略的代码的引导 ROM 设备,以及像“修补器”这样的设备,这些设备没有 ROM,通过在固件加载执行时动态修补几个关键的 Xbox 固件位置来运行。

其他 64 MB 的 SDRAM

一个敏锐的观察者会注意到,Xbox 主板上顶部缺失了两块芯片,而且这些缺失的芯片位置看起来可疑地像目前被内存芯片占据的位置。翻转主板,会发现还有两个未被占用的芯片焊盘。这些空焊盘实际上是为内存芯片准备的。这些空白位置的位置在图 10-2 中显示。

图片

图 10-2:Xbox 主板上的未填充内存焊盘。

基准点

观察 Xbox 主板上的一个未填充的内存位置。这些未填充的芯片焊盘内环绕着一个银色圆点的深色圆环被称为基准点。基准点图案被电路板组装机用作对准大量多针芯片的参考点。它们被设计成易于被板组装机中使用的机器视觉系统识别。特殊形状的基准点也可以用来实现电路板方向和类型的自动识别。

下一个合乎逻辑的问题当然是,“你能通过将合适的内存芯片焊接在 Xbox 主板上的空槽中,将 Xbox 的内存大小加倍到 128 MB 吗?”实际上答案是肯定的,但为了使芯片组能够识别和使用额外的内存,需要修改 Xbox 的初始化代码。此外,额外的内存对图形或游戏性能没有帮助。Xbox 游戏没有设计为利用额外的内存,因此额外的内存通常会被闲置。额外的内存位置主要是为了制造专为游戏开发者制造的专用游戏机。游戏开发者可以使用额外的内存来简化游戏过渡到 Xbox 相对紧凑的内存占用,以及保持调试、性能监控和测试工具在内存中,这些工具不是游戏图像的一部分。请注意,额外的内存可以被自制软件利用,但获取和安装内存芯片的难度使得 Xbox 内存扩展更像是一个有趣的焊接实践练习,而不是一个实用的修改。

Xbox VGA

对于 Xbox VGA 适配器的作用有一些混淆。许多 Xbox VGA 适配器实际上是电视到 VGA 转换器。换句话说,它们将 Xbox 的低分辨率电视输出通过行倍增器运行,以产生低质量的 VGA 显示。真正的 Xbox VGA 适配器实际上配置 Xbox 以输出更高分辨率的视频输出,在 VGA 显示器上产生优于电视的显示质量。

VGA 适配器通过 AVIP(音频视频 I/O 端口)连接器中的指定引脚配置 Xbox 图形模式。这种方法的主要问题是游戏必须特别编写以支持这种更高分辨率的模式。因此,一些游戏可能无法与真正的 Xbox VGA 适配器一起工作,但幸运的是,回到电视分辨率就像插入标准电视适配器电缆一样简单。

原始的 Xbox-VGA 适配器是由 Ken Gasper 开发的。他在自己的网站上出售该适配器版本,网址为 http://xboxvga.xemulation.com。目前,他提供的是“裸板”形式的 Xbox-VGA 适配器以及完全组装的形式。如果你在寻找一个既实用又能提高你的电路组装技能的有趣硬件破解项目,那么购买他的裸板并尝试自己组装适配器可能值得。

附录 F 包含 Xbox AVIP 的引脚图。

存储替换

Xbox 包含 DVD-ROM 驱动器和硬盘驱动器,它们都使用 PC 标准的 IDE 接口与 Xbox 主板通信。DVD-ROM 驱动器还有一个专有的电源和 DVD 托盘状态连接器。对于 Xbox 来说,一种流行且有时必要的破解活动是替换这些驱动器。

用户会替换或调整 DVD-ROM,因为原生的 Xbox DVD-ROM 驱动器无法读取 CD-R 和许多类型的 CD-RW 媒体。这对那些第一次尝试安装 Xbox-Linux 或试图将 CD-R 收藏中的音乐复制到 Xbox 硬盘的用户来说尤其令人烦恼。

替换和调整 Xbox DVD-ROM 驱动器的方法有很多。一些 Xbox DVD-ROM 驱动器型号可以通过调整激光强度来提高读取 CD-R 和 CD-RW 媒体的能力。这是一个可能存在风险的操作,因为不正确地调整激光的功率输出可能会永久损坏您的 DVD-ROM 驱动器,但许多黑客报告说,正确执行程序可以带来更好的媒体兼容性。我建议进行网络搜索以获取最新的新闻和技术,因为 Xbox 中使用的 DVD-ROM 驱动器的型号和风格经常变化。此外,Xbox DVD-ROM 驱动器可以直接用标准的 PC DVD-ROM 替换。这种方法的问题有两个。首先,由于 Xbox 游戏盘内置了物理安全措施,普通的 PC DVD-ROM 驱动器无法读取原始 Xbox 游戏盘。其次,PC DVD-ROM 驱动器需要适配 Xbox 主板上定制的 DVD 电源和托盘状态连接器。

最简单但最丑陋的方法是安装一个标准的 PC DVD-ROM 驱动器,但通过专有电缆将 Xbox DVD-ROM 驱动器连接起来。在这种方法中,灰色 IDE 电缆连接到标准的 PC DVD-ROM 驱动器(通过驱动器上的跳线配置设置为从模式),并使用标准的电源分配电缆从硬盘的电源连接器获取电源。Xbox DVD-ROM 驱动器保持原位,但其 IDE 连接器为空,并安装了专有的黄色电源和托盘状态电缆。Xbox DVD-ROM 驱动器的作用是作为备用驱动器,用于在媒体更换事件中手动将 DVD 驱动器托盘的状态传递给 Xbox。换句话说,用户需要在媒体更换事件期间手动使用 Xbox DVD-ROM 的托盘复制标准 PC DVD-ROM 托盘的状态。

在这种配置下操作 Xbox 的确切步骤取决于特定的 PC DVD-ROM 驱动器型号和 Xbox 硬件配置的细微差别,因此,我再次建议进行网络搜索以获取最新信息。还有一些网站描述了如何将选定的 PC DVD-ROM 驱动器型号适配到 Xbox 专有的托盘状态和电源连接器。这样的项目对于基本熟悉焊接和螺丝刀的黑客来说是一个很好的中级项目。对标准 DVD-ROM 驱动器进行的修改允许准确地将标准驱动器的 DVD 托盘状态传输到 Xbox。然而,除非 Xbox 已经通过额外的硬件修改绕过了 DVD ROM 驱动器的安全检查,否则这些修改不允许您播放原始游戏。即使没有玩游戏的能力,这仍然是一种有用的技术,可以用于排查 Xbox-Linux 安装问题,并增强 Xbox 复制您的 CD 收藏或观看 DVD 的能力。(注意,将 IDE 连接器恢复到 Xbox DVD-ROM 驱动器将恢复 Xbox 的原有游戏功能。)

Xbox 硬盘有时也需要更换。对于 Xbox 的严肃软件开发者来说,在 Xbox 中安装一个容量更大的硬盘是有利的,而且硬盘损坏的用户也希望更换他们的硬盘。不幸的是,OEM Xbox 硬盘包含了受版权保护的微软程序。Xbox 硬盘还受到固件锁定的保护,这使得安装具有原始游戏功能的全新硬盘变得相当具有挑战性,尤其是在法律问题上。固件锁定对每个硬盘都是独特的,这阻止了您使用二手 Xbox 硬盘来更换硬盘。然而,如果您只想运行 Xbox-Linux 或其他自制程序,而不关心玩游戏,那么在 Xbox 中安装新硬盘就像在任意 PC 中安装硬盘一样简单且合法。

¹芯片上的电路通常被金属方框(“焊盘”)包围,这些焊盘连接到芯片封装上的引脚。当焊盘环所需的面积超过芯片内部电路所需的面积时,芯片被认为是焊盘限制的。如果芯片是焊盘限制的,那么多余引脚的成本会更高。

第十一章

为 Xbox 开发软件

虽然本书的重点是教育读者硬件黑客和安全知识,但 Xbox 黑客的一个最终目标是运行自制软件。本章致力于描述在本书写作时正在进行的一些 Xbox 自制软件项目。

Xbox-Linux

Xbox-Linux 项目的目标是创建一个用户友好且合法的 GNU/Linux 及其应用程序的移植到 Xbox 硬件平台。多亏了全球黑客的奉献和贡献,Xbox-Linux 项目在实现其目标方面取得了巨大的成功。核心 Xbox-Linux 项目团队的图片可以在图 11-1 中看到,本章和第九章的侧边栏包含了对 Xbox-Linux 项目成员的访谈。(Xbox-Linux 项目的首页是 http://xbox-linux.sourceforge.net。)值得注意的是,Xbox-Linux 项目及其主要黑客并不是反微软的。他们是支持“自由探索”的,而不是幼稚的微软仇恨者;他们有一个涉及保护思想与言论自由议程,这些自由正是将技术带到今天的位置。

Xbox-Linux 不是 Xbox 的终极软件项目;相反,它只是 Xbox 软件黑客的起点。将熟悉的 GNU/Linux 开发环境移植到 Xbox 使得更多的软件黑客能够加入 Xbox 黑客项目。有了 GNU/Linux,Xbox 可以运行各种应用软件,从免费开源视频游戏到文字处理应用,再到用于构建类似 Beowulf 风格的计算机集群的集群软件。

安装 Xbox-Linux

目前,为了运行 Xbox-Linux,您需要使用备用固件设备安装 GNU/Linux 引导 ROM。这需要打开 Xbox。第十章描述了通过 LPC 接口为 Xbox 构建和安装备用固件设备的方法。现在有几家供应商提供易于安装的 LPC 接口备用固件设备。值得注意的是,Xodus/Matrix 设备是市场上第一个具有完全无焊接安装程序的备用固件设备。您需要安装 Xodus/Matrix 设备所需的所有工具在第一章“取消保修”中都有描述,Xodus/Matrix 设备本身也附带了一些易于遵循的说明,说明如何编程和使用备用固件设备。

个人简介:迈克尔·斯蒂尔

迈克尔,你能告诉我们更多关于你自己的信息吗?

1979 年出生于德国埃尔丁,我在慕尼黑工业大学学习计算机科学。我在第一学期教授汇编语言,并计划明年获得硕士学位。我从十岁开始就与电脑打交道;我的第一台电脑是 Commodore 64,很快又有了 386 PC。我的主要兴趣一直是硬件和操作系统,我对硬件架构的多样性(Commodore、PC、Amiga、Macintosh、……)以及流行的嵌入式系统,如游戏机特别着迷。(你知道吗,“SEGA CD”有三个 CPU,一个 Z80 和两个 M68000?)这就是为什么我购买了许多用于实验的视频游戏系统,例如任天堂 Super NES、SEGA Genesis 和任天堂 Game Boy。我还研究了 SEGA Dreamcast 的 Linux,但我从未见过适用于索尼 PlayStation 2 的 Linux,因为整个套件对我来说实在太贵了,无论是用于实验还是实际使用。

你是如何开始 Xbox 破解,特别是 Xbox-Linux 项目的?

2002 年 4 月 30 日,我购买了一台 Xbox,确信它将是一款非常适合黑客攻击的玩具,并且非常适合运行 Linux。在研究了系统软件一两个小时(我没有买游戏)之后,我拆开了 Xbox。寻找有关破解信息最初让我失望:我找不到比如何将硬盘连接到 PC 更多的信息,还有一个几乎没有任何信息的 Xbox Linux 网站。因此,我决定创建自己的 Xbox 破解网站,并上传我通过将硬盘连接到 PC 获得的信息。

Xboxhacker.net 和原始的 Xbox Linux 邮件列表都非常有帮助;它们都吸引了优秀的黑客并发布了有价值的信息。对 Xbox Linux 项目的原始基础设施不满意,我决定于 5 月 23 日迁移到 Sourceforge。现在每个贡献者都可以在不通过维护者的情况下向网站添加任何内容。但当时,一切仍然相当理论化:在没有 modchips 的情况下,我们无法做更多的事情,只能编写“理论上应该可以工作”的代码。Andy Green 的 Filtror 加速了一切:这个 mod 使完成引导加载程序成为可能,并在 Milosch Meriac 的帮助下,在非常短的时间内适应了 Linux 内核。

2002 年 6 月接近我的“匿名捐赠者”不仅使项目得到了更多的宣传,因此吸引了更多的贡献者,而且还使我结交了一位朋友:BioXX(OpenXbox)modchip 的创造者沃尔特·迈耶,他恰好就住在离我 20 公里远的地方。在其他方面,他帮助我很多,因为我并不是一个真正的焊接铁人。

由于 Linux 已经在 Xbox 上运行,2002 年 12 月,Xbox Linux 核心团队(Andy Green、Milosch Meriac、Franz Lehner 和我;不幸的是,Edgar Hucek 无法参加)在柏林的混沌计算机俱乐部大会上首次面对面会面。

我做所有事情的原始动机只是因为它很有趣,而且通过这样做我可以学到很多东西。我并不是因为想伤害微软才开始的——尽管如此,我同意微软通过不让用户在他们购买的硬件上使用他们想要的软件来伤害了他们的客户,这就是为什么 Xbox Linux 项目特别重要。

[我们]不是“反微软”或“微软仇恨者”。我们不喜欢他们的市场策略,所以我们有合理的理由反对他们。

关于 Xbox-Linux 的 20 万美元奖金,你还有什么想说的吗?

我认为这个奖项并没有吸引那些想要看到一些钱的人:现在距离截止日期已经过去一个月了,奖金还没有发放,而且还没有一个人问我什么时候能拿到钱。这个奖项吸引了媒体;我们得到了更多的宣传,这样我们就得到了更多的黑客。但没有人是因为钱而做的。所以我们不希望被认为是因为 Michael Robertson 的支付而做这项工作。一个很好的证据是我们即使在截止日期之后仍然非常活跃。

你能告诉我们更多关于你的“MIST X-Code 破解”吗?

在 bunnie 最初的破解之后不久,Andy 完全提取了 MCPX ROM,Steve、Paul 和我开始分析代码,我逆向工程了其中包含的 X-Code 解释器。在寻找可以用来逃离 X-Code 解释循环的漏洞时,我发现代码的一部分已经考虑到了我们的攻击。这是我最初的反汇编:

cmp     ebx, 80000880 ; ISA Bridge, MCPX disable?
jnz      short not_mcpx_disable
               ; BUG: too specific: bits 24 to 30
               ; undefined and ignored by PCI hardware!
and     ecx, not 2 ; clear bit 1 (MCPX ROM will be
                   ; turned off by setting bit 1)
not_mcpx_disable:
mov     eax, ebx
mov     dx, 0CF8h
out    dx, eax ; PCI configuration address
add     dl, 4
mov     eax, ecx
out    dx, eax ; PCI configuration data
jmp     short next_instruction

我之前一直在做“PCI 配置”工作,因此我知道攻击的测试过于具体:相似的代码会做同样的事情,但它们会通过测试。所以微软的开发者有一个好主意,但实现是错误的,因此以这种方式告诉我们他们的想法!

我把我的想法发送给了 Andy、Steve 和 Paul,他们很快就验证了 0x88000880 和 0x80000880 一样可以用来关闭 MCPX ROM 并退出解释器,通过将解释器代码映射出内存!

注意

图片

微软可以并且将会修改他们的主板布局和安全系统,所以在购买之前,请与您的设备供应商确认与您特定系统硬件的兼容性。如果您想使用标准键盘和鼠标与 Xbox 一起使用,您将需要一个 Xbox 游戏端口到 USB 转换线,这可以通过后市场零售商如 Lik-Sang(http://www.lik-sang.com)购买,或者您可以通过遵循第四章中的逐步指南自己制作一个。

在安装您的备用固件设备之前,您需要用启动 GNU/Linux 内核的 ROM 镜像对其进行编程。“Cromwell”是一个开源的、干净的(即,不包含任何微软代码)Xbox 引导 ROM,能够引导 GNU/Linux。值得注意的是,Cromwell 源代码和二进制镜像中包含的信息不能用于绕过 Xbox 中内置的任何原生版权控制机制。换句话说,很难辩称 Cromwell 是任何类型的版权控制绕过工具。(Cromwell 可以从 Sourceforge.net 服务器上的 Xbox-Linux 网站 http://xbox-linux.sourceforge.net 下载。)

在将 Cromwell ROM 烧录到您的备用固件设备并在 Xbox 中安装该设备后,您需要将一个可以从 Xbox-Linux 网站(再次,http://xbox-linux.sourceforge.net)下载的 GNU/Linux 安装镜像烧录到 CD/RW 媒体上。这个安装镜像是一个相当大的(100+ MB)ISO 镜像,使用 bzip2 进行压缩,并包含将用户友好的 GNU/Linux 发行版在 Xbox 上安装和运行所需的所有软件、接口和工具。在烧录这个 ISO 镜像时,您必须在 CD 刻录软件中使用烧录镜像选项。不要将 ISO 镜像作为一个单独的大文件复制到 CD 上。(ISO 镜像是一个 CD 的原始位模式,因此 ISO 镜像已经包含了一个完整的文件系统描述。将 ISO 镜像作为常规文件而不是镜像来烧录,会将 ISO 镜像封装在一个新的文件系统中,因此 ISO 镜像看起来就像一个“位袋”而不是包含文件的文件系统。)

您可能还需要一个带有 Xbox-Linux 引导程序的第二个磁盘。这个引导程序是一个较小的 ISO 镜像,应该可以从您下载主要 GNU/Linux 安装镜像的同一地方获得。这个引导镜像允许您通过简单地将它放入 Xbox 中来启动 Linux 安装,就像开始一个游戏一样。(如果您更喜欢不处理单独的引导磁盘,您也可以使用第三方仪表板将这个磁盘的内容复制到硬盘上,并直接从硬盘引导 Xbox-Linux。)

烧录一个良好的 CD/RW 映像是安装 Xbox-Linux 过程中可能最棘手的部分。Xbox DVD-ROM 驱动器内部使用的激光不太适合读取可写 CD 媒体,因此 Xbox 对媒体类型、烧录器类型以及创建 CD 映像时使用的烧录器设置非常挑剔。此外,激光退化的具体细节因 Xbox 而异,取决于安装的驱动器型号。用户发现,很少的 Xbox 可以可靠地读取 CD-R 媒体,因此必须使用 CD/RW 媒体。此外,使用全新的空白 CD/RW 或已完全擦除的 CD/RW(与仅重置文件系统而不实际销毁先前写入的数据的快速擦除相比)以最慢的烧录器设置烧录 CD/RW 媒体会有所帮助。

在决定使用特定类型的 CD/RW 媒体之前,尝试使用常规 Xbox 仪表板的 WMA 抓取工具将您用音乐烧录的 CD/RW 的内容复制到硬盘上。如果这可以可靠且无错误地工作,那么您可能可以使用这种类型的 CD/RW 媒体来安装 Linux。(许多 Xbox-Linux 安装问题已被追踪到 CD/RW 驱动器读取数据的问题。)在撰写本文时,没有可用的 CD-ROM 媒体发行版。在 Xbox-Linux 社区中有些讨论是关于订购一套定制 CD-ROM 映像的,因为这可以解决用户所经历的大多数 CD/RW 问题。(此外,请注意,您可以在 Xbox 中安装一个兼容性更好的第三方 DVD-ROM 驱动器,它对可写 CD 格式有更好的兼容性,如前一章所述。)

注意

图片

请注意,Xbox-Linux 是一个活跃的项目,它 正在不断演变。在 Sourceforge Xbox-Linux 网站上可以找到安装 GNU/Linux 到 Xbox 的最新说明,并且这些说明在撰写本文时已被翻译成至少六种语言。如果您有兴趣为 Xbox-Linux 项目贡献您的才能,Sourceforge Xbox-Linux 网站上有一个待办项目列表,以及一些如何加入开发者邮件列表的说明。

“项目 B”

目前有一个正在进行中的项目,被称为“项目 B”,由 Xbox-Linux 开发者提出,旨在寻找一种无需任何硬件修改即可安装和启动 Xbox-Linux 的方法。项目 B 的名字来源于 Lindows 公司 CEO 迈克尔·罗伯逊提供的 20 万美元奖金的评选标准。项目 A 的奖金是 10 万美元,已经颁发给了第一个将 Linux 运行在 Xbox 上且进行硬件修改的团队。剩余的 10 万美元将颁发给完成项目 B 的个人或团队。奖金的不对称分配暗示了完成项目 B 的挑战。(更多关于项目 B 的详细信息可以在 Sourceforge Xbox-Linux 网站 http://xbox-linux.sourceforge.net/articles.php?aid=2002354043211 上找到。)

有多个团队正在追求项目 B 的策略。最概念上简单的方法是分解用于签署 Xbox 游戏光盘的 2048 位 RSA 密钥。这个方法正在由 OperationProjectX(http://sourceforge.net/projects/opx)通过分布式计算方法进行尝试。简单来说,如果 2048 位 RSA 密钥被分解以揭示微软的私钥,任何人都可以伪造微软的数字签名并创建 Xbox 的可启动游戏光盘,前提是微软从未从 Xbox 内核中移除从常规 CD 或 CD/RW 媒体加载程序的能力。值得注意的是,微软将游戏发行在双层 DVD-9 格式的光盘上,带有特殊的安全结构。微软可以将 Xbox 固件配置为仅从具有这种特定结构的光盘中启动,而不管数字签名检查。由于目前无法使用普通 DVD 刻录机刻录双层 DVD,因此要求使用安全的 DVD-9 媒体作为可执行文件的唯一来源,这将对通过互联网免费下载 Xbox-Linux 造成障碍。这种方法的其他问题是,通过暴力搜索成功分解 Xbox 私钥的机会非常非常小。(第七章“简明安全入门”中有一个关于“非常困难的问题”的侧边栏,试图传达这项任务的计算难度。)如果通过这种方法在合理的时间内成功恢复私钥,将大大降低人们对 RSA 算法的信心。(另一方面,如果你不买彩票,你就永远赢不了,而使用 CPU 的空闲周期运行免费的分布式分解客户端比 Powerball 彩票便宜得多。)

图片

图 11-1:在德国柏林举行的第 19 届年度混沌计算机大会上,Xbox-Linux 核心团队。在后面,迈克尔·斯蒂尔;在前排,从左到右:安迪·格林、米洛什·梅里亚克和弗朗茨·莱纳。(照片由格哈德·法费莱德提供。)*《黑客 Xbox:逆向工程入门》

另一种与破解 RSA-2048 位密钥相关的方法是修改现有的、已签名的 Xbox 可执行文件,使其以有用的方式修改,而不改变其加密散列值。这种建设性的散列冲突会使修改后的可执行文件在数字签名检查方面看起来与原始文件相同。Xbox 数字签名算法中使用的散列算法是 SHA-1。SHA-1 是一个 160 位的散列,没有公开已知的算法弱点;由于散列的来源是固定的,大约需要尝试 2¹⁶⁰种随机变化来发现冲突。作为旁注,你不能使用生日攻击将攻击的难度降低到 280 种随机变化,因为我们不是试图找到两个散列到相同任意值的消息。目标是生成一个特定的目标散列,或者可能是从所有已发布的 Xbox 游戏标题集中收集的非常有限的目标散列集中的一个。因此,这种方法也属于“非常困难的问题”类别。

Project B 的另一种方法是寻找 Xbox 软件中的安全漏洞,并利用这些漏洞来控制 CPU 的指令指针。为了了解这种方法如何有帮助,考虑以下例子:假设在某个游戏中发现了一个基于网络的缓冲区溢出漏洞,可能导致任意代码执行。运行在通过网络连接到 Xbox 的 PC 上的程序就可以利用这个漏洞向 Xbox 发送数据包,安装一个简单的 Xbox-Linux 引导加载程序。这个引导加载程序可能只是一个在 Xbox 硬盘或 DVD 光驱上指定位置运行代码的程序。任何 Xbox 可以接收数据的端口都可以成为这种攻击的途径,包括 USB 和网络端口,以及硬盘和 DVD-ROM 驱动器。损坏的存档游戏或文件结构可以被镜像到硬盘或 DVD-ROM 驱动器上,导致 Xbox 运行用户开发的代码。值得一提的是,微软在网络安全方面做得相当出色,所有的网络交互和存档游戏协议都使用了相当强大且经过充分测试的安全技术。此外,我在麻省理工学院关于 Xbox 的微软演示会上听说,所有游戏代码都经过缓冲区溢出检查器检查,并且微软对那些被发现故意在游戏代码中设置后门的开发者有合同上的补救措施。这表明 Xbox 代码库比典型的微软产品更安全,这使得它对黑客来说更具吸引力。(如果你对作为“Project B”一部分参与 Xbox 黑客攻击感兴趣,我鼓励你首先查看 Project B 奖规则网页:http://xbox-linux.sourceforge.net/articles.php?aid=20030023081956。)

最近,发现了一种缓冲区溢出漏洞,该漏洞存在于电子艺界(Electronic Arts)的“007: Agent Under Fire”游戏中保存游戏的方式。这个漏洞最早是由一个名叫“habibi_xbox”的黑客在 2003 年 3 月 29 日通过 XboxHacker.net BBS 上的帖子公布的。值得注意的是,这个漏洞在多款游戏中被发现,但“007: Agent Under Fire”是唯一在帖子中明确指出的游戏。该漏洞利用未检查的字符串运行一小段(几百字节)代码,插入一系列内核补丁。在设计这个黑客程序时,包含了各种措施,使其很难修改以执行除运行预期的 Xbox-Linux 目标之外的其他操作。例如,黑客程序修补了原始 Xbox RSA 公钥,该公钥用于验证数字签名,同时保留了未修补的数字签名检查算法。只有作为黑客程序一部分提供的 Xbox-Linux 引导加载程序,才使用相应的新私钥进行了适当的签名。其他黑客必须分解新的公钥才能使用这个黑客程序来运行其他可执行文件。此外,“007: Agent Under Fire”游戏本身对所有保存的游戏执行独立的数字签名检查,因此修改被黑保存游戏文件中的漏洞代码并不简单。黑客程序实施者将此类安全措施纳入程序是一个值得赞扬的决定,因为它有助于确保黑客程序不会直接用于如盗版等应用。实施保护微软利益的安全措施可能有助于使 Xbox-Linux 项目免受微软和美国司法部的愤怒。

个人简介:Milosch Meriac

你能告诉我们一些关于你自己的信息吗?

我的一般经历相当简单。我于 1976 年出生于捷克斯洛伐克。我的父母(我的母亲是教师,我的父亲是土木工程师)在冷战期间因为共产主义政权的镇压逃到了西德。我们大约三岁时到达德国。在德国幼儿园,我立即学会了德语。从这一点开始,事情变得非常简单——在我十岁时,经过几个月的抱怨后,我得到了我的第一台电脑。事情开始有了转机。

在高中毕业考试和一段在德国联邦国防军服役的奇特插曲之后,我开始学习控制论和计算机科学,但我在三年后决定辍学,并将长期目标集中在自己的公司上。在学习期间,我建立了一些有价值的商业联系,因此很容易在德国为各种公司作为自由职业者工作。我进行了一些逆向工程项目,开发了小型足迹的实时嵌入式 Linux 系统,进行了一些底层编程,如 Windows 系统的实时扩展,并为一家著名的德国公司开发了一种基于软件的硬盘保护系统。我现在和我的女朋友在柏林生活,我们在那里过得非常愉快。

你为什么黑客?

在编程经验更加丰富之后,我开始发现计算机世界的美丽和光鲜实体实际上是一幅脆弱的拼凑。

最初,黑客对我来说就像是一场游戏。你可以在自己的计算机系统中四处游走,每天都能发现新的代码和可能性。偶尔,人们可以通过尝试分析和规避应用作者的复制保护来向他们发起挑战。有时这就像下棋;有时则像是一场生死决斗。

一方面,我为自己知识的增长而兴奋,另一方面,对于一个 14 岁的孩子来说,绕过那些高薪的、神一般的硬核程序员的安保系统自然是一种极大的自我提升。在我上高中的时候,我在学校假期为一些当地公司编写编程工具和应用程序时遇到了一些真正的程序员——我感到失望:他们既不是神,也不是神一般的存在。

过了一段时间,我意识到编写一个酷炫的演示、黑客应用 X 或为 Y 找到一个小巧的漏洞并不能比在中国某处倒下一袋大米对世界产生更大的影响。因此,我开始更明智地选择我的领域——日常生活中的技术,如电话、计算机、网络和卫星。我发现,通过向普通用户解释技术或帮助公司保护他们的产品,一个人有能力改变事物。

今天,我意识到自己作为一名白帽黑客的力量。在当今生活中,每个人都会受到信息技术的影响:监控技术、数据挖掘、信息战、数字千年版权法、TCPA、数字版权管理、对版权和专利法的新解释如同雨后春笋般增长。就像我过去一样,我渴望窥探这些美丽和光鲜实体背后的秘密,并希望在他们找到我们之前找到漏洞和陷阱。

你能告诉我们你在 Xbox-Linux 项目中的经历吗?

我加入了 Xbox Linux 项目,并帮助内核运行起来,这很棘手,因为与个人电脑相比,Xbox 架构有一些陷阱和差异。我为微软的 Xbox 创建了早期的 Linux 发行版。这很重要,因为我们只有 1MB 的闪存可以用来存储完整的发行版和内核,硬盘还没有解锁。我还为 Andy Green 的 filtror 设备提供了控制台驱动程序,这样我们就能通过他的设备作为某种远程接口来查看内核启动信息,并使用 linux 控制台。这个发行版已经包括了网络驱动程序、声卡驱动程序、mp3 支持、telnet 服务器、web 服务器、NFS 支持以及广泛的 Linux 标准工具。这使得我们能够摆脱定制的硬件,并允许数百人加入项目,无论是作为代码贡献者还是作为测试人员。当时我们还没有屏幕输出,所以我向 Xbox Linux 内核添加了 framebuffer 接口,并做出了许多其他贡献。

贡献的开发者数量开始急剧增长。我们得到了来自世界各地的出色帮助,使得 Xbox Linux 成为可能。有些人保持匿名,因为他们害怕像美国 DMCA 这样的法律不确定性,而其他人则可以自由贡献。

您还有其他想分享的评论吗?

有些人可能会问,像我这样的成年人为什么还要摆弄这个 Xbox 玩具。每个人当然都有自己的原因;我的原因是为了提高我的技能,并更多地了解最新的技术。例如,微软的 Xbox 是 TCPA/Palladium 受保护计算机的前身,具有所有技术和社会影响。它是我研究更安全计算机系统、不强迫用户的好场所。

主要原因之一是我们的社区。与这些聪明的极客一起工作,无论是线上还是线下在酒吧里喝着美味的啤酒,都非常有趣,也是一种巨大的乐趣。我每天都对社区日益增长的力量感到惊讶。感谢所有使这一切成为可能的人!

展望未来,项目 B 的成功可能会预示着 Xbox 破解的新时代,或者 Xbox 破解的终结。尽管项目 B 的破解者通过试图保护 Microsoft 的利益来展示了他们的社会责任感和善意,但阻止那些不太谨慎的破解者逆向工程破解并最终以某种不太适合 Microsoft 的形式重现该技术是不可能的。最终结果可能是 Microsoft 对所有破解活动进行严厉打击,或者由于收入渠道被切断,就像世嘉在 Dreamcast 盗版丑闻中那样,Microsoft 完全退出视频游戏业务。或者,Microsoft 可以选择将更多资金投入到业务中,并发布一个重新设计的、包含已知安全漏洞修补和对策的全新游戏机。结果将严重取决于未来几个月的事件发展。然而,随着 Xbox 价格的大幅下降以及有关全新“缩小版”游戏机彻底重新设计的传言,似乎 Microsoft 的短期策略是集中精力抢占市场,而不是遏制合理使用或盗版。毕竟,每卖出一台 Playstation2 或 Gamecube 可能对 Microsoft 业务的负面影响,可能比将每个 Xbox 转换为运行 GNU/Linux,甚至转换为运行盗版游戏的影响还要大。

OpenXDK

已经为 Xbox 开发了许多有趣和有用的项目,例如 XboxMediaPlayer 和 MAME-X(Xbox 的多款街机仿真器),这些项目都是为原生 Xbox 游戏平台开发的。不幸的是,这些程序是使用未经授权的 Microsoft Xbox SDK(软件开发工具包)开发的。Microsoft 的 Xbox SDK 本应仅提供给经过批准的、有许可证的开发者。然而,在游戏机发布之前,SDK 就已经泄露,从那时起,许多人使用泄露的 Xbox SDK 来创建他们自己的 Xbox 程序。虽然专有的 Xbox SDK 使用方便且易于使用,但技术上使用它是非法的。原生 Xbox 平台缺乏合法的 SDK 使得吸引大量的开源开发者变得困难。

OpenXDK 项目旨在解决对 Xbox SDK 法律替代品的需求。OpenXDK 的既定目标是创建一个用于创建 Xbox 可执行文件(XBEs)的法律开发套件。OpenXDK 将允许用户创建原生 XBE 文件,这些文件在用适当的数字签名签名后,可以在纯 Xbox 上运行。由于这个适当的数字签名目前尚不清楚,这项工作是在预期未来会有一种能够与使用 OpenXDK 开发的程序互操作的法律技术的情况下进行的。

尽管具有实用性,OpenXDK 项目仍处于起步阶段,正在寻找开发者。更多关于 OpenXDK 项目的信息可以在 http://openxdk.sourceforge.net 找到。OpenXDK 的项目经理是 Dan Johnson(也被称为 SiliconIce,XboxHacker BBS 的创建者)和 Aaron Robinson(也被称为 caustik;caustik 还在领导 CXBX 可执行文件重连器和 CXBE Xbox 模拟器项目)。

第十二章:-

黑客注意事项

逆向工程和知识产权法有一些复杂的法律互动。一方面,创新应得到应有的回报。发明者或作者独家生产或销售其劳动成果的权利必须得到保护。另一方面,也需要一个自由和竞争的市场来保护创新并确保公平的市场。研究现有产品中体现的设计原则以及生产改进衍生产品的能力是竞争市场的重要组成部分。

本章概述了知识产权法,以及作为黑客你需要了解的一些重要内容。无知不是有效的辩护,对于那些忽视管理逆向工程和知识产权法律的人,法律规定了严重的处罚。一些知识产权侵权行为可能被定罪为重罪,并伴随高额罚款。

本章的大部分内容是由电子前沿基金会(Electronic Frontier Foundation)的高级律师李天(Lee Tien)撰写的。李天(以及刘约瑟夫)在我试图发表关于 Xbox 安全系统的研究成果期间担任我的法律顾问。第八章有一个名为“黑客的法律挑战”的边栏,描述了我与麻省理工学院(MIT)的斗争,以发表我的论文。

本章的内容旨在为黑客提供信息资源。如果你认为你可能处于法律上的不利地位,没有比联系律师并获得针对你具体情况的专业法律建议更好的替代方案了。

李天简介

李天是电子前沿基金会(Electronic Frontier Foundation)的高级律师,专长于言论自由法,包括与知识产权法和隐私法的交叉。加入 EFF 之前,李天是一位专注于《信息自由法》(FOIA)诉讼的独立执业律师。田先生在儿童性取向和信息科技、匿名、监控以及计算机软件的第一修正案地位方面发表了文章。李天在斯坦福大学获得了心理学学士学位,在那里他在《斯坦福日报》的记者工作中非常活跃。在塔科马新闻论坛(Tacoma News Tribune)担任一年新闻记者后,李天前往加州大学伯克利分校的 Boalt Hall 法学院学习。李天还在加州大学伯克利分校的法学与社会政策项目(Program in Jurisprudence and Social Policy)中进行了研究生学习。¹

电子前沿基金会

在我试图发表关于 Xbox 安全系统的论文期间,电子前沿基金会(EFF)为我提供了法律咨询。以下段落介绍了 EFF 的工作内容以及他们是谁。

想象一个技术能够让我们所有人都能与朋友、陌生人以及未来一代分享知识、想法、思考、幽默、音乐、文字和艺术的世界。

那个世界就在这里,现在,是由电子网络——互联网——的力量使我们所有人连接在一起。未来技术的发展将使我们能够以更强大的方式获取信息和与他人交流。

但全球的政府和商业利益正在试图阻止我们通过新技术自由交流,就像在中世纪,那些掌握权力的人控制着书籍的生产和分配——甚至焚烧他们不希望人们阅读的书籍。但只有通过为我们的言论自由权利而战——无论媒介是什么——书籍、电话还是电脑——我们才能保护和提升人类状况。

电子前沿基金会(EFF)的成立是为了捍卫我们使用新技术(如互联网和万维网)来思考、发言和分享我们的想法、思想和需求的权利。EFF 是第一个识别对我们基本在线权利的威胁并代表数字时代自由表达发声的组织。

基于旧金山,EFF 是一个由捐赠者支持的会员组织,致力于保护我们的基本权利,无论技术如何;教育媒体、政策制定者和公众关于与技术相关的公民自由问题;并作为这些自由的捍卫者。在我们的各种活动中,EFF 反对错误的立法,发起并捍卫保护个人权利的法庭案件,发起全球公共运动,提出前沿的提案和论文,举办频繁的教育活动,定期与媒体互动,并在世界上链接最多的网站之一发布全面的数字公民自由信息档案:http://www.eff.org。²

¹ 来自 EFF 网站,http://www.eff.org/homes/lee_tien.html

² 来自 EFF 网站,http://www.eff.org/abouteff.html

《黑客的警示:知识产权入门》,作者李天

反向工程是从一个物品中提取知识或技能的过程;在市场上,它被称为“历史悠久的技术,用来弄清楚竞争对手的产品是如何运作的。”¹ 但任何研究今天大众市场产品的人都应该意识到围绕反向工程的合法地雷。数字千年版权法(DMCA)²的禁止规避条款、禁止反向工程的合同条款和经济间谍法³是技术专家应该了解的危险法律领域中的几个。本章将简要概述这些领域,以给黑客们一个关于问题的粗略概念。

这里有两个一般性问题。首先,反向工程是否合法?其次,即使你可以反向工程产品,你能否发布从反向工程中学到的知识?

古典知识产权法:概述

传统上,知识产权法意味着版权和专利。两者都是根据宪法知识产权条款创建和受其限制的联邦法规:“国会应拥有权力……通过为作者和发明家在有限的时间内提供对其各自作品和发现的专有权利,以促进科学和有用艺术的进步。”⁴计算机程序通常作为受版权保护的“文学作品”受到保护,但也可以获得专利。⁵

人们最近开始将商业秘密视为另一种类型的知识产权。商业秘密最初由法院根据判例法保护,但现在它们既是州也是联邦法律的主题。与版权和专利不同,商业秘密法在历史上基于不正当竞争原则。在美国,作者和发明者没有“自然权利”。⁶他们的权利基于公共利益的概念。如果作者和发明者得到一些保护,社会将从中受益,因为如果其他人可以自由使用他们的作品,他们将没有足够的激励去创作。但这种保护是有限的,以确保公众最终受益。⁷例如,版权和专利权仅限于“有限时间”;最终,受保护的作品必须进入公共领域。⁸简而言之,知识产权法为公众和作者或发明者之间的“交易”设定了条款。

版权

版权法保护在可感知介质中“固定”的表达原创作品,并赋予作者(或受让人)对作品的复制、分发、改编、公开展示和公开表演的专有权利。它不保护独立创作。

作品与副本或音轨(录音副本)不同。当你购买一本书时,你拥有一个副本,但版权所有者保留了作品本身的版权。顺便说一下,“首次销售”原则允许合法副本的所有者合法出售或转让这些合法拥有的副本,但有某些例外。¹⁰

存在许多不同类型的作品,每种类型都有不同的规则。因此,版权法相当复杂,技术并没有简化这些问题。考虑一首受版权保护的歌曲。歌曲或音乐作品(MC)受版权保护,通常由词曲作者持有。要录制歌曲,需要获得 MC 版权所有者的许可。¹¹一旦录制完成,就有独立于音乐作品(SR)的录音版权,它保护实际录制的声音,包括歌手对基础歌曲的解释以及制作人和音响工程师的努力。唱片公司通常拥有 SR 版权。因此,如果你想在一则电视商业广告中使用这首歌曲的受版权保护的录音,你需要获得 MC 版权所有者和 SR 版权所有者的许可。

版权所有者的许多权利相当明显,但其中一些则不那么明显——尤其是在涉及计算机时。例如,计算机将程序加载到 RAM 中,为版权目的创建一个副本。版权法包含一项特定豁免,允许拥有计算机程序副本的人将其复制到计算机内存中。¹² 这说明了版权法的一般严格性:不能未经复制就使用受版权保护的作品的预期目的,并不意味着复制本身不是版权侵权。这种严格性对互联网的影响是严重的,因为互联网传播通常涉及复制。

对改编的权利也可能令人困惑。改编,或“派生作品”,是基于受版权保护的作品的作品:外语翻译、基于书籍的电影等等。在一个备受批评的案例中,法院发现,从合法拥有的副本中剪下图片并将其粘贴到陶瓷瓷砖上,创建了侵权派生作品。¹³ 大多数法院不同意这一结果。¹⁴

版权保护在作品创作时自动开始,通常持续到作者的有生之年加上 70 年。¹⁵ 一旦版权期限届满,作品将对所有用户免费使用,即进入公共领域。

版权有许多例外。版权保护表达的规定意味着它不阻止任何人使用作品中揭示的思想或事实。“思想”包括故事情节。更普遍地说,版权不保护作品的实用方面,因此你可以编写一个与另一个程序做同样事情的计算机程序,只要你不复制其表达。

事实被认为是“版权之外”的,因为它们是发现的,而不是创作的。这包括,例如,新素数的发现。但你可以对事实的选择、顺序或排列拥有版权,或者对任何本身不受版权保护的东西拥有版权。一个经典的例子是公共领域诗歌的选集。即使个别作品不受保护,只要选择、顺序或排列足够原创,你就可以对汇编拥有版权。典型的电话“白页”目录中事实的字母顺序未能满足宪法原创性要求。你仅仅因为投入了资金、时间或努力收集电话号码,并不能获得任何保护。

著作权并不涵盖许多“普通”的使用方式。本身,阅读一本书并不受著作权保护,因为它没有侵犯著作权所有人的任何权利。在淋浴时唱歌是一种表演,但著作权所有人只有对公开表演的权利。然而,互联网又改变了这一切。当你用网络浏览器阅读文档时,你的电脑可能已经制作了该文档的副本。因此,许多以前被认为是普通的使用现在都涉及到复制,这引发了著作权问题。

今天,关于“合理使用”有很多争议。合理使用是针对著作权侵权的一种辩护,旨在允许人们对受著作权保护的作品进行一些未经授权的使用。合理使用允许书评人引用书籍内容。这是一个非常复杂的法律领域;是否是“合理使用”取决于使用的目的、性质、数量和经济影响等因素。¹⁶

专利

专利法保护发明,并赋予发明者(或其受让人)在专利申请日期起 20 年内排除他人制造、销售或使用发明的权利。与著作权不同,专利法可以防止他人独立发明。

在这里,交易的条件是,作为对专利的回报,发明者必须在专利申请中提供足够的信息,以便一个“熟悉该技术”的人能够不经过太多实验就创造出该发明。一旦专利被授予,申请就会公开。通过使信息公开,专利权人有助于社会知识的积累。

然而,专利并不赋予任何肯定的权利;如果你对别人的发明进行了改进并申请了专利,你如果不侵犯原始专利,就不能实施这项改进。如果你发明并申请了新药专利,你仍然可能需要在获得监管批准后才能销售该药物。

要成为可专利的发明,它必须是有用的、新颖的,并且对“熟悉该技术”的人来说“非显而易见”。新颖性和非显而易见的要求意味着在授予排除权之前,发明必须是技术上的充分发展。不符合这些高标准的发展将不会获得保护。

商业秘密

第三种法律领域——商业秘密——也被视为知识产权法的一部分,尽管它实际上并不是财产。商业秘密是指用户知道但竞争对手不知道的商业或其他信息。保密性,尽管不是绝对的保密,是商业秘密的本质;必须采取合理的预防措施来保护商业秘密不被泄露。

专利和商业机密之间存在明显的联系,因为两者都保护有用的信息。如果有用的信息根本不可专利,那就没有选择了。但可能有几个原因不希望对可专利的发明申请专利。你可能不想在专利申请中披露信息。此外,如果你不期望这项技术会长期有价值,那么可能不值得获得为期 20 年的专利。

商业机密的缺点在于它不能提供对独立发明或反向工程的保护。如果秘密可以从产品中推断出来,那么商业机密就不明智。另一方面,如果发明是制造产品所用的过程,那么可能很难进行反向工程。尽管可口可乐已经上市多年,但显然没有人能弄清楚如何复制它。

宪法版权交易

知识产权是达到目的的手段——促进知识和技术的进步。正如最高法院曾经说过的,“国会可能授权的垄断特权既不是无限的,也不是主要设计用来提供特殊的私人利益。”¹⁷

上文表明,知识产权法长期以来一直关注限制版权和专利法授予的潜在垄断权力。例如,首次销售原则防止专利和版权所有者在专利产品或版权作品的副本售出后控制市场。

此外,版权法长期以来一直被法院解释并由国会制定,以保持与言论自由的平衡。像思想/表达二分法、合理使用原则以及版权的有限期限这样的学说通常被视为减少版权与言论自由之间的潜在冲突。¹⁸

有趣的是,对垄断的担忧在历史上与对言论自由的担忧有关。英国版权法长期以来一直充当一种国家赞助的卡特尔;作为对写作私人垄断的回报,出版商同意作为政府的审查警察,服务于政府审查——特别是圣经和其他宗教作品。¹⁹

同样,版权法的思想-表达二分法确保不可版权的事实和思想以及不可专利的功能原理仍然属于公共领域,供未来的创作者在此基础上构建。

传统的反向工程观点

从历史上看,反向工程一直是获取大众市场产品中体现的信息的合法方式。对于许多科技公司来说,反向工程竞争对手的产品以研究其创新是一种标准做法。事实上,美国法院也将反向工程视为维护知识产权法平衡的重要因素,最高法院甚至称反向工程为“创新的一个基本组成部分。”

法律承认合法逆向工程的三个主要目的。竞争性逆向工程旨在创造一个直接替代品。兼容性或互操作性逆向工程旨在弄清楚如何制造与逆向工程产品兼容的产品。当然,研究人员经常逆向工程产品,以获取无商业目的的知识。

商业机密与“不正当手段”

通常情况下,只有当个人或公司违反协议或保密关系滥用或泄露秘密,或者进行其他不当行为(例如贿赂、胁迫、非法侵入)以获取秘密,或者从知道或应当知道该信息是侵权商业机密的侵权者那里获取秘密时,才会发生商业机密的不当获取。

大多数州,如加利福尼亚州,明确提供,逆向工程是获取商业机密的一种合法方式。有几个原因支持将逆向工程作为商业机密法的合理原则。20 在公开市场上购买产品通常赋予买方对产品的个人财产权,包括拆解产品、测量它、对其进行测试等权利。法律还认为,在公开市场上销售产品是对其包含的创新进行公布并将它们奉献给公共领域的行为,除非创作者已为其获得专利保护。

商业机密易受逆向工程攻击是整体宪法框架的一部分。在 Bonito Boats v. Thunder Craft Boats 一案中,最高法院推翻了一项佛罗里达州法律,该法律禁止船只制造商使用现有的船只部件作为直接成型工艺中的“塞子”,因为该法律“禁止整个公众从事一种对公共领域产品的逆向工程形式。”²¹ 法院解释说,逆向工程是“创新的一个基本部分”,可能产生对产品的变体,这些变体“可能导致技术在重要方面的重大进步。”确实,“逆向工程的竞争现实可能激励发明者”开发额外的可专利想法。

在类似 Bonito Boats 的案例中,问题是州法律是否被联邦法律“优先”适用。当联邦和州法律直接冲突,或者作为联邦政策目标的问题时,州法律根据“冲突优先”原则失效。这源于宪法的最高权力条款,根据该条款,联邦法律通常优于州法律。²² 版权法也包含一个特定的优先条款,下文将讨论。

版权法与中间复制问题

直到最近,版权法不必担心逆向工程,因为很少有理由去逆向工程书籍、艺术或音乐。现在,由于许多计算机程序仅以目标代码形式分发,逆向工程过程通常需要先进行初始的反编译到源代码——这涉及到复制。

美国法院发现,版权法并不必然禁止逆向工程,因为与逆向工程相关的附带复制可以是“合理使用”: “版权法允许一个合法拥有作品副本的个人进行必要的努力来理解作品的思想、过程和操作方法。”²³ 即使逆向工程的最终目标是商业的,这也可能是正确的。法院通常依赖于版权保护的宪法目的:“促进‘科学……的进步’”²⁴ 合理使用原则通过“鼓励他人自由地基于作品传达的思想和信息构建”来推进这一宪法目标。²⁵

此处的关键案例是 Sega Enterprises Ltd. v. Accolade, Inc.²⁶ Accolade 为了获取制作其游戏与 Sega Genesis 游戏机兼容所需的信息,对 Sega 的游戏程序进行了拆解。Accolade 随后销售了自己的游戏,与 Sega 及其授权开发商制作的游戏竞争。Accolade 对 Sega 关于拆解副本侵犯其权利的主张提出了合理使用抗辩。法院基于上述理由接受了 Accolade 的抗辩。它还指出,如果 Accolade 不能拆解 Sega 的代码,Sega 将获得“对[不受保护的]思想和功能概念[在程序中]的实质垄断”,这在专利法下是唯一可用的。²⁷

然而,法院的判决仅限于出于“合法理由”进行的逆向工程,例如为了获取制作兼容程序所需的功能规范,并且只有在它“提供了访问那些不受版权保护代码元素的唯一途径”的情况下。²⁸

专利法

专利法中不存在普遍的合理使用抗辩或逆向工程豁免。从理论上讲,你不需要逆向工程一个专利产品,因为专利说明书应该向相关技术社区告知制作发明的最佳方式。

一些逆向工程活动不会侵犯专利。例如,购买体现专利发明的机器的买方,根据专利法的第一销售原则,通常可以自由地将其拆解以研究其在专利法下的工作方式。购买产品意味着你有权使用它,而仅仅研究它并不侵犯专利所有者对制造或销售发明的专有权利。尽管如此,法院有时会执行对逆向工程的合同限制。²⁹

此外,试图通过制造专利发明来满足科学好奇心的人可能有“实验用途”的辩护。根据美国法律,这种辩护范围很窄,可能不包括可能导致可专利发明或商业产品开发的研究用途。³⁰

如果我们再次审视世嘉的情况,就可以看到这三个领域的冲突。假设世嘉对其所有游戏程序中使用的算法拥有专利。通过拆解世嘉程序,Accolade 可能“制造”或“使用”了专利算法,即使它是无意中这样做的。简而言之,中间复制问题在专利环境中再次出现。

逆向工程师面临的新挑战

随着商业加密技术在大众市场产品中的普及,逆向工程的重要性也随之增长,因为如果不尝试破解系统,就无法使其更加安全。讽刺的是,加密技术的日益普及反而导致了反对逆向工程的法律的产生。例如,娱乐行业现在依赖加密和其他技术来保护数字信息,如 CD 上的音乐和 DVD 上的电影,以防止未经授权的复制。不出所料,新法律已经出台,以防止人们“规避”加密和其他安全措施。

对逆向工程的合法侵犯并未局限于加密。在 20 世纪 70 年代和 80 年代,一些州禁止使用直接成型工艺来逆向工程船体。³¹ 在 20 世纪 70 年代末和 80 年代初,半导体行业寻求并获得立法保护芯片布局免受逆向工程以制造克隆芯片。³² 一项关于知识产权的主要国际协议对逆向工程没有任何提及。³³

《数字千年版权法》和未经授权访问的问题

DMCA(数字千年版权法)是现在规范逆向工程最重要的法律之一。DMCA 的一部分——其“反规避”条款——为有效控制访问或防止复制受版权保护的作品的技术措施提供了法律保护。不幸的是,DMCA 极其复杂;例如,DMCA 使绕过“有效的技术保护措施”成为非法,但没有明确说明该术语的含义。

未经授权的访问

DMCA 基本上为版权所有者创造了一种新的“访问”权利。版权行业的发言人将绕过技术保护系统的行为比作“闯入”住宅。

一个简单的例子是学校和图书馆使用的审查软件程序,用于防止儿童查看不适当的内容。这些程序通常包含加密的“黑名单”,列出了被审查的网站,供应商通常将其视为商业机密。假设一位研究人员发现某个特定程序阻止了完全适合儿童访问的网站,并希望阅读黑名单以了解有多少合适的网站被错误地阻止。³⁴ 由于供应商加密了黑名单以防止人们获取其内容,并且该列表可以说是受版权保护的事实汇编,因此加密是应用于受版权保护作品的保护措施,未经授权的解密将构成非法的规避行为——但 DMCA 目前对解密审查软件黑名单有临时豁免。

另一个例子:电影行业使用一种名为内容加密系统(Content Scrambling System,CSS)的加密方案来保护 DVD 上的电影。在2600案件中³⁵,CSS 被认为是一项“有效”控制电影访问的技术措施。未经版权所有者授权绕过 CSS 是一种非法的“规避行为”根据 DMCA(数字千年版权法)。请注意,法院并未认定公平使用原则适用于 DMCA(与版权法相对)。因此,如果 CSS 的使用阻止了您在 DVD 电影中快进广告——绕过这种限制仍然是非法的。

注意,这里的“有效”概念与加密的有效性无关。即使是弱加密在 DMCA 下也是“有效”的,因为普通人无法击败它。

规避技术

DMCA 以第二种方式保护技术措施:其“反设备”条款禁止制造和分发能够实现规避的技术。³⁶ 继续使用“破门而入”的隐喻,版权行业的发言人将规避技术比作“窃贼的工具”,这在许多州都是非法的。

DMCA 的第 1201 条规定,如果一项技术、产品、服务、设备、组件或其部分具有以下三个特征之一,则“任何人不得制造、进口、向公众提供、提供或以其他方式交易”:(1)如果它是“主要设计或生产的目的是绕过[技术]保护”,(2)如果它“除了绕过[技术]保护之外,只有有限的商业意义或用途”,或(3)如果它是“由该人或其他代表该人行事的人,在知情的情况下,用于绕过技术保护”而营销的。

注意,这些条款不仅适用于新的“访问控制”权利,也适用于版权所有者的普遍权利。因此,能够绕过 CD 复制保护措施的技术可能根据这些条款是非法的。

回想一下刚刚给出的两个例子。在2600案例中,涉及的是 DeCSS 程序,该程序使人们能够解密受 CSS 保护的 DVD 电影。DeCSS 被发现是一种禁止的规避技术。在审查软件的例子中,DMCA 豁免允许解密行为,但它没有提及审查软件研究人员是否可以提供用于解密加密黑名单的计算机程序,甚至没有提及解密方法的细节。

导航 DMCA 的豁免条款

正如你不能在不反编译或反汇编的情况下逆向工程目标代码一样,你也不能在不规避的情况下逆向工程技术保护措施。此外,你通常需要一个技术设备或工具来实际执行逆向工程,因此禁止规避技术也限制了逆向工程。

结合这些 DMCA 规定,为密码学家和希望分析实际、大众市场产品中使用的安全措施的网络安全研究人员设置了重大障碍。一个商业逆向工程师如果发现另一家公司的技术措施存在问题并提出改进建议,可能会面临被起诉刑事 DMCA 指控的风险。

即使是学术上的逆向工程师,在发表关于公司安全措施弱点的论文时也可能会面临被起诉的风险,因为这样的论文可能会被标记为“规避工具”。³⁷ 一个例子是普林斯顿大学的教授爱德华·费尔滕,他组织并带领一支科学家团队参加了音乐行业的“SDMI 挑战”,这是一个旨在破解数字水印和其他技术的竞赛,这些技术是数字音乐安全倡议(Secure Digital Music Initiative)考虑用于保护数字音乐的。费尔滕和他的团队参加竞赛的目的是将 SDMI 挑战作为一个现实世界的安全案例研究,他们最终撰写了一篇经同行评审的学术论文,准备在会议上发表。在论文实际发表之前,美国录音工业协会(RIAA)给费尔滕和会议组织者发送了一封信,警告他发表这篇论文将违反知识产权法,包括 DMCA。

DMCA 还包含几个与逆向工程相关的豁免条款:在必要时绕过技术保护系统以实现计算机程序之间的互操作性;在合法加密研究过程中进行的规避;以及为了计算机安全测试而进行的规避。不幸的是,这些豁免条款既复杂又狭窄。即使逆向工程的行为被允许,DMCA 也严格规定了可以对所得信息进行什么操作。

1201(f): 为互操作性进行的逆向工程

这个豁免允许绕过技术保护措施以进行互操作性逆向工程。它还允许在非常有限的范围内,传播从逆向工程中获得的信息。请注意,1201(f)不会豁免费尔顿对 SDMI 水印的攻击,因为它与互操作性无关。

之前提到的2600案件涉及在 2600 杂志网站上发布一个名为“DeCSS”的计算机程序。DeCSS 可以用来绕过 CSS,这是用于控制 DVD 电影访问的技术保护措施。代表 2600 杂志的 EFF(电子前沿基金会)辩称,DeCSS 符合 1201(f)的互操作性特权。我们辩称,DeCSS 的设计是为了使人们能够构建软件,使他们能够在他们选择的平台上合法播放购买的 DVD 电影,即 Linux 计算机系统。

法院驳回了这个论点,表示 1201(f)仅允许为了实现程序到程序的互操作性而绕过,而 DeCSS 实现了 1201(f)未涵盖的程序到数据的互操作性。这个裁决是可疑的,因为电影 DVD 上既有计算机程序也有数据。

虽然 1201(f)似乎在允许互操作性逆向工程方面效仿了世嘉,但在几个方面更为严格:互操作性是进行逆向工程的唯一合法目的;只有程序到程序的互操作性才符合条件,即使需要绕过才能实现硬件到程序的互操作性或程序到数据的互操作性;并且从逆向工程中获得的信息不能自由发布。

1201(g): 加密研究

DMCA 还包含了对加密研究的明确豁免。不幸的是,它也非常狭窄。首先,这个例外只有在密码学家在绕过行为完成之前(即使他没有收到)请求(甚至没有收到)版权所有者的许可来从事绕过行为时才适用。其次,该法规强调密码学家必须是专家才能符合这个豁免,尽管该领域的许多最杰出的大脑缺乏正式培训。第三,该法规允许密码分析师制作绕过访问控制工具,但对绕过使用或复制控制工具是否允许保持沉默(即,它包含对一项而不是两项反设备规则的例外)。第四,它规范了密码学家传播解密结果的能力。

再次考虑费尔顿教授的 SDMI 研究:它不会因 1201(g)而获得豁免,因为数字水印不是加密。

1201(j): 安全研究

DMCA 的安全研究豁免具有类似的架构:它仅适用于测试者在事先提出要求的情况下,同样仅允许制作绕过访问控制的工具,而不是复制或使用控制。与 1201(g)一样,它也规范了测试者对测试结果的传播。

即使在这种狭义的形式下,也不清楚 Felten 的研究是否会被涵盖。第 1201(j)节仅允许制作绕过访问控制的工具。数字水印是访问控制还是复制控制?这个问题的答案在很大程度上取决于水印的使用方式。EFF 认为,正如 RIAA 所设想的那样,SDMI 水印技术既是访问控制技术也是复制控制技术。

最终用户许可协议和 关于逆向工程的合同禁止

知识产权并不是逆向工程唯一的障碍。软件许可通常禁止逆向工程。典型的许可条款可能如下所述:“您不得,并且不得允许他人:(a) 拆卸、反编译或以其他方式从软件中提取源代码,(b) 逆向工程软件,(c) 修改或准备软件的衍生作品,(d) 复制软件,除非本协议明确允许,(e) 出租或租赁软件,或(f) 以任何侵犯许可方或其他方知识产权或其他权利的方式使用软件。”

公司认为,此类条款在法律上约束购买者不得逆向工程其软件。如果他们仍然这样做,他们违反了合同,并可能因损害赔偿而被起诉。当然,问题是反逆向工程条款赋予了版权所有者超越其在,例如,Sega 决定下可能拥有的权利。

这种类型的合同禁止是否可执行是一个有争议的问题。法院有时因为这种活动超出了软件许可使用的范围而拒绝在商业秘密案件中接受逆向工程辩护。有时,由于条款与联邦知识产权政策之间的冲突,法院拒绝执行针对逆向工程的软件 shrinkwrap 许可限制。在 Vault Corp. v. Quaid Software Ltd. 案中,³⁹ 复制保护软件的制造商试图根据路易斯安那州法律执行反逆向工程条款,以对抗一个逆向工程其复制保护方案的公司。法院裁定,联邦法律作为联邦政策的考虑,优先于合同条款,这与在 Bonito Boats 案中用来推翻佛罗里达州船体法律的相同论点。

此外,《版权法》第三百零一部分排除了州创建或州执行的“等同于版权一般范围内的任何专有权利”的权利。正如预期的那样,关于“等同于”的含义存在争议。法院表示,当侵权条件相同时,根据州法律可执行的合同条款被视为等同于联邦版权。但如果州创建的权利需要“额外要素”,则它不是“等同于”。

最近发现这样的合同条款是可执行的。在 Bowers v. Baystate Technologies, Inc. 案中,⁴⁰ 一位发明者销售了一种带有反逆向工程许可条款的专利计算机辅助设计(CAD)软件“工具包”。Baystate,作为竞争对手,对 Bowers 的软件进行了逆向工程,然后销售了竞争性的 CAD 工具包。经过一些复杂的诉讼,法院最终裁定,其中包括 Baystate 违反了与 Bowers 的合同。

法院认为,由于合同有一个“额外要素”——双方必须同意,因此许可不被排他。因此,联邦版权法永远不能排他合同禁止。Bowers 判决的问题在于它只关注版权法中的特定排他条款,完全忽略了宪法“冲突”排他。⁴²

《统一计算机信息交易法》(UCITA)是州立法试图解决这些问题的尝试,但它也陷入了争议。

商业秘密和经济间谍法

《经济间谍法》(EEA)⁴³ 首次为商业秘密侵权行为创建了联邦诉讼理由。但它没有逆向工程抗辩。这令人担忧,因为根据 EEA 授予的权利可能涉及某些以前被认为是合法的逆向工程活动。特别是,不清楚程序的反汇编和反汇编是否可能违反禁止复制商业秘密的 EEA 规则。

负责任的黑客:无知不是借口

通常,有两种方式可以违反知识产权法。直接侵权意味着你实际上侵犯了。间接侵权意味着你通过他人实际侵权行为提供了便利。例如,在 Betamax 案件中,问题是索尼通过销售录像机,是否可以因其客户的版权侵权行为而被判有罪。

民事和刑事犯罪及处罚

我们讨论过的法律理论可能带来广泛的潜在处罚。主要关注的是民事责任,无论是经济损害赔偿还是对活动的禁令,或者两者兼而有之。损害赔偿通常与侵权行为造成的损害程度相关。

例如,在专利法中,损害赔偿的通常依据是“合理版税”。法院将计算如果你签订了许可合同,你应该支付专利所有者的版税金额。损害赔偿也可以基于侵权人的利润或专利所有者失去的利润。

“故意”侵权受到更严厉的对待。专利法允许法院在其自由裁量权内,如果侵权人知道专利但没有咨询合格的专利律师,将损害赔偿增加到基本损害赔偿的三倍(并且还要支付专利所有者的律师费)。

知识产权法目前的趋势是更加关注刑事处罚。在 1790 年的第一部联邦版权法中,版权侵权是一个纯粹的民事问题。直到 1897 年,国会才将刑事处罚添加到版权法中,并将刑事版权侵权归类为轻罪。⁴⁴ 此外,刑事版权侵权很少被使用。

现在,刑事起诉的风险似乎显著增加,刑事处罚也更大。例如,1982 年和 1992 年对版权法的修订将某些类型的侵权行为归类为重罪。然而,即使在这种情况下,刑事侵权也必须是故意的,并且是为了商业利益或私人经济利益。

1997 年的《无电子盗窃法》(NET 法案)将任何 180 天期间内复制或分发总零售价值超过 1000 美元的版权作品的复制件定为犯罪,无论这些复制件是如何创建或分发的。它保留了故意要求,但取消了被告的侵权行为必须由利润或商业收益驱动的规定。

DMCA 还包含刑事条款,这些条款在起诉德米特里·斯柳亚罗夫及其所在公司 ElcomSoft 的过程中被引用。Elcomsoft 开发并分发了一种软件,可以将 Adobe 的电子书格式转换为 Adobe 的 PDF 格式。在格式转换过程中,电子书格式所施加的使用限制被去除。无可争议的是,Elcomsoft 的软件可以用来方便地非侵权使用电子书(例如,合理使用摘录,或帮助将文本自动转换为盲文供盲人阅读)。斯柳亚罗夫本人从未被指控侵犯版权,或协助任何第三方的侵权活动。然而,鉴于他在软件开发中的角色,联邦调查局逮捕了他,并将其拘留了 3 周。⁴⁵ 他和 Elcomsoft 被大陪审团起诉;根据起诉书,斯柳亚罗夫面临最高 25 年监禁和可能超过 200 万美元的罚款。⁴⁶ 最终,ElcomSoft 和斯柳亚罗夫被判定没有违反 DMCA。

“逆向工程作为‘自由修补’和其他法律问题”

普林斯顿大学的计算机科学教授 Edward Felten 认为,反向工程是“玩弄的自由”的一部分,这应包括“拆解它们、讨论它们、探索它们的工作原理、修改它们、使它们变得更好”的自由。Felten 辩称,“随着我们越来越多地通过电子设备体验世界,通信和文化越来越多地由这些设备中介,我们能够玩弄它们、理解我们世界这一部分的能力变得越来越重要。”

玩弄的自由也应包括谈论玩弄的权利。但正如我们所见,许多新的知识产权规则限制了反向工程师分享他们从玩弄中学到的知识的权利。这些限制不仅引发了严重的第一修正案言论自由问题,而且触及了版权法和专利法宪法基础的精髓:艺术和科学进步。DMCA 引发的主要问题之一是其对科学家的寒蝉效应。⁴⁷


¹ Joel Miller, Reverse Engineering: Fair Game or Foul? , IEEE Spectrum, Apr. 1993, at 64, 64。

² 17 U.S.C. § 1201–1204。

³ 18 U.S.C. § 1831–39。

⁴ U.S. Const. Art. I, §8, cl. 8。当宪法被撰写时,“科学”一词常被用作“知识”的同义词。

⁵ 参见 Diamond v. Diehr, 450 U.S. 175 (1981);In re Alappat, 33 F.3d 1526 (Fed. Cir. 1994)。

⁶ 在欧洲,版权传统上被视为保护作品创作者固有的不可转让的个人权利。

⁷ “赋予国会授予专利权和版权条款背后的经济哲学是,通过个人收益鼓励个人努力是促进公共福利、通过作者和发明家的‘科学和实用艺术’才能的最佳方式。” Mazer v. Stein, 347 U.S. 201, 219 (1954)。

Feist Publications, Inc. v. Rural Tel. Serv. Co. , 499 U.S. 340, 348-49 (1991)(“这种结果既不公平也不遗憾。这是版权促进科学和艺术进步的手段。”)

⁹ 参见 17 U.S.C. Sec. 109。 “首次销售原则的全部要点是,一旦版权所有者通过销售将受版权保护的商品投入商业流通,他就已经耗尽了他对控制其分销的独占法定权利。” Quality King v. L’Anza Research Int’l, 523 U.S. 135, ___ (1998)。

(10) 例如,根据第一百零九部分,录音制品和独立计算机程序的处理方式与书籍不同。

(11) 根据现行版权法,MC 复制版权受强制许可条款控制,这意味着你通过支付法定费用即可自动获得许可。

(12) 17 U.S.C. § 117(允许制作副本或改编副本“作为与机器结合使用计算机程序时的必要步骤”)。

(13) Mirage Editions, Inc. v. Albuquerque A.R.T. Co., 856 F.2d 1341, 1344 (第 9 巡回法院 1988 年), 被驳回,489 U.S. 1018 (1989).

(14) 例如,参见 Lee v. Deck The Walls, Inc., 925 F. Supp. 576 (北伊利诺伊州地区法院 1996 年),上诉案名为 Lee v. A.R.T. Co., 125 F.3d 580 (第 7 巡回法院 1997 年)(拒绝 Mirage Editions 的推理);Precious Moments, Inc. v. La Infantil, Inc., 971 F. Supp. 66, 68-69 (波多黎各地区法院 1997 年)(拒绝针对购买布料并将其纳入床品的人的索赔);Paramount Pictures Corp. v. Video Broadcasting Sys., Inc., 724 F. Supp. 808 (堪萨斯州地区法院 1989 年)(第一销售原则阻止发行索赔,区分 Mirage Editions)。

(15) 在第一项版权法下,保护期仅为 14 年。

(16) 17 U.S.C. § 107.

(17) Sony v. Universal City Studios 464 U.S. 417, 429 & 432 (1984).

(18) 参见 Neil Weinstock Netanel, Locating Copyright Within the First Amendment Skein, 54 Stan. L. Rev. 1 (2001).

(19) 参见 L. Ray Patterson, Free Speech, Copyright, and Fair Use, 40 Vand. L. Rev. 1 (1987).

(20) 参见 Pamela Samuelson & Suzanne Scotchmer, The Law and Economics of Reverse Engineering, 111 Yale L. J. 1575 (2002).

(21) 法院接着说,“当一项在流通中的物品不受专利保护时,‘[对功能属性的复制是合法的竞争活动。’”

(22) 美国宪法第 VI 条,第 2 款。

(23) Atari Games Corp. v. Nintendo, 975 F.2d 832, 842 (联邦巡回法院 1992 年);参见 Sony Computer Ent. Corp. v. Connectix Corp. , 203 F.3d 596 (第 9 巡回法院 2000 年).

(24) Id.,引用美国宪法第 I 条,第 8 款,第 8 项。

(25) Feist Publications, Inc., v. Rural Telephone Serv. Co., Inc. , 499 U.S. 340, 350 (1991).

(26) 977 F.2d 1510 (第 9 巡回法院 1992 年).

(27) Id. at 1526-1527.

(28) Id. at 1518.

(29) 参见 Pioneer Hi-Bred Int’l, Inc. v. DeKalb Genetics Corp. , 51 U.S.P.Q.2d (BNA) 1797 (爱荷华州南区地方法院 1999 年)(执行一项“袋标签”,禁止购买受 PVPA 保护的玉米种子的购买者将该种子用于育种或研究目的)。

(30) 参见 Roche Prod. v. Bolar Pharmaceutical Co., 733 F.2d 858, 858-63 (联邦巡回法院 1984 年)(辩护不允许“为适应发明者业务而进行的未经许可的实验”,与“为了娱乐、满足好奇心或进行严格哲学探究”的实验相对);Rebecca S. Eisenberg , Patents and the Progress of Science: Exclusive Rights and Experimental Use, 56 U. Chi. L. Rev. 1017, 1023 (1989).

(31) 这些州法律被最高法院在 Bonito Boats 中废除。

(32) 半导体芯片保护法,公法第 98-620 号,第 98 卷第 3347 号(1984 年)(编入 17 U.S.C. § § 901-914(1994 年))。我们不会讨论这项法规,除非指出它包含一项特定的逆向工程特权,允许复制受保护的芯片设计以研究电路布局,并将从逆向工程中获得的专有技术纳入新芯片。有趣的是,逆向工程师必须进行足够的“正向工程”以开发一个本身符合 SCPA 保护资格的原创芯片设计。

(33) 关于贸易相关知识产权方面的协定(TRIPS),1994 年 4 月 15 日,马拉喀什协定建立世界贸易组织,附件 1C,法律文件——乌拉圭回合成果卷 31,33 I.L.M. 81 (1994)。TRIPS 协定的商业秘密条款是第 39 条,33 I.L.M.第 98 页。

(34) 参见,例如,http://www.sethf.com.

(35) Universal City Studios v. Reimerdes,111 F.Supp. 294 (S.D.N.Y. 2000),aff’d 273 F.3d 429 (2d Cir. 2001)。

(36) DMCA 涵盖了基于它们所保护内容的不同类型的技术:那些“有效控制对[版权作品]的访问”的技术,第 1201(a)(2)节,以及那些“有效保护[版权所有者]在作品或其部分中的权利”的技术,第 1201(b)(1)节。

(37) 虽然这似乎很奇怪,但考虑到许多安全领域的学术论文包括计算机程序代码。

(38) 例如,Technicon Data Sys. Corp. v. Curtis 1000, Inc.,224 U.S.P.Q. (BNA) 286 (Del. Ch. 1984)(认为医院顾问通过窃听医院授权的软件系统以研究服务器软件与客户端软件交换数据的方式,使用了不正当手段获取商业秘密接口信息;进一步指出,即使使用得到了授权,该行为也会违反许可证中的限制性条款);参见DSC Communications Corp. v. Pulse Communications, Inc.,170 F.3d 1354 (Fed. Cir. 1999)(认为 Pulsecom 在电话公司使用“窃听板”获取有关 DSC 软件的接口信息是否导致侵犯商业秘密存在事实争议,考虑到电话公司使用 DSC 软件的许可证中的限制)。

(39) 847 F.2d 255 (5th Cir. 1988).

(40) 302 F.3d 1334 (Fed. Cir. 2002).

(41) 法院依赖一个早期的案例,ProCD, Inc. v. Zeidenberg,86 F.3d 1447,1454. (7th Cir. 1996)(“版权是对世界的权利。相比之下,合同通常只影响其当事人;陌生人可以随心所欲,因此合同不创造‘专有权利’”)。

(42) EFF 已提交一份支持 Baystate 在案件中对全体法官重审的上诉状。[添加引用]

(43) 1996 年经济间谍法,公法第 104-294 号,110 Stat. 3488(编入 18 U.S.C. § § 1831-1839(1999 年补充五))。

(44) 参见 Lydia Loren,数字化,商品化,犯罪化:刑事版权侵权演变的历程与主观故意要求的重要性,77 Wash. U. L.Q. 835, 840 (1999 年)。

(45) 参见教授 Larry Lessig,"数字时代的监禁时间",N.Y. Times (2001 年 7 月 30 日)(可在http://www.nytimes.com/2001/07/30/opinion/30LESS.html找到);Declan McCullagh,"黑客被捕引发抗议",Wired News (2001 年 7 月 19 日)(可在http://www.wired.com/news/politics/0,1283,45342,00.html找到);Jennifer 8 Lee,"美国以版权侵犯者逮捕俄罗斯密码学家",N.Y. Times,2001 年 7 月 18 日。

(46) 参见 Brad King 和 Michelle Delio,"Sklyarov, Boss Plead Not Guilty",Wired News (2001 年 8 月 30 日)(可在http://www.wired.com/news/politics/0,1283,46396,00.html找到)。

(47) 参见电子前沿基金会,未预见的后果:DMCA 实施四年回顾(2003 年)[引用 EFF 网站]。

第十三章

前进!

Xbox 漏洞挖掘的尖端技术不断进步。成千上万的黑客不断研究、创新、发现,并分享新的方法和技巧,使 Xbox 对最终用户来说更加有用和有价值。跟上黑客领域的最新发展可能会让人感到不知所措。希望阅读这本书已经给了你理解各种网站和针对 Xbox 漏洞挖掘的论坛上最新帖子和新消息的能力。本章讨论了你可以去哪里了解更多关于最新漏洞的信息,哪里可以寻求帮助,以及你如何贡献你独特的技能和视角到社区中。本章还讨论了黑客在未来将面临的一些更大的挑战,即受信任的 PC 初始化。

黑客社区

Xbox 漏洞挖掘者是一个无政府主义社区,他们主要在地下活动,通过各种互联网“论坛”(fora 是 forum 的复数形式,就像 data 是 datum 的复数形式)保持联系和分享信息。Xbox 漏洞挖掘社区中的大多数人保持低调,黑客们经常使用化名来保护他们的身份。使用化名的理由各不相同,但总的来说,匿名提供了更大的操作自由。如果黑客知道在事情变得糟糕的情况下可以无损退出,他们更愿意分享他们的成果和发现。使用化名也使竞争更加公平。黑客们主要根据他们贡献的质量和频率来评判彼此,其他方面很少考虑。你可能很年轻,但这并不会影响你的第一印象或街头信誉,就像在其他情况下可能会发生的那样。同样,许多黑客在你犯错时毫不犹豫地直言不讳,他们对愚蠢地表现为博学或无礼的断言更是没有耐心。另一方面,许多黑客对那些已经诚心诚意地阅读常见问题解答、搜索网络并尽力确保问题尚未被回答的人非常乐意伸出援手。

黑客论坛

Xbox 漏洞挖掘社区有许多公民论坛用于分享他们的成果和表达他们的担忧。最受欢迎的论坛是像 www.XboxHacker.net 和 www.xbox-scene.com 这样的基于网络的 BBS,以及像 #xboxhacker 这样的 IRC 频道。基于网络的 BBS 通常包括新闻日志、常见问题解答和指向信息的实用链接。更重要的是,BBS 包括人们可以分享信息和提问的论坛。通过这些论坛,你可以利用经常访问这些 BBS 的所有黑客的集体知识。这些论坛的记录历史中也包含大量 Xbox 漏洞挖掘信息(以及错误信息)。我鼓励那些在这本书中还有未解答问题的读者去这些论坛寻找答案。

最早创建的 Xbox 黑客论坛之一是 XboxHacker BBS(www.xboxhacker.net)。许多最优秀和最聪明的 Xbox 黑客都为其论坛做出了贡献。例如,一个论坛帖子实时记录了 Andy Green(在 XboxHacker BBS 上被称为 numbnut)破解 Xbox 1.1 安全方案的经历。我从阅读 XboxHacker BBS 的论坛帖子中学到了很多。我还在 BBS 论坛上遇到了一些最有趣的人。XboxHacker BBS 的创始人 Dan Johnson(也被称为 SiliconIce)在侧边栏“个人简介:Dan Johnson”中讲述了他的故事。

另一个寻找有关 Xbox 一般信息的资源是网络搜索引擎 Google(www.google.com)。随着越来越多的黑客参与到 Xbox 中,Google 正变得越来越成为一个重要的工具,用于广泛撒网并发现最新的工具和技术。例如,在撰写本文时,Google 开始索引一些用于替换 Xbox 组件的资源。这对于那些不想费心将 ATX 电源适配器适配到 Xbox 上的人来说可能很有用。

使用 Google 搜索时,尽量使用尽可能具体的关键词。例如,在 Google 中输入Xbox hacking将返回大量与 Xbox 黑客主题相关的链接,但具体信息很少。例如,今天 Google 上“Xbox hacking”搜索结果的第一条是 LWN.net 的一篇文章,标题为“LWN: Lindows CEO funds Xbox hacking contest (News.com)。”这似乎与如何安装新硬盘或 Xbox 安全系统的详细信息相去甚远。在缩小搜索范围时,尽量弄清楚你概念的实际术语和拼写。假设你正在寻找有关新 Xbox 安全系统的信息。如果你搜索new Xbox,你几乎得不到任何技术信息。然而,如果你搜索xbox v1.1,搜索结果将返回更多有用的技术结果。收集当前术语和缩写的最佳方法之一是浏览黑客 BBS。

做出贡献

如果你正在寻找为 Xbox 黑客社区做出贡献的方法,请记住,大多数黑客都有一种独特的技能或优势,这通常与其最感兴趣的领域相对应,并且大多数黑客黑客是为了乐趣而黑客。例如,我真的很喜欢硬件,尤其是当需要构建某些东西时。虽然我可以编写代码,但我并不特别喜欢。因此,我对黑客社区的贡献主要是通过硬件项目。同样,我也很难激励自己参与软件项目。所以,大多数时候我只是坐下来,享受观看别人在 Xbox 上做什么。这既教育又娱乐。

当你在思考能为 Xbox 黑客社区做些什么时,不要担心自己急于加入并迅速投入到你并不热爱或感到不舒服的项目中。当你知道时机已到时:项目会大声呼唤你的名字,你自然会想要进行破解。

个人简介:丹·约翰逊(又名 SiliconIce)

你能告诉我们一些关于你自己的信息,以及你是如何开始黑客生涯的吗?

在一段时间里,我对电子黑客技术很感兴趣,尽管我的兴趣主要局限于仅仅阅读关于这些壮举的文章。像世嘉的 Dreamcast 和 Netpliance I-Opener 这样的被黑设备时不时地吸引了我的注意。然而,我第一次真正的电子黑客体验来自于“ePods”,这是一种已经停止生产的互联网设备/网络平板电脑。我在网上阅读了关于这些有趣设备的文章,并找到了 Ken Segler 的 I-Appliance BBS(http://www.linux-hacker.net),这是著名的 I-Opener 黑客的家园。在阅读了人们用这些平板电脑做的一些有趣的事情后,我感到非常好奇,并花了我当时大部分积蓄(200 美元)购买了一个单元。收到我的新玩具后,我花了很多时间进行许多记录在案的破解,主要是基于软件的。这是我第一次窥见电子黑客的世界。在 ePods 之后,我转向了另一款互联网设备,Gateway Connected Touchpad。一个看起来很酷的 10 英寸触摸屏,背后有一个 400MHz 的 Crusoe 处理器和 96MB 的 RAM;它看起来像是一笔不错的交易,非常适合一个有趣的项目。该设备运行的是基于 32MB CompactFlash 卡的 AOL 定制的 Linux 系统。我将这个 Microdrive 换掉,并在笔记本电脑、USB 读卡器和 Gateway 之间多次交换这个磁盘后,设备启动了一个精简版的 Windows 使用“98Lite”。这个设备似乎非常适合用作手指操作的、网络连接的 mp3 音乐播放器(以及其他用途),所以我开始开发一个定制的播放器,它可以通过触摸板轻松操作。整个 Gateway 体验成为了我在高中 junior 和 senior 年之间的一个有趣的项目。

XboxHacker BBS 是如何产生的?

正是在这段时间里,我产生了 XboxHacker.Net 的想法。对我来说,Xbox 似乎有潜力成为电视下理想的计算设备……一旦它可以被编程。在当时,其硬件给人留下了深刻的印象,完全能满足我希望在设备上实现的目标。与其他游戏机不同,Xbox 还内置了硬盘和以太网端口。一旦破解,Xbox 可以用来模拟旧游戏机,如 NES、SNES、N64,甚至 PSX,方便地在您的家庭娱乐系统上播放任何类型的媒体文件,如 mp3 或 DivX,从家庭网络播放流媒体,甚至可以作为基本的 PC 使用。有人认为,该设备售价 299 美元,成本过高,不值得破解,因为可以以不高的成本构建具有类似规格的 PC,无需破解。然而,Xbox 的优势在于它还可以播放 Xbox 游戏,并且已经设计好与您的电视一起使用。破解只是增加了附加值。在我短暂涉足电子破解领域后,我认为破解 Xbox 可以是一个有趣的项目,有助于组织,因为我被拥有一个方便的电视盒子来完成上述任务的可能性所吸引。直到几个月后,我才会真正购买 XboxHacker.Net 域名。

您在成长和运营 XboxHacker BBS 时的体验如何?

从一开始,XboxHacker.Net 就专注于几个主要目标:提供和传播有关 Xbox 的技术信息,并为同行黑客提供一个讨论与 Xbox 破解相关技术信息的场所。尽管由于我的技术知识和经验有限,我在实际破解方面贡献不多,但我收集和分发相关信息以及管理讨论版的能力足以帮助推动这项工作。

网站上线不久后,我们很幸运地收到了来自像 Mike Magee 的 The Inquirer 和 Van Smith 的 Van’s Hardware 等高知名度网站的链接。XboxHacker.Net BBS 迅速成为互联网上讨论任何与 Xbox 破解相关材料的主要场所之一,XboxHacker.Net 新闻页面也提供了关于 Xbox 最新状态的最新消息。网站上线几周后,它被 CNET 的一篇文章提及,从那时起,活动水平稳步上升。不久之后,XboxHacker.Net 就超过了我们所在的小型共享服务器,因此网站迁移到了一个更大的账户,几周后又超过了这个账户。论坛的流量继续迅速增加,所以我决定将网站迁移到自己的专用服务器,这样我们就有足够的空间增长,不必担心每几个 MB 的带宽使用量或有多少并发论坛用户在线。

XboxHacker.Net 的活动很快吸引了微软的注意。在网站的早期,我几次被要求移除材料。第一次是一个开发者工具的截图,我收到这个截图时没有太多解释,显示了磁盘上的“安全区域”。第二次是一个要求移除论坛中某人发布的 Xbox BIOS 映像链接。除了这些少数的小事件外,微软和 XboxHacker.Net 之间的联系几乎不存在。一开始就制定了政策,避免涉及可疑合法性的问题,如关于游戏备份的讨论、链接到版权材料或从 BIOS 中发布微软代码。

在开始的时候,尽管兴趣很高,但进展似乎相对缓慢……在安全系统被破解之前,Xbox 上能做的事情并不多。有很多个人在早期做出了显著的贡献。XboxHacking 世界的早期贡献者中,有 Andy 和 Luke,他们的网页上包含了大量关于文件格式和其他有价值的 Xbox 信息的资料。Steve “SurferDude” Gehlbach 为 Xbox 设计了一个 VGA 转换电路,Ken Gasper 在此基础上进行了改进,为 Xbox 创造了一个真正的 VGA 适配器。Bunnie 在 Slashdot 上发布了他对硬件的分析和信息页面,这也引起了人们对 XboxHacking 的兴趣。确实,还有许多其他人也留下了自己的印记。能够将这样一群技术高超的黑客视为论坛的贡献者,XboxHacker.Net 逐渐成长为一个技术 Xbox 信息、讨论和新闻的中心。

XboxHacker.Net 的瑰宝无疑是 XboxHacker BBS。网站围绕论坛和成员的活动展开。通常,最新的 XboxHacking 新闻只是论坛主题的链接和成员发布的帖子剪辑。论坛的目的是让对破解 Xbox 感兴趣的多元、多国籍人群共同为实现这一共同目标而努力。论坛提供了一个很好的地方,可以与同行黑客分享信息和讨论想法,同时也汇集了许多可能没有其他合作方式的天才黑客。看到论坛带来的进展,感觉非常棒。有一个特别的讨论让我印象深刻,持续了几天。一些成员在讨论第二代 Xbox 的新安全系统,寻找漏洞和绕过方法。当黑客们越来越接近解决方案,最终破解了改进后的 Xbox 的安全系统时,这非常令人兴奋。我们的数百名贡献论坛成员在很大程度上是 XboxHacker.Net 的成功以及 XboxHacking 世界总体进步的原因。

除了在 XboxHacker.Net BBS 上的活动外,毫无疑问还有许多其他团体在秘密地破解 Xbox。我知道的一个这样的团体在 IRC 上,其中包括贡献论坛的成员以及来自电子黑客地下世界的其他人。这里将不会提及名字。随着时间的推移,许多独立团体或个人的信息被转达给我用于报道。然而,尽管对 XboxHacking 的兴趣日益增长,参与努力的人数也在增加,但任何重大突破成为公众知识还需要一段时间。

在 2002 年夏季 modchips 公开后,XboxHacking 场景的步伐相当迅速地加快了。到那时,Xbox 的安全系统已被多个团体破解,modchips 对公众来说很快就会变得容易获得。在这个时候,工作大部分从硬件破解转向了软件开发。XboxHacker.Net 的姊妹网站 XboxDeveloper(http://www.xboxdeveloper.net)开始帮助整理 Xbox 可用的软件,尽管它从未达到 XboxHacker.Net 的水平。使用泄露的 Microsoft Xbox SDK 副本,程序员开始编写和移植各种 Xbox 应用程序,包括媒体播放器和 MAME 这样的模拟器。在 Michael Steil 的领导下,Xbox-Linux 项目(http://xbox-linux.sourceforge.net/)成功地将 Linux 操作系统运行在 Xbox 上。我推动启动了 OpenXDK 项目(http://sourceforge.net/projects/openxdk/),这是一个开源的开发工具包,将允许为 Xbox 开发软件而不受法律问题的阻碍,尽管这个项目只取得了部分成功。现在它由“Caustik”(Aaron Robinson)领导,他是凯斯西储大学的一名计算机科学学生。由于软件开发与硬件破解相比更具可访问性,为 XboxHacking 贡献的成员数量迅速增加。今天可用的 Xbox“自制”软件数量惊人,包括媒体播放器、控制台模拟器、实用程序以及原创游戏。

可信计算

信任是安全的基础,为了对您的安全系统有信心,您需要对您正在运行的硬件和软件有信心。可信计算机是一种经过架构设计以抵御可能损害机器可信性的攻击的机器。有许多构建可信计算机的方法,从自动柜员机模型的物理安全和防篡改,到不那么硬件密集型的解决方案,如 Xbox 所使用的。Xbox 符合可信计算更广泛的图景,因为它是第一个高调、广泛部署的可信 PC 实现之一。从某种意义上说,Xbox 给我们提供了一个关于未来可信计算可能性的暗示。

可信计算是一种可能颠覆性的新兴技术。在像互联网这样的临时网络中可信客户端的兴起,预示着能够实现安全且私密的在线金融交易,减少或消除计算机病毒的发生,以及减少或消除垃圾邮件。可信 PC 还可以用于安全地存储敏感数据,例如你的医疗和财务记录以及你的淘气或尴尬的秘密。可信 PC 的另一个应用是可靠地执行对用户数字内容访问权限和管理政策的强制。可信计算中的数字版权管理(DRM)方面可能会从根本上改变我们今天使用计算机的方式;我们中的许多人享受着伪免费内容和灵活版权实施的好处。基本问题不是内容管理政策的存在——实际上,内容管理政策对消费者是有益的。真正的问题是当管理你权利的政策可以由内容提供商单方面设定时。在当前的可信 PC 提案中,用户不被信任能够控制他们机器内部的一些关键秘密。相反,用户的机器的可信性证明信息(建立可信性所需的信息)部分由第三方维护。我们能依赖一个非选举的、不受监管的、有商业利益的第三方来决定谁可以进行商业活动、发送电子邮件,以及其他方面被视为可信实体吗?

可信计算就像一把枪。只要你是控制扳机的人,拥有一把枪是件好事。不幸的是,许多可信 PC 的反对者担心,在实践中,系统可能会部署带有预设的权利、政策和第三方可信确认资源,这些资源对消费者来说指向错误的方向。在好景时期,一家公司可能会制定有利于用户的隐私和安全政策,以吸引更广泛的客户群,但一旦第十一章敲响,或者公司被出售或以其他方式易手,这些政策可能会改变。有什么能阻止商人最初用用户友好的政策推广可信计算,然后突然转变为挤压钱包的 DRM 模式呢?道德?

退一步思考

“可信计算”这个短语存在一个问题:它已经变成了加密安全可信计算机的同义词。让我们退一步,只讨论构建可信计算机的替代方法。

在计算机领域,可信性一直很重要。然而,在计算技术的早期,由于机器非常昂贵,用于实施强大信任策略的硬件并不在消费者可触及的范围之内。例如,许多早期的机器配备了硬件内存管理单元(MMU)芯片的插槽。MMU 是通往可信硬件内存模型的第一步之一;MMU 的一部分工作就是执行页面级别的内存访问保护。MMU 作为可选件出售,因为当时它们相当昂贵。不幸的是,向可信硬件的转变在 MMU 处就停止了,部分原因是因为直到相对较近的时候,计算机网络才以任何主要形式存在。在一个非联网的世界里,数据只需要保护程序员错误和少数几个有权物理访问机器的用户。今天,计算机需要比 MMU 更强大的东西,需要一种能够在面对病毒和远程攻击者尝试利用细微的软件弱点来运行恶意代码的情况下提供信任的东西。

MMU 的硬件强制分页虚拟内存模型的自然扩展可能是带有标记内存模型的地址能力。内存标记是一组记录存储在内存位置中的数据或代码类型的位。在标记内存模型中,每个内存位置都有一组标记位,有点类似于在传统的错误纠正内存实现中,每个内存位置都与一些 ECC 位相关联。标记位帮助硬件执行数据类型管理策略;例如,标记为数据片段的内存位置永远不会被意外或故意地执行为代码。能力是由可信内核授予的指针,不能伪造。不可伪造属性最好通过标记位由硬件强制执行。许多架构也包含作为硬件能力一部分强制执行访问边界的功能。¹ 能力和内存标记并不是新概念;在 1961 年,Burroughs B5000 使用了能力(当时称为描述符)和标记内存来在硬件上保护,防止缓冲区溢出攻击,并将代码与数据隔离。² MIT PDP-1、Intel i432、IBM System/38 以及 Mach 和 Amoeba 操作系统也以某种形式实现了能力,这绝对不是使用能力或标记内存的系统完整列表。能力的安全属性也在许多学术研究中得到了证明,例如 EROS(极可靠操作系统)。³ 不幸的是,能力和标记内存从未进入主流 PC 架构的核心。安全和可靠性始终让位于成本、向后兼容性和性能。

这段简短的历史课表明,可信计算不需要像 Palladium 和可信计算平台联盟(TCPA)今天所提出的加密方法。事实上,仅凭加密本身并不能提供任何安全。安全密钥管理才是 Palladium/TCPA 中提供所有安全的关键。加密算法只是将密钥的安全性转移到用户的领域。

话虽如此,可以将能力和加密密钥进行类比。两者都需要一个可信的操作系统来管理它们的创建、分发和销毁。如果系统不能保护免受伪造密钥或能力的影响,两者同样脆弱。最大的不同之处在于,如果秘密密钥泄露,所有安全都会永远丢失。另一方面,能力是动态创建和销毁的,因此能力的泄露可能导致安全漏洞,但漏洞的范围和持续时间是有限的。在这方面,能力为计算机安全提供了一个更稳健的解决方案。

注意,仅依赖加密技术进行硬件安全仍然会使机器容易受到经典的缓冲区溢出式攻击和由于编程错误而造成的漏洞。软件状态的“测量”有助于通过在执行安全关键操作之前检测代码更改来减轻这种弱点,但测量并不是完美的解决方案。另一方面,在使用具有边界检查的硬件强制能力的系统中,缓冲区溢出攻击是不可能的。

内存标签也可以用来实现使用纯加密方法在可信计算中不可行的安全功能。一个例子是可信赖的分区秘密的并发处理。⁴ 在这个例子中,多个具有不同安全级别的线程在单个处理器上运行。硬件强制执行一项政策,即所有线程都将它们的权限级别印在它们访问的数据上。换句话说,每个计算同时在一个传统算术域和一个安全域中操作。

假设一个非分类线程将两个非分类数字相加并创建一个名为 foo 的数据。foo 的安全标签也与加法算术操作并行计算。在这种情况下,安全标签的结果是“非分类”。现在,假设一个绝密线程接触了 foofoo 的安全标签现在变为“绝密”。非分类线程不能再读取 foo,即使非分类线程有一个有效的 foo 指针;foo 必须被明确重新分类,才能再次被非分类线程读取。

这样一个严格分区的安全系统可以用来确保,即使在存在漏洞和内存泄漏的情况下(包括内核内存在没有内存清除步骤的情况下被重新分配给用户进程的场景),内部内核结构也永远不会对用户进程可访问。此方案还可以用来建立安全审计跟踪,这对于帮助程序员追踪安全漏洞的根本原因非常有用,并在安全漏洞发生时作为损害控制措施。

公平地说,可信计算加密方法的一个优点是,如果恶意者通过某种硬件手段获取数据——通过监听硬件或窃取硬盘——数据是无法被解密的。然而,用户可以选择在任何计算机实现中使用加密来保护数据,包括使用硬件能力和标记内存的实现。安全密钥管理的问题仍然是一个难题,但也许可以通过将加密智能卡读卡器集成到 PC 中来部分解决这个问题。

没有本质原因说明一个可信的 PC 实现必须使用 Palladium 和 TCPA 中提出的加密技术。本节回顾的技术,即能力和标记内存,可以用来以不涉及用户失去设置自己的访问策略风险的方式实现一个安全、可信的 PC。用户将始终完全控制自己的机器和秘密。

Palladium 与 TCPA 的比较

目前关于可信 PC 提案的混淆很多,即微软的 Palladium 和可信计算平台联盟(TCPA)。这两个提案之间有足够的相似之处,以至于许多人认为它们是同一件事,但每个倡议的目标是不同的。

TCPA 是一个多公司联盟,旨在创建具有一定可信度的计算机。值得注意的是,其大部分规范也可以应用于非 PC 平台。在 TCPA 中,可信度被植根于一个称为 TPM(可信平台模块)的安全硬件模块中。TPM 包含确保模块内包含的秘密永远不会通过软件攻击泄露的功能。它还包含诸如安全系统“测量”等功能,试图将 TPM 内的可信度转移到主机机器上。

相反,Palladium 是由微软单独创建的一个以 PC 为中心的整体安全概念。其组成部分之一是一个类似 TPM 的安全模块,但 Palladium 还要求对硬件芯片组和 I/O 端口的实现方式进行全面改革。芯片组需要强制执行来自所有潜在 DMA 源(如显卡)的内存安全策略。Palladium 还要求对键盘和视频子系统的 I/O 进行加密。

Palladium 对芯片组供应商、OEM 和微软之间合作的要求可能是一个潜在的重大缺陷。在今天的通用 PC 硬件行业中,没有足够的余地来支持广泛的加密安全改革的开销。此外,许多芯片组供应商没有实施安全系统的经验。在许多海外芯片组供应商面临的语言障碍之上,芯片组通常是在时间紧迫和注重成本的情况下开发的。在这些条件下开发的芯片组能被期望保护敏感的秘密吗?

Xbox 是当安全策略由一个机构定义而由另一个非常不同的组织实施时可能出错的一个例子。微软为一种可信赖的硬件制定了规范,即 Xbox。Xbox 中广泛使用了强加密算法,系统的主密钥被锁在复杂的硅片深处。然而,经验表明,可以通过组合一个未加密的调试端口、硬件初始化方案中的缺陷以及 CPU 指令指针边界情况处理中的错误来绕过 Xbox 的安全系统。这三个由三个独立方(组装承包商、Xbox 固件设计师和英特尔)犯下的微小疏忽,共同提供了一个方便的方法来击败 Xbox 的安全性。

这些疏忽中的每一个单独来看并不代表一个重大的安全问题。这引发了一个令人不安的问题:特定 Palladium 实现中的多少安全漏洞是由多个良性缺陷的叠加造成的。每个复杂的消费电子系统都有小错误或设计疏忽,尤其是在系统由多个独立实体构建,而这些实体的主要兴趣在于盈利时。

在消费电子行业,要么推出一个完美的产品,要么赚钱。不赚钱的产品会迅速被取消。因此,很难找到在所有方面都技术完美的消费产品。结果,保证像 Palladium 这样复杂的消费电子系统安全性的唯一实际方法就是将其投入市场,让黑客在许多年里随意攻击,直到所有的大漏洞都被发现并修补。

另一方面,TCPA 的 TPM 是一种为解决特定问题集而创建的设备,其范围比 Palladium 的小。因此,从市场角度来看,TPM 可能没有那么令人兴奋,但它可能更适合其预期目的。TPM 和 Palladium 都对硬件攻击较为脆弱,但 TPM 并不试图将安全要求扩展到第三方系统设计的领域。TPM 主要是一个安全密钥管理模块,可以检测主机系统的大部分修改和入侵。建立在这一基础之上的软件层完成其余的重活,买者自慎

破解可信 PC

当前对可信 PC 的提案对一些相当简单的硬件攻击较为脆弱,即使在没有任何集成监督或与漏洞相关的后门的情况下也是如此。

第一种攻击是我称之为“Surreptitious BIOS”,或 SPIOS(发音为“Spy OS”)攻击。SPIOS 可以用来击败依赖于可信 PC 的加密存储功能以防止未经授权的用户访问数据的 DRM 策略。基本思想是使用未经修改的 BIOS 以可信模式启动 PC,并将所有所需数据提取到系统 RAM 中,然后在交换 BIOS 镜像的同时执行系统热重启。

修改后的 BIOS 镜像可以用来从系统 RAM 中读取所需数据。所需数据可能是存储在内存中的会话密钥,或者是实际解密的数据本身,这取决于程序如何在内存中结构和缓存其数据。由于当前的可信 PC 规范要求基于 LPC 总线的 BIOS,因此可以使用廉价的替代固件设备(类似于在 Xbox 上使用的设备)来执行此攻击。应用程序程序员可以使用一些技术来使这种攻击复杂化,例如每次只将一个数据块解密到系统内存中,但许多这些技术会严重降低系统性能。如果禁用文件缓存和预取,系统性能的降低可能尤为明显。

另一种攻击是我称之为“Surreptitious RAM”,或 SPAM 攻击。这种攻击的目标是欺骗负责测量系统状态适宜性的可信例程。在 DRAM 芯片和内存连接器之间的插件内存卡上安装了一个设备,例如 FPGA 或 ASIC。这个设备监控经过的地址模式,或者它可能有一个额外的连接器,嗅探连接到加密模块 I/O 引脚的线的状态,该加密模块负责验证系统。

不论哪种方式,当系统测量正在进行时,SPAM 设备展示的内存镜像与未经修改、可信的系统状态一致。然而,在所有其他操作模式下,SPAM 设备展示的内存镜像被修改为执行用户想要的任何操作。这种修改可能非常微妙:只需在正确的位置翻转几个比特即可修改安全内核中的关键分支指令。

与 SPIOS 相比,该设备更强大,因为它在已启动并被认为是可信的系统上工作。它可以有效地对抗更广泛的 DRM 方案,以及本地机器和服务器之间的一些认证交易。然而,仅使用 SPAM 本身并不能将系统错误地识别为另一个已注册、受信任的系统,因为 SPAM 缺乏本地机器中防篡改安全加密模块和认证服务器之间共享的秘密。错误的系统识别可能需要从防篡改安全加密模块中提取密钥(可能,但不是简单的事情,并且很可能会破坏模块),或者以某种方式欺骗另一个已注册、受信任机器上的安全加密模块以提供伪造的身份。

SPAM 设备可以以相对较低的成本(高性能 FPGA 今天单件价格低至 50 美元)制造,并且安装非常简单。SPAM 可以直接集成到内存模块中(在这种情况下,它既作为信任违规设备,也作为内存扩展设备使用),或者作为安装在主板内存插槽和现有内存设备之间的堆叠配置的设备。在某些内存卡配置中,尤其是使用散热罩的配置,可能隐藏 SPAM 设备并将模块伪装成常规内存扩展设备。虽然这种方法很复杂,但对于存储在受信任的 PC 服务器上高价值机密的跨国公司或银行来说,这可能是一种值得尝试的攻击手段。

展望未来

当考虑可信计算的前景时,我们首先需要考虑目前提出的方案是否会提供它们承诺的所有好处,然后权衡这些好处与对消费者权利的潜在危害以及犯罪分子(增强的隐私可以用于善恶)的潜在好处。如果可信计算可以为在线业务提供完美的安全性,那么这可能值得潜在的风险。然而,本章中概述的场景表明,可信 PC 的安全性可能并不完美。

以 Xbox 为例。Xbox 是一个受信任的 PC 实现,只需 50 美元的无焊点模块就可以被黑客攻击。这为可以信任 Xbox 存储的秘密的价值设定了一个相当严格的限制。硬件修改芯片如此便宜,以至于它们可以通过复制游戏标题的成本来支付自己,或者如果你选择付费让某人帮你安装芯片,那么两个游戏就可以支付。

当然,盗版内容的道德和社会影响始终存在,以及新的立法,如 DMCA,其部分目的是将这些行为定为犯罪。不幸的是,目前摆在桌上的可信个人电脑提案在面临类似低成本的硬件攻击时也显得薄弱。因此,它们不太可能提供所需的安全级别,以保护高价值或非常尴尬的秘密。

事实上,无论是否违法,无论意图是善是恶,黑客技术都将被开发。因此,教育公众了解黑客技术,让每个人都了解他们“可信个人电脑”的限制,对消费者和公司来说是最有益的。最坏的情况是,如果数十亿美元被投资于可信计算,却只产生对消费者来说没有更大安全或隐私的净结果,同时通过糟糕的内容政策实施严重限制消费者的权利。

对于可信个人电脑的支持者来说,好消息是集成电路特征尺寸的缩小正在推动整个个人电脑的更高集成度。在十年内,今天的个人电脑将可以集成到单块硅片上。一旦 RAM 和 BIOS 完全集成到单块硅片上,破解系统将变得更加困难——但并非不可能。聚焦离子束(FIB)机器,这是芯片设计师和失效分析实验室使用的工具,可以切割和跳接纳米级特征。对于可信机器设计师来说,另一个好处是公钥处理器可能变得如此之小,以至于可以轻松集成到芯片中,特别是内存芯片,它们可以使用强加密来验证和加密它们的 I/O。

另一种可能有助于实现可信个人电脑的技术是集成抗篡改或篡改检测功能。例如,时域反射计(TDR)可以被集成到芯片的 I/O 单元中。TDR 可以通过识别电线电学特性的某些变化来检测电线上的窃听者。除了检测窃听者的能力外,集成 TDR 设备对于高性能 I/O 来说也是理想的,因为它们可以用来校准驱动阻抗和均衡/预加重滤波器,这些滤波器对于多吉比特速度的通信是必需的。

结论性思考

本书带您快速浏览了 Xbox 硬件破解,从焊接和拆解的基础到最新的项目和技巧。它还向您介绍了 Xbox 破解的社会方面:破解者是谁,以及社会、法律与破解之间的相互作用。

虽然在几年后,如何在 Xbox 中安装蓝色 LED 的细节可能不再相关,但你学习到的执行安装的技能将伴随你一生。此外,黑客和消费者面临的社会和法律问题将超越 Xbox,扩展到我们新兴的信息中心生活方式的每一个部分。

本书中的材料只是一个起点;外面有一个充满硬件的世界等待我们去探索。我希望这本书能为新手读者提供一个强大的起点,让他们成为探索者、修复者和一个日益充满、受控于以及依赖电子的世界中的创新者。

快乐黑客!

— bunnie@xenatera.com


¹ 使用标记能力的高效、高性能硬件实现精确的对象边界,可以在名为“具有嵌入式地址和几乎精确对象边界的功能表示”的技术笔记中找到,由 Jeremy Brown、J.P. Grossman、Andrew Huang 和 Tom Knight 撰写。http://www.ai.mit.edu/projects/aries/Documents/Memos/ARIES-05.pdf

² “Burroughs B5000 架构——20 年后仍然领先于时代?”由 Alastair J.W. Mayer 撰写。http://www.ajwm.net/amayer/papers/B5000.html

³ 最初由宾夕法尼亚大学的 Jonathan Shapiro(http://www.eros-os.org/)构思

⁴ 关于此类安全系统的更多信息,可以在名为“动态确保安全信息流的最低可信计算基础”的技术笔记中找到,由 Jeremy Brown 和 Tom Knight 撰写。http://www.ai.mit.edu/projects/aries/Documents/Memos/ARIES-15.pdf

附录 A -

哪里可以购买您的黑客装备

在硬件黑客领域开始时,一个重大的心理障碍是黑客工具的感知不可用。虽然 Radio Shack 库存了一些组件和工具,但这些组件价格昂贵,而且大多数工具都难以与今天的微型组件一起使用。本附录列出了几家提供合理价格优质选择的组件和工具供应商。本附录还包括了进行本书中项目所需的基本工具的 Jameco 订单号。您可以直接将这些订单号输入 Jameco 的安全订购网站,以帮助您快速开始。

爱好者供应商

有许多种类的组件和设备分销商,从主要服务于大企业的,到服务于个人、爱好者和维修人员的。在与为大企业提供服务的分销商打交道时,您可能会感到一些挫败感。这些分销商服务于高容量账户,因此账户由指定的销售代表服务。因此,可能难以获得小订单的全面零件目录或定价和库存信息。本节中列出的供应商对个人订单友好,其集体库存将存储您可能需要的几乎所有零件。

供应商名称 供应商联系方式 专长和备注
Digi-Key www.digikey.com 1-800-344-4539 (电话) 1-218-681-3380 (传真) 广泛的原装制造组件选择。爱好者友好,服务迅速。订单低于$25 收取$5 处理费。网站提供实时库存和定价检查信息,数据表和参数搜索工具。
Jameco www.jameco.com 1-800-831-4242 (电话) 1-800-237-6948 (传真) 经济实惠的爱好者友好供应商。组件包括原装和过剩库存。价格合理的工具选择。订单低于$20 收取$5 处理费。提供广泛的 DIY 套件。
MCM Electronics www.mcmelectronics.com 1-800-543-4330 (电话) 1-800-765-6960 (传真) 专业消费电子产品服务/维修工具和零件,以及常用工具和组件。销售难以找到的安全位和替代零件。网上购买无最低订单要求,收取$2.95 的固定处理费。
Mouser www.mouser.com 1-800-346-6873 (电话) 1-817-804-3899 (传真) orders@mouser.com 库存有优质原装组件的工具和组件供应商。爱好者友好,无最低订单要求,无处理费。
Newark www.newark.com 1-800-463-9275(电话) 较大、传统的组件分销商。组件选择广泛,但并非所有组件都有库存;你可能需要等待几周才能完成某些订单。如果你在其他爱好友好型分销商那里找不到组件,这是一个很好的去处。所有订单低于$25 的都将收取$5 的处理费。
Fry's Electronics www.frys.com 货物齐全的零售电子产品商店,提供合理的组件和工具选择。如果你不喜欢目录购物,这是一个很好的浏览场所。仅在加利福尼亚州、德克萨斯州、俄勒冈州和亚利桑那州有售。
McMaster Carr www.mcmastercarr.com 机械设备、金属材料和机床的供应商。一个可以购买原材料金属板和紧固件来完成项目的场所。网站内容全面且实用。
FindChips www.findchips.com 自动化零件搜索引擎。搜索数十个分销商的零件。大多数爱好友好型供应商都列在这个搜索引擎中。

表 A-1:组件和设备供应商表。

准备好的设备订单表

本节包含 Jameco 销售的工具精选列表,你可以订购这些工具来为黑客活动做好准备。“基本”订单表包含打开 Xbox 所需的所有零件和驱动器,以及一些基本的焊接工具。“高级”订单表包含一套有用的工具和实用程序,但价格较高,预算有限的人可能只会根据需要订购。

除了这些订单表中的工具外,你还需要一些小零件来完成第一部分描述的项目。请参考各章节的介绍,以获取所需零件的清单。

基本订单表

下表列出了你将需要用于完成本书中描述的项目的基本工具。你可以通过访问 Jameco 的网站,www.jameco.com,并点击左侧的黄色“快速订购”按钮来订购这些零件。输入此处列出的 Jameco 零件编号,开始黑客活动!(价格可能会有所变动。)

描述 Jameco 零件编号 价格
16 至 30 瓦可调焊铁 116572 $18.95
1/32” 锥形斜面焊铁尖端 35326 $4.49
60/40 凯斯特焊锡芯焊料小包装 73576 $2.59
2 盎司凯斯特松香膏 73584 $1.59
焊锡膏去除剂 175986 $2.49
焊铁尖端清洁剂和养护剂 132986 $4.95
26 件 SAE 爱好工具套装 170069 $14.95
剥线钳,22-30 号线规 127870 $4.95
总价 $54.96

26 件套 SAE 爱好工具组包括拆卸 Xbox 所需的所有位、驱动器和螺丝刀,包括 T-10、T-15 和 T-20 六角螺钉位。我在上面的订购表中包括了 1/32 英寸的锥形斜面尖端,因为焊接铁自带了一个巨大的 1/8 英寸凿形尖端。1/8 英寸尖端对于焊接小型国家以及在你精细间距的组件上创建焊接短路很有用。锥形斜面和凿形尖端具有一个扁平区域,这有助于快速传热,因此比锥形锐尖更容易使用。我还包括了一些焊接铁尖端清洁剂和一些松香膏。它们有点贵,但它们会让你的生活容易得多,相信我。

高级订购表

下表列出了一些值得拥有的工具,但价格足够高,你可能只有在预计要进行大量黑客活动时才应该购买它们。

  • 如果你打算进行一些中等程度的焊接工作,那么焊接铁架和海绵是必不可少的。铁架可以安全地存放热焊接铁尖端,从而减少烫伤和火灾的风险。

  • 尝试使用 1/32 英寸的半凿形尖端进行焊接。你可能发现你更喜欢它而不是锥形斜面尖端。

  • 防静电手腕带总是随身携带的好主意,尤其是如果你倾向于穿着和鞋子会产生静电。

  • SMT 移除套件在尝试移除较小的 SMT 组件时非常有用。

  • 多用表是一种非常好的多功能测试、测量和诊断工具,应该随时随身携带,并在家庭或宿舍的各个地方都有应用。许多型号的多用表可供选择;这里列出的型号提供了最低价格下的最多功能。我已经试用过它,并且效果很好。

  • 列出的线剥器和压接工具对于电源更换项目非常有帮助。压接工具由 Digi-Key 销售,而不是 Jameco。压接工具价格略高,但与低于十美元的工具不同,它具有形状压接模具,可实现高质量的免焊接压接。

描述 零件编号 价格
焊接铁架 36329 $4.25
焊接铁架海绵 134631 $2.99
半凿形 1/32”尖端 35078 $4.49
可调防静电带 159257 $7.95
SMT 组件移除套件 141305 $21.95
多用表(伏特、欧姆、安培、法拉、温度、频率、二极管/晶体管) 177480 $49.95
16-26 号线剥器 127861 $4.96
压接工具(从 Digi-Key 订购) WM9999-ND $36.19

附录 B -

焊接技术

本附录将解释焊接的基本知识以及一些更高级的表面贴装焊接技术。如果你在阅读时尝试焊接技术,你会从本附录中获得最大收益。Jameco Electronics(www.jameco.com)销售各种需要通孔组装的项目套件,你可以用来进行基本的焊接练习。如果你想要练习 SMT 组装技术,TopLine(www.topline.tv)提供经济型练习套件,使用空白组件,而 MCM Electronics(www.mcmelectronics.com)提供实用的表面贴装焊接练习套件。(我强烈建议你在尝试焊接你关心的 SMT 组件之前,先练习你的 SMT 焊接技能。)

焊接入门

焊接的基本技术相当简单:将焊锡铁头的尖端楔入组件引脚和电路板焊盘之间的空间,以加热这两块材料。一旦它们足够热,逐渐将一些焊丝喂入焊缝,直到形成漂亮、平滑的焊料圆角。实际上,焊接需要一些练习和经验,才能在没有不良焊缝的情况下焊接一个有超过一千个焊点的典型电路板。为了创建良好的焊缝,热的液态焊料必须“润湿”主体材料,以便建立连接。因此,手工焊接的真正艺术在于理解如何保证焊料润湿。

你可以通过观察来判断液态焊料是否润湿了一块金属。润湿的焊缝看起来像熔化的焊料已经失去了所有表面张力;液态焊料是闪亮的,并且在工作区域上流畅地流动。在相反的情况下,焊料表面看起来是暗淡的,并且倾向于在焊锡铁头周围形成球状,而不是向外流动。

使用助焊剂

焊料未能润湿主体金属,因为空气中的氧气或污垢和油脂已经与金属发生了反应。在这种情况下,你可以将助焊剂应用到你的工件上,以分解这些外来化合物。助焊剂这个词来源于拉丁语fluxus,意为流动。大多数焊料都内置了助焊剂核心,以增强可焊性。如果你仔细观察一段切割的焊料,你可以看到助焊剂核心被焊料合金包围。始终使用带有助焊剂核心的焊料,否则你将陷入痛苦,试图让焊料润湿。几乎所有专门为电子产品制造的焊料都有助焊剂核心,但你在五金店偶然购买的焊料可能没有助焊剂,并且是用于管道连接等目的的。当你加热助焊剂核心焊料时,会有一小股助焊剂蒸汽上升。在工作区域附近放置一个小风扇可以将烟雾吹走,防止吸入。

一个常见的初学者错误是过分依赖膏状焊料。通常,膏状焊料中含有的助焊剂不足以使焊料润湿。在这种情况下,你需要额外施加助焊剂。原始的助焊剂通常以液体或膏状形式出现,因此应用起来很方便。在液体形式下,只需用牙签的一半滴上一滴助焊剂。将牙签折断,使断裂处略微粗糙。将牙签的断裂端浸入助焊剂中,一小滴助焊剂会附着在末端。用细尖画家的画笔将液体助焊剂涂覆在大面积上,但务必在完成后清洁画笔,否则几天后它将变得粘稠且无法使用。助焊剂滴管也很方便,但价格昂贵。助焊剂滴管是一个顶部有细长毛细管的瓶子;当你倒置瓶子时,助焊剂会缓慢地从毛细管中滴出。在膏状形式下,可以通过将任何碎片,如牙签或一段实心电线,浸入助焊剂膏中来施加助焊剂。最后,助焊剂笔对初学者来说很方便,因为它们将助焊剂的储存和分配结合在一个方便且价格低廉的包装中。助焊剂笔没有其他助焊剂应用技术的精度或质量,但它们很方便,适合偶尔使用。

许多助焊剂在使用后需要清理。助焊剂会随着时间的推移而硬化,使得未来的维修变得困难,它们会慢慢腐蚀电路板,并且会吸收水分而变得导电。传统的焊接助焊剂是一种树脂助焊剂。树脂助焊剂需要使用强溶剂,这些溶剂易燃且有毒。因此,我倾向于推荐水溶性助焊剂或无清洁助焊剂。水溶性助焊剂可以通过用水冲洗电路板来去除。最好使用蒸馏去离子水,但我发现大多数温水也很有效。当我必须清洗大量电路板时,我会把它们扔进洗碗机(食物过滤网已清洁且无洗涤剂!)。电路板清洗后,将它们放在一个导电、干净的饼干盘或铝箔上,然后放入烤箱低温(约 200°F)烘烤大约一两个小时,或者直到所有水分蒸发。务必不要将烤箱温度调得太高,否则被困在元件孔隙中的水会变成蒸汽,导致它们开裂或爆炸。大多数元件设计为“工艺密封”,因此用水清洗它们是可以的。然而,对于连接器和开关要小心;你可能需要用一块 Kapton 胶带覆盖它们,以防止水分污染。

警告

图片

不要在电路板上使用酸性助焊剂。它们会 腐蚀电路板和元件,并随着时间的推移导致故障酸性助焊剂经常困扰那些使用旨在用于管道焊接的焊料和助焊剂的初学者

初学者提示

具有许多引脚的元件在焊接之前需要对齐并固定到位。如果元件是表面贴装类型,可以通过焊接设备对角线两端的两个引脚来固定它。固定元件后,重新检查对齐情况,以防元件在固定过程中发生偏移。如果元件是通孔类型,你需要使用遮蔽胶带在翻转板子时将其固定。固定元件的角落引脚,并在焊接所有引脚之前检查它是否与板子水平。(遮蔽胶带有一定的弹性,通常你需要在按下元件以使其与板子水平时加热其中一个固定的角落。)

Kapton 胶带是工作台上非常方便的东西。由杜邦公司制造,Kapton 可以承受高达 500°F 的温度,远高于焊料的熔点。它非常适合遮盖你不想焊料接触的附近区域。然而,Kapton 胶带价格昂贵,所以只有在它将接触热焊料的情况下才使用。

焊料无法润湿过冷的金属。在焊接大型接头或焊接连接到大型铜板的接头时,这是一个常见问题。在这些情况下,连接的金属会传导足够的热量,使得接头永远不会达到焊料的熔点。解决这个问题的方法是使用更强大的烙铁(但请注意——非常大的烙铁的热量也可能导致电路板上的走线脱落),或者在使用焊料之前,让烙铁与接头保持更长时间的接触。加快加热工作区域的一个小技巧是将一小滴焊料喂入烙铁尖端,在那里它正在加热东西。即使焊料不会在板上润湿,烙铁尖端上的液态焊料增加了烙铁和板之间的有效接触面积,热量会更快地传递到板上。

在将焊料应用到烙铁尖端后,有时你需要旋转烙铁,同时保持与接头的接触,以便让熔化的焊料接触到板。你可以通过仔细观察光线如何从它反射来判断一个元件引脚或板上的焊盘是否足够热。电路板上的元件引脚和焊盘通常有一些镀层,通常是焊料制成的。在正常条件下,这种焊料镀层略带哑光。然而,当加热到足够高的温度时,光泽从哑光变为几乎完美反光。为了了解这看起来像什么,尝试使用上述技术加热一个大的正方形焊盘,使用烙铁加热板。你通常可以看到熔化前沿随着烙铁加热板而传播。

警告

图片

如果你使用的是非温度控制的焊铁,请使用你能找到的最小功率焊铁来完成工作。这有助于防止板子损坏,因为过度的热量可能导致铜迹从板上剥离。

表面贴装焊接

掌握表面贴装焊接的技能需要一点耐心、实践和好工具。除了基本的焊接套件外,还需要镊子和放大镜。

一副细尖的镊子是表面贴装组件焊接的必备工具。在焊接过程中,需要使用镊子安全地处理表面贴装组件,因为小组件会迅速升温,足够热到烧伤手指。镊子还必须用来固定小组件,防止它们在液态焊锡熔化和冷却时被表面张力拉扯。镊子的尖端应该足够小,可以夹在你要工作的最精细表面贴装组件的引脚之间。这样,你就可以在焊接和检查过程中使用镊子操作单个引脚。

镊子有很多等级。评级基于尖端锋利度、质量和耐用性,尖端的对齐,以及镊子的弹簧动作。高级镊子价格略高,但如果你打算做大量的表面贴装焊接,这笔投资是值得的。专注于生产供应的分销商,如 Future-Active Electronics(www.future-active.com),销售了合理数量的优质镊子。

表面贴装焊接最大的挑战是能够看到你正在操作的内容。你的双手有轻松且反复操作肉眼无法看到的微小物体的能力。对于焊接的理想放大解决方案是一个光学立体显微镜,就像用于检查生物样本的那种。不幸的是,这些显微镜非常昂贵,更好的型号售价大约相当于一辆二手车的价格。

一个更经济的选择是使用桌面放大镜。许多制图/艺术用品店销售这类镜头,大多数办公用品店至少销售一种带有内置放大镜的灯具。这些放大镜有助于组装,但它们缺乏彻底检查焊接工作的能力。应使用相对便宜的高功率便携式放大镜,如珠宝放大镜或校对放大镜,来检查完成的焊点。

简单组件的技术

简单的表面贴装组件,如电阻器、电容器、电感器和小型半导体器件,如晶体管和二极管,很容易安装在电路板上。让我们看看安装这些组件的技术。

**

图 B-1:(1) 在目标组件的一个焊盘上涂上一滴焊锡。在这种情况下,目标组件是 C25。(2) 涂上焊锡后的焊锡滴图片。(3) 使用镊子调整目标组件的位置,然后使用烙铁加热,直到初始焊锡滴流动到组件引脚周围。(4) 焊接剩余的组件焊盘。

首先,在组件的一个焊盘上放置一小滴焊锡,然后使用一对镊子放置并调整组件的位置,使其覆盖在其焊盘上。一旦你对组件的位置感到满意,就对焊锡滴加热,直到它融化,组件沉入其焊盘上的位置。在调整组件的对齐时,继续加热。移除热量,等待焊锡冷却并固化。再次检查组件的对齐,然后将组件的其余接触点焊接到位。如果第一个焊点看起来暗淡或薄弱,在所有其他引脚都焊接完毕后,用更多焊锡重新加热一次(见图 B-1)。这种技巧适用于两脚或三脚组件,以及具有宽间距的多脚组件,例如 50 密耳间距的小型封装 IC 器件。

在焊接这些组件时,你可能会遇到的最困难的情况是,当组件的一个或多个引脚连接到一大块铜上,例如电源平面时。在这种情况下,必须在焊锡润湿并粘附到电路板之前,对 PCB 焊盘施加大量热量。当这种情况发生时,请注意,焊锡会氧化并形成球状,与电路板接触不良。如果出现这种情况,添加少量焊剂以帮助增强熔融焊锡的润湿作用。

提示

图片

“干燥”的烙铁头在加热大面积铜或连接到电源平面的焊盘时会遇到困难。提高烙铁热量传递速率的一种方法是在烙铁尖端放置一小滴熔融焊锡,并通过熔融焊锡滴接触电路板。这个滴液会扩散并局部加热电路板,并建立一个良好的热连接,更有效地传递热量。一旦添加更多焊锡,这将最终导致更好的焊接连接。

复杂组件的焊接技巧

今天,大多数集成电路组件都可用某种细间距表面贴装封装。这种封装一开始可能令人望而生畏,但只需通过一些简单技巧和提示进行少量练习,就可以有信心地安装这些部件。安装细间距表面贴装组件的过程与安装简单表面贴装组件的过程非常相似,对于典型中等尺寸的表面贴装封装,这个过程不应超过几分钟。

第一步是使用芯片上的两个角落引脚将组件在电路板上固定。如果第一次尝试对齐不正确,可以通过加热两个角落中的一个,同时将芯片推向所需的对齐方向来轻松纠正(见图 B-2)。请务必注意对齐的准确性:对齐不正确的芯片在焊接芯片时会导致无尽的挫败感。

图 B-2:首先,在芯片的两个相对角落的每个角落焊接一个引脚。此图中的箭头指示了本例中使用的角落。

下一步是在芯片周围涂上一层薄薄的焊锡膏。这将增强焊锡在芯片引脚上的润湿作用,并使焊锡能够吸到组件焊盘上,而不是在引脚之间,这会导致短路(见图 B-3)。

小贴士

在布局电路板时,应使用超长焊盘来放置细间距表面贴装组件。额外的长度会使手工焊接更容易,尽管这也会使布线稍微困难一些,并导致电路板尺寸略有增加。额外的焊盘长度有助于将多余的焊锡从芯片引脚上吸走,从而减少焊桥的可能性。

一旦所有引脚都均匀地涂上了焊锡膏,将焊锡铁的尖端装上一个小焊锡球,并将其压在未焊接的引脚上。焊锡球会吸到组件引脚下方的空间中。重复此过程,直到所有引脚都涂上焊锡。在此阶段,如果多余的焊锡桥接多个引脚,请不要担心。完成所有引脚的焊接后,使用铜脱焊带(焊锡吸球)来去除任何焊桥,如图 B-4 所示。

图 B-3:在芯片周围的引脚上涂上一层薄薄的焊锡膏。在此图中,使用经常蘸取焊锡容器的废线将膏状焊锡膏涂上。

你几乎完成了。最后,确保所有引脚都牢固地焊接到位。如果没有显微镜,很难通过视觉检查来完成这项工作。相反,可以用针或镊子的尖端拉引脚,如图 B-5 所示,以稳定、均匀的动作沿着引脚拖动。未焊接到位的引脚会稍微移动。如果它们移动了,可以通过将它们推回原位并给引脚上一点焊锡来修复它们。

注意

在焊接电路板后,始终检查电源短路 。一些焊桥可能是微小的树枝状晶体, 而一些焊桥会在芯片下面的引脚下方形成。使用设置为测量电阻的多用电表检查电源短路。不要使用可听连续性模式,因为大型高速计算机板通常 在电源轨之间具有很低的(几欧姆)电阻,这足以在许多连续性表上注册短路。此外,在测量电源线之间的电阻时,等待一秒钟或两秒钟,以便测量稳定。在大型电容器充电到电源线上的初始电阻将会非常低。

一旦你的组件被焊接好,请使用温和的溶剂,例如异丙醇,和棉签(如图 B-6 所示)清理多余的焊剂。清理工作很重要,因为它使得视觉检查更容易,同时也有助于在调试过程中更容易地探测芯片引脚。此外,清理也很重要,因为许多焊剂随着时间的推移会结皮并捕获污染物,这会妨碍未来的维修。

图片

图 B-4: (1) 在烙铁尖端熔化一小部分焊剂。 (2) 将此焊剂转移到组件的引脚上。重复步骤 (1) 和 (2),直到所有引脚都焊接好。 (3) 焊桥,用箭头指示,将在许多引脚上形成。 (4) 使用一小段铜脱焊带移除焊桥。

移除组件的技术

移除表面贴装组件有许多技术,其中许多需要特殊工具,例如镊子式烙铁或热风枪。镊子式烙铁适用于移除较小的表面贴装组件,尤其是在密集排列的板上。它们相当快速且高效,合适的镊子式烙铁会将组件的引脚保持相对良好的状态。然而,它们也相当昂贵,并且需要一些练习才能确定移除芯片时使用的正确时机和压力。

图片

图 B-5:使用镊子或针沿芯片侧面施加稳定而有力的力来移动引脚。焊接不良的引脚会略微弯曲。箭头指示运动方向。

图片

图 B-6:使用浸有温和溶剂的棉签清理焊剂残留物。

一种更简单、更经济的解决方案是使用热风枪,就像在五金店出售的用于移除亚麻地板砖的热风枪一样。热风枪会加热整个电路板区域,组件会从其引脚上浮起,对引脚造成的损害最小。这种技术的缺点是它不够精确,因此它不是用于再次使用电路板的芯片移除的理想解决方案。因此,热风枪在从损坏的电路板上回收好芯片方面最为有效。使用热风枪的另一个问题是,热量可能会使电路板变形或导致吸收了水分的芯片发生破坏性故障。这种称为“爆米花”的故障模式发生在芯片内部的水分沸腾但无法逃逸时,导致压力累积,最终在破坏性释放事件中达到顶峰。在潮湿环境中运行或用水清洗过的芯片和电路板,在用热风枪脱焊之前,应在烤箱中烘烤约 200 至 250°F 几小时。

另一个对业余爱好者特别有吸引力的选择是将焊点重新合金化,使其在非常低的温度下熔化,低于 300°F。一家名为 Chip Quik(www.chipquikinc.com)的公司拥有这项技术的专利,并且可以从许多供应商处购买移除套件,包括 Jameco(订单号 141305)。这种技术之所以吸引人,是因为它不需要特殊设备,而且很容易且相对安全,如图 B-7 所示。

要这样做,首先在芯片引脚上涂上焊剂,然后将芯片移除合金熔化到要移除的组件的引脚上。这将在芯片周围形成一大滴低熔点合金。接下来,通过将焊锡铁的尖端拖过合金滴来加热整个合金滴。芯片和合金中储存的热量将使其保持熔融状态足够长的时间,以便整个芯片可以轻松地从其引脚上滑落。最后,通过用焊锡铁加热并然后用棉签擦拭来清理低熔点合金。合金可以从电路板和芯片上相对容易地擦拭掉。

这种重新合金化技术保留了移除芯片的引脚以及电路板上的焊盘的完整性。这种技术的缺点是清理合金可能会有些混乱,并且合金的微小颗粒可能会卡在相邻芯片的引脚之间。(在清理时小心可以防止这个问题。)另一个缺点是移除芯片会消耗移除合金,因此使用这种合金大量移除芯片可能会在长期内变得昂贵。幸运的是,对于大多数业余爱好者来说,芯片移除是一种相当罕见的情况。

“球栅阵列”(BGA)封装是一种表面贴装封装,由于其高电气性能和密度,正变得越来越受欢迎。这些封装通过在封装下方的较大阵列的焊球连接到电路板上。显然,这种封装不能使用传统的烙铁进行焊接。此外,由于大部分焊点都深深埋在封装下方,BGA 封装的检查非常困难。唯一可行的将这些组件连接起来的方法就是使用烤箱,将整个电路板和组件加热到所有焊球融化的程度。通常,这些 BGA 封装的对准是通过某种机器的帮助来完成的,而 BGA 封装的检查则是通过 X 射线或超声波成像来完成的。

安装这类封装所需的设备非常昂贵,因此业余爱好者安装 BGA 封装设备的最佳方式是支付给专业组装厂来处理。例如 Naprotek(www.naprotek.com)这样的公司,它们专门从事快速、小批量原型制作,将以相当合理的费用安装 BGA 封装设备。在安装 BGA 时,一定要要求提供该部件的检查照片;照片带来的安心感值得额外的费用。BGA 部件也可以被移除并重新焊球,尽管这个过程可能比焊接过程贵得多。

图片

图 B-7:通过加热焊点来移除芯片。(在开始此过程之前,用焊剂准备好芯片引脚。)(1) 将重熔化合物熔化到所有芯片引脚上。重熔化合物呈线状。(2) 通过在金属上拖动烙铁来加热芯片周围的金属球。所有重熔的焊料都会变成熔融状态,此时可以推动芯片离开其焊盘。(3) 通过加热并用棉签擦拭来清理电路板和芯片上的重熔化合物。(4) 结果,芯片被干净地移除。

附录 C -

进入 PCB 布局

本附录将介绍 PCB 设计和布局过程,并概述你为实现设计目标可能需要的工具,包括针对预算有限的产品和技术。我通过展示一些简单的设计来帮助你开始你的硬件冒险。

哲学和设计流程

印刷电路板是硬件黑客的画布,CAD 工具是画笔。像任何工程或艺术学科一样,在印刷电路板设计和布局方面建立专业水平需要实践。幸运的是,低成本 PCB 原型制作服务和免费(或几乎免费)的 CAD 工具使得 PCB 设计和布局成为一种既经济又容易接触的爱好。

PCB 的设计和布局是两个紧密相连的任务。在设计布局的各个阶段,都需要进行权衡取舍。有时一个组件可能无法安装,或者某个部件可能不可用,这时你将不得不修改原理图设计以适应这种短缺。在其他时候,你可能需要进行高级设计变更,或者发现一个错误,PCB 将需要更新以反映这些变更。根据我的经验,快速完成成功的 PCB 设计的关键在于在设计各方面保持灵活性。

细化你的想法

PCB 设计过程始终从你的想法开始。你需要做的第一件事是清楚地了解你试图构建的内容。你前期了解的越具体,设计过程就会越容易。你应该有一个关于最终板子大小、成本以及当然是什么功能的想法。我总是发现绘制草图很有帮助,在大型项目中,编写设计文档来帮助我组织和记录我的想法也很有用。

对于前几个设计,最困难的步骤之一将是确定一个想法,因为你不知道有哪些类型的元件可以用来实现你的想法,以及你将不得不设计哪些现实世界的约束。开始的最佳方式是找到一个与你想法非常相似的想法,并在此基础上构建你的想法。(许多芯片制造商提供免费的应用说明和设计样本,这是一个很好的起点。)另一种定义你的想法的方式是学习现有产品:如果你想制作一个闹钟,拆解一个现有的闹钟看看它是如何制作的。

原理图捕获

一旦你有了你的想法,你需要创建一个原理图。原理图是你想法的符号表示,以一系列元件符号和虚拟线表示。

大多数原理图捕获软件都附带一个元件库,以帮助加速原理图捕获过程。然而,如果您在库中找不到所需的元件,您将不得不自己构建原理图符号。所有原理图符号都与 PCB 组件封装相链接,这是 PCB 板上与组件配合的铜质图案。

错误的一个常见来源是没有检查符号与封装之间的链接:16 引脚 DIP 封装不适合 16 引脚表面贴装连接器,而大多数设计工具无法区分这两者。因此,请确保您的封装分配都是正确的,并且对原理图符号进行双重和三重检查。特别是,始终检查和重新检查电源引脚,因为它们可能引起最困难和最具破坏性的错误。考虑让朋友也检查符号,以避免重复错误或无意中让错误通过。(对于简单的元件,这种冗余可能听起来很愚蠢,但对于有数百甚至数千个引脚的元件,在检查过程中你的大脑可能已经变成了一团糟,这时这种冗余变得绝对必要。)

从一开始就注重细节是捕获原理图最重要的技能,这可以让你避免后期遇到令人头疼的故障。每个组件上的每个引脚都有其存在的理由,如果任何引脚未连接,你应该理解为什么这样做或那样做是不合适的。为此,阅读产品数据表,包括每一页和脚注。不要忽视需要上拉电阻来设置启动条件、电容来滤波或稳定系统等细节,否则你很可能会遇到更多令人沮丧的故障。

figure_C-1

图 C-1: 从想法到成品的设计过程。

设计规则检查器有助于发现原理图中的某些错误,但它们执行的检查通常非常基础,因此只能捕获最明显的错误。典型的检查可能包括捕获重复的元件标识符、悬空网络和浮动输入。

除了传统的设计规则检查器之外,你还可以设计自己的简单检查。例如,许多设计工具执行“网表奇偶校验”,这可以通过使用 Perl 脚本或电子表格程序相对容易地生成。网表奇偶校验是一种启发式检查,它统计连接到每个网表的组件数量,然后按连接数量排序。排序列表顶部的“单引脚网表”几乎总是原理图捕获期间出现的打字错误(拼写错误的网表名称)的指示。快速浏览整个排序列表可能会有所帮助,以确保所有信号组具有相同数量的连接。大多数信号总线与总线中每个信号连接的数量相同。你可以在一个下午创建一个工具,使你的原理图捕获程序能够进行网表连接计数检查,通过找到它将捕获的错误,你无疑将节省无数的时间和金钱。

在将原理图导出到板级布局工具之前,你应该对原理图物料清单中的所有部件进行排序。通常,关键部件可能会出现短缺,这时原理图捕获需要重新设计以应对短缺。通常,更改组件封装分配是唯一必要的重新设计。修改原理图设计以应对制造商的短缺,可以避免在完成的板级布局上做出更改的困难任务。

板级布局

板级布局程序的输入是一个带有组件封装信息的网表。网表是每个组件和引脚及其连接的中间表示。网表提取是一个高度自动化的过程,但将原理图符号与 PC 板封装相关联并不总是得到很好的管理。

符号到封装相关联的困难源于单个部件的多种封装选项。例如,晶体管的符号可以同样表示一个微小的 SOT-23 封装设备或一个巨大的 TO-3 封装设备,确保在网表提取期间选择正确的封装取决于你。始终在组件放置在原理图中时检查隐含的封装*,而不是在网表转换期间一次性检查,或者更糟糕的是,在放置或最终设计审查期间检查。

一旦你有了完成的网表,你就可以进行板级布局了。

板布局程序的另一个外部输入是设计规则。设计规则由板制造公司设定,包括最小走线宽度、最小走线间距、最小孔径、最小通孔环和电源及布线层的数量。具体的设计规则取决于你选择的过程,而这又取决于你能承担的费用。最佳工艺可以提供 2 密耳(1 密耳等于 1/1000 英寸或 25.4 微米)细的走线,以及直径大致相同的激光钻孔盲孔/埋孔,但制造费用远远超出了典型爱好者预算的不到一百美元。更典型的爱好者工艺具有 6 密耳的走线/间距设计规则,以及 15 密耳的最小完成孔径,采用两层或四层铜。(你可以在附录末尾找到板制造公司的列表。)

板布局包括两个阶段:放置和布线。智能组件放置将大大简化布线任务。一般来说,目标是放置所有组件,以使连接尽可能短,使用尽可能少的通孔,以最小化噪声、延迟和信号损失。某些组件的放置,如连接器、开关和电源组件,受到很好的约束,给你留下的选择很少。对于其余的组件,对设计的理解将帮助你确定哪些组件应该获得最佳的放置。

完成放置后,以 1:1 的比例打印设计,并通过将实际组件填充到打印布局中来验证组件是否适合其相应的焊盘。如果你打算使用带有组件的插座,务必使用插座来验证 1:1 的绘图,因为插座比组件本身需要更多的空间。这项检查确保你所有组件都采用了正确的封装类型,所有组件轮廓都是正确的,并且每个组件之间有足够的间隙,以便于组装。在 1:1 的绘图上还需要检查所有连接器的方向和引脚排列,因为很容易颠倒连接器或在使用电路板上的错误性别焊盘。在处理芯片时也要小心,尤其是那些具有细间距表面贴装引脚的芯片。确保不要弯曲引脚,并遵守正确的静电控制协议。

一般放置和布线 指南

这里有一些放置和布线指南的简短列表。记住,这些只是一般建议,无疑会有一些情况不适用。

在表面贴装器件上留出通孔扇出空间 指南

与曾经是事实标准的旧式通孔元件相比,表面贴装元件提供了更大的密度优势。然而,表面贴装元件仍然需要通孔过孔来实现布线,尤其是在复杂和/或自动布线设计中。这些布线过孔被称为“扇出”过孔,用于 SMD 焊盘。图 C-2 和图 C-3 展示了在表面贴装元件上使用扇出过孔的应用。

解耦电容器完美地安装在 SMD 焊盘

在典型的数字设计中,最常见的无源元件是解耦电容器。这些微小的电容器无处不在,如果它们放置不当,可能会消耗宝贵的布线和过孔扇出空间。如果你愿意创建双面表面贴装板,解耦电容器可以放置在目标元件焊盘相对的板面上。通过将这些元件放置在元件焊盘空间下方,你不会消耗任何过孔扇出区域。实际上,一个放置得当的解耦电容器可以共享元件电源引脚使用的电源走线。图 C-2 左下角的视图清楚地说明了这一技术。(在某些特殊情况下,你可能不想这样做,下一节将说明。)

图 C-2: 电路板布局的四个视图。从左上角开始,顺时针方向:带有元件的制造电路板;PCB 布局程序中的顶层电路板视图;PCB 布局程序中的所有层电路板视图;仅顶层和底层视图,展示了双面 SMT 布局。

figure_c-3图 C-3: SMD 元件焊盘周围的扇出区域。

了解你的特殊走线

关于数字电路板布局的好消息是,大多数走线不需要太多思考,与典型的模拟板不同。坏消息是,如果你没有正确地完成其余的走线,你的板将表现出奇怪且令人沮丧的行为,这将很难调试。因此,这些特殊走线的布线有点像一门黑艺术。本节仅提供了一些应对这些特殊走线的指南,但我鼓励感兴趣的读者寻找一本专门介绍板级布局的书籍,以真正学习和欣赏这些技术。我推荐的两本书是威廉·J·达利和约翰·W·波尔顿合著的《数字系统工程》(剑桥大学出版社),以及霍华德·W·约翰逊和马丁·格雷厄姆合著的《高速数字设计:黑魔法手册》(Prentice-Hal PTR)。

通常,在布线电路板时需要特别注意的走线类型包括:

  • 电源走线

  • 时钟参考(时钟)走线

  • 高速走线

  • 模拟/混合信号走线

作为一般规则,电源走线应比平均信号走线更粗,尤其是如果您正在使用提供窄(约 5 毫英寸)走线宽度的高端制造工艺。电源走线需要加粗以抵消电阻加热和寄生电感。窄电源走线,尤其是在关键电源分配点附近,会像电阻一样发热,导致供电电压下降到引起电路不确定故障的水平。

电源走线的适当尺寸取决于铜的厚度。典型的板使用“1 盎司铜”,厚度为 1.35 毫英寸(一平方英尺 1.35 毫英寸厚的铜箔重一盎司)。在 1 盎司铜中,外部 12 毫英寸宽的走线需要通过 1 安培的电流,温度上升 10 摄氏度。对于类似的电流处理能力,埋层需要更粗的走线。

在层与层之间布线电源走线时,请记住,过孔也有电阻。单个过孔不足以连接层之间的关键电源走线。关键电源走线应在层之间通过多个过孔连接,以降低寄生电阻和电感。多层上的分布式电源平面也应广泛分布过孔,以确保保持共同电位。

注意

图片

在高性能或低噪声应用中,在去耦电容器和电源引脚之间放置 过孔可能对 布线便利性 的电学完整性代价过高。过孔会干扰高速(数百兆赫兹)电波的传播。因此,在这些应用中,去耦电容器的最佳位置是在元件引脚和电源 过孔之间

定时参考信号包括时钟和选通信号。许多存储设备需要具有敏感定时要求的异步控制选通信号。这些信号应按与终止策略一致的方式进行正确终止和布线,通常采用“菊花链”布线。菊花链布线没有分支,因此信号波前只有一条路径可以传播。

电信号在电路板上的传播速度约为光速的四分之一,或约每纳秒三英寸。因此,高速走线必须具有匹配的长度,否则信号可能会相对于定时参考出现显著的时间相位差。通过延长较短的走线到最长走线的长度来匹配走线长度。通过使用蜿蜒的走线来延长走线长度,这些走线蜿蜒曲折,增加了走线的有效长度,而不改变走线端点的位置。

模拟和混合信号布线远远超出了本附录的范围。在一个普通爱好者的数字设计中,大部分模拟电路将被隔离在电源部分。对于特定电源组件的特殊布局要求通常在组件的数据表中得到了很好的记录。

请记住,电气信号是懒惰且杂乱的:信号电流总是沿着阻力最小的路径流动,并且信号会耦合到相邻的迹线中。此外,电流必须守恒,因此每个信号电流路径都必须有一个返回电流路径,无论它是明确的还是隐含的。在你布线电路板上的任何模拟部分时,请记住这些简单的规则。

电路板是优秀的散热器

当布线高功率组件,如电源调节器和高性能微处理器时,请记住电路板上的铜是一种极好的导热材料。在特定条件下,通过简单地布设一个连接到目标部件的热连接或接地引脚的大面积铜区域,你可以节省一个散热器。如果你使用的是带有电源平面的多层板设计,请使用多个过孔来帮助将热量传导到内部层。

电路板的散热能力在手装配过程中也可能是一个麻烦。铜的良好导热性使得加热同时连接到大面积铜区域上的组件引脚变得困难。当将低功率组件连接到电源平面时,请考虑使用带有热缓解的过孔。热缓解是在过孔连接到电源平面时的一系列小间隙,它可以减少热导率,而不会显著影响连接的电气性能。(请注意,在铜区域周围大量密集的热缓解电源过孔可能导致未连接或连接不良的铜岛。)

为每一层 建立首选布线方向

为每一层建立主导布线方向可以简化密集板布线。例如,使顶层成为水平布线层,底层成为垂直布线层。如果你需要在位于板对角线两侧的两个组件之间布线,首先在顶层运行一条水平迹线,然后在底层运行一条垂直迹线以连接这两个组件。例如,仅在板的顶层直接运行一条对角线迹线的替代策略,将使板两半之间的整体布线可行性减少一半:现在从一半到另一半的唯一方法就是通过底层。

对于这个规则的特殊情况是可以接受的,尤其是如果你必须做出信号完整性与布线可行性的权衡。

堆叠具有正交层的电路板

在确定每层的首选布线方向后,堆叠层以确保没有两层具有平行的首选布线方向。这种正交性有助于将层间信号的干扰降至最低。如果你有电源层,尝试在信号层之间堆叠它们,以帮助屏蔽信号层之间的干扰。

在双层板上,使用手指布 电源

在双层板上,通常很容易将电源和地线作为环绕板外部的环形布线。这不是一个理想的情况,因为环形会剥夺板的核心,并增加了形成大型寄生电流环的可能性,这将降低电路性能。相反,使用交错和/或堆叠的电源手指。这些手指将确定每层的占主导地位的布线方向,应该在布线任何信号之前布局。

使用自动布线器的提示

自动布线器是一把双刃剑:它们可以节省数小时的布线时间,但它们也可能导致数小时的令人沮丧的问题。使用自动布线器的第一条规则是永远不要让它工作在你的电路板设计文件的唯一副本上。相反,创建设计的一个副本,并让自动布线器在副本上施展其魔法。

第二条规则是在将自动布线器应用于最终设计之前,使用简单的测试设计来学习自动布线器的缺陷。自动布线器通常存在关键的缺陷或限制,在使用工具之前必须了解这些缺陷。在学习自动布线器的缺陷时,特别关注它如何处理锁定轨迹、填充多边形和尴尬的轨迹尺寸。一些自动布线器实际上会移除锁定轨迹(手动放置并标记为不可移动的轨迹),而其他则忽略它们或在它们存在时无法正常工作。如果你在开启自动布线器之前花费数小时布置关键电源和时序网络,这可能会特别令人沮丧。

最后,不要指望自动布线器能够完全布线一个复杂的电路板。自动布线器在快速布线电路板的前 90%时非常出色,但随着电路板变得更加拥挤,它们会变得非常缓慢。请注意,组件放置的细微变化可能会使自动布线器失效。许多自动布线器在没有特殊注释或理想组件放置的情况下,不会识别总线或直通连接。

CAD 工具

过去几年中,电路板设计工具的价格显著下降。我用于电路板设计的最常用工具是 Protel 99SE。(我尚未购买更新的版本,即 Protel DXP。)Protel 是一个高度集成的工具,包括原理图捕获、仿真、库管理以及带有设计规则检查和自动布线的电路板布局,所有这些功能都集成在一个工具中。(似乎每次软件发布都会将一些新功能集成到设计环境中,无论好坏。)

您可以从他们的网站 www.protel.com 下载 Protel 软件的 30 天全功能演示版。虽然该产品的完整许可证价格在数千美元,但这与其他提供相同深度功能和数量功能的软件包相比仍然具有竞争力。其他高端 PCB CAD 供应商包括

Mentor (PADS), Cadence (OrCAD), and Altium (P-CAD)。有趣的是,Altium 还拥有 Protel 软件套件。

如果您是初学者,想做一些随意的板级布局,一些板级制造公司提供免费的全功能捕获设计工具。ExpressPCB(www.expresspcb.com)为使用其制造服务的客户提供免费的原理图捕获和 PCB 布局工具。他们的工具功能齐全,但在设计规则检查和实际复杂性方面略显局限。然而,ExpressPCB 是初学者的绝佳入门工具,能够实现几乎任何周末硬件项目。

在提交任何用于生产的完成设计之前,使用第三方文件查看器预览您的导出文件,以帮助保护您的制造投资免受设计工具中的错误影响。用于板级制造的常见文件格式是“Gerber”文件格式。我信任的一个优秀的免费 Gerber 预览器是由 Graphicode(http://www.graphicode.com/)制作的。

板级制造公司

板级制造公司的能力范围与 CAD 工具一样广泛。一些公司只做大型生产订单,而其他公司通过服务快速原型和爱好者市场赚取生计。以下是我最喜欢的几家板级制造公司,以及它们基本服务的简要描述。

Sierra Proto Express

位于加利福尼亚州圣何塞的 Sierra Proto Express 提供了一些最具竞争力的快速原型制作率。截至本文撰写时,Sierra Proto Express 提供了一系列“无触点产品”工艺。这些制造工艺有严格的设计规则要求,但价格非常实惠。例如,您可以在四天内以每块 34 美元的价格(最小订单为两块)制作双层电路板,或者以每块 51 美元的价格(最小订单为两块)在四天内制作四层电路板。这些价格提供的工艺技术是 6 mil 迹/空间设计规则和 15 mil 完成的孔径大小。Sierra Proto Express 还提供更快周转时间的工艺,迹宽低至 5 mils,完成孔径大小为 10 mil。有关更多信息,请访问 www.sierraprotoexpress.com。

Data Circuit Systems

数据电路系统(Data Circuit Systems),也位于加利福尼亚州圣何塞,是我首选的供应商,用于需要激进的设计规则或与较便宜快速制造公司提供的选项不太匹配的特殊加工选项的设计。他们网站上的全面“工艺能力调查”(可在其网站上下载)内容详尽且书写清晰,因此减少了在设计规则解释中的猜测工作。他们还对您提交的设计进行了一系列相当严格的工厂检查,这些检查通常可以发现可能导致后期问题的细微布局错误。我发现他们的员工既熟练又友好,尽管他们的价格略高于大多数工程原型制造商,但他们的详细记录的工艺和设计规则检查有助于降低激进设计的风险,最终额外的成本可能是值得的。请访问 www.datacircuits.com。

先进电路

科罗拉多州奥罗拉的先进电路(Advanced Circuits,www.4pcb.com)在其网站上提供即时报价功能。仅此一项功能就使他们成为适合中等复杂度的板子的好选择,这些板子不符合任何折扣或快速制造工艺指南。您可以使用即时报价功能来优化您的实施技术选择以降低价格。此外,他们经常提供折扣和快速制造特价。

阿尔伯塔印刷电路

阿尔伯塔印刷电路(AP Circuits),位于加拿大阿尔伯塔省,是原始快速原型 PCB 制造商之一,提供快速服务。他们提供的 P1 工艺是一个基本的工艺,没有阻焊膜或丝印。因此,在组装阶段,由于焊料容易到处流动,很难执行细间距表面贴装设计。然而,他们将以难以置信的价格,在一天内完成 P1 工艺的板子并发货,没有任何最低订单要求。撰写本文时,生产运行的基准费用约为 45 美元,加上基准费用之上的每平方英寸约 0.65 美元的费用。该技术是 8 密耳的走线/间距,最小钻孔尺寸为 20 密耳(如果您想坚持最便宜的工艺选项,则为 28 密耳)。AP Circuits 非常适合需要在紧迫的时间和严格的预算下完成的板子,尤其是如果您使用的是无需阻焊膜即可轻松组装的通孔或粗 SMT 组件。请访问 www.apcircuits.com。

入门项目

在第五章“更换损坏的电源”中,您将学习如何用标准 ATX 电源替换 Xbox 电源。唯一的问题是,Xbox 和标准 ATX 电源之间的电源信号极性是相反的。章节中提出的解决方案是始终保持电源开启,并通过首先开启电源然后按下 Xbox 的电源按钮来开关 Xbox。

设计和布局一个能够使您反转电源信号极性的板子相当容易,这样您就可以仅通过 Xbox 的前面板来控制 Xbox 的电源状态。您还可以正确调节待机电源,而不是使用两个二极管。这样的板子将包括一个反相器芯片,例如 74HCT04,和一个稳压器,例如 LM317K。LM317K 是一个可调稳压器,可以将 ATX 电源提供的+5V 待机电压降低到 Xbox 要求的+3.3V 待机电压。本板的一个示例原理图如图 C-4 所示。

连接到该板的选择由您决定。最简单的解决方案就是直接使用孔位并焊接电线通过孔位。该板上只有五个连接点。其中三个连接到电源:+5VSB(紫色)电线、一个地线(黑色)电线和电源开启输出(绿色)电线。剩下的两个,+3.3VSB(电源连接器的第 6 针)和电源输入(电源连接器的第 11 针),连接到 Xbox。

在安装您完成的板子之前,务必测试稳压器的电压输出。很容易出错电阻值或引脚交换,这两种情况都可能导致 Xbox 进入危险的高电压状态。另外,在永久安装板子时,务必确保板子的底部和顶部与 Xbox 外壳或其他 Xbox 组件的意外接触绝缘。

figure_c-4

图 C-4:ATX 电源替换适配器板的示例原理图。电阻 R1 和 R2 设置稳压器 U1 的输出电压为+3.3V。

附录 D -

开始使用 FPGA

集成是硬件黑客的噩梦。我们喜欢拆解东西,修改它们,并改进它们,但趋势是将一切塞入一个或两个 ASIC(专用集成电路)中。这种集成对于普通人来说遥不可及,因为用于定义芯片上特征的掩模套件的成本正迅速接近一百万美元。这是一百万美元的每个独特 修订版的芯片。如果犯了一个需要新掩模套件的错误,你必须再花一百万美元来修复它。

幸运的是,即使是许多公司,一开始就投入一百万美元现金购买芯片也太多了,这为 FPGA 创造了一个市场——通用、可编程(“可重构”)的硬件设备,可以在许多应用中替代 ASIC。

什么是 FPGA?

FPGA 代表现场可编程门阵列。换句话说,它是由用户在现场编程的门阵列。你可以将 FPGA 想象成可以在家中舒适构建的定制硅芯片,尽管向部分可重构和上下文相关重构的趋势为 FPGA 增加了一个在 ASICs 中找不到的维度。虽然 ASICs 在大量生产中每单位成本更低,并且它们可以具有更高的时钟速度性能,但 FPGA 已经确立了自己作为低到中等产量应用和原型设计的首选工具。

FPGA 的基本架构是在一个灵活的布线网络中嵌入的硬件原语数组。FPGA 的力量在于复杂计算可以被分解成一系列更简单的逻辑函数。这些更简单的函数可以依次分解,直到整个计算仅由可以映射到 FPGA 硬件原语的基本逻辑操作序列来描述。因此,相同的 FPGA 可以通过改变硬件原语和布线网络的配置来实现微处理器、视频控制器或井字棋游戏。

FPGA 架构实现的硬件原语类型强烈影响了 FPGA 针对特定目标应用的实现效率。现代 FPGA 为设计师提供了主要是单比特宽的原语:一个 4 或 5 输入到 1 比特输出的查找表,以及一个称为触发器的时间同步存储位。查找表被用作逻辑原语,因为它们可以被编程执行任何逻辑操作,其术语数量与查找表的输入数量相同。然后,这些原语被连接到一个庞大的可编程网络中;一个典型的高端 FPGA 可能有数万这些原语元素。

结果表明,虽然单比特宽的结构非常通用,但在自然数据宽度大的应用中,它们可能非常资源低效。特别是,实际逻辑原语所分配的面积在许多情况下约为 1%,其余部分是配置存储器和互连。所有这些电线都是必需的,以处理你可能需要的许多单比特宽应用的布线排列。

figure_d-1

图 D-1:典型 FPGA 结构的框图,说明了 FPGA 上的电线数量与计算逻辑数量之间的差异。一个典型的现代 FPGA 将包含数万个这样的基本单元。

为了提高面积效率,许多 FPGA 还包含一些粗粒度原语,例如 RAM 块或乘法器块。Xilinx 的 Virtex II-Pro FPGA 甚至包含几个片上 PowerPC 核心。虽然这听起来很令人印象深刻,但这样的核心实际占用的面积出人意料地小:PowerPC 处理器可能占用略多于 1mm²的硅面积,而 FPGA 的面积是数百平方毫米。

市场上最新的 FPGA 除了拥有非常灵活的计算硬件外,还拥有非常灵活的 I/O 接口。一个典型的 FPGA 可以与所有最流行的高速信号标准进行接口,包括 PCI、AGP、LVDS、HSTL、SSTL 和 GTL。此外,大多数 FPGA 还可以处理 DDR 时钟信号。如果这些缩写对你来说没有意义,基本想法是 FPGA 可以用来与典型 PC 主板上的几乎所有硬件进行通信,例如 Xbox。这对硬件黑客来说是个极好的消息,因为这意味着 FPGA 可以用来模拟或监控 PC 中找到的几乎所有芯片。(当然,如果 FPGA 无法跟上 PC 的速度,PC 可能需要降低时钟频率。)

为 FPGA 设计

对于典型的 FPGA 设计流程,您有许多设计输入选项可供选择。如果您喜欢图形化思考,大多数设计流程都支持原理图捕获工具。虽然原理图捕获对于硬件设计来说通常更直观,但它们可能更难以维护和修改。例如,如果您必须点击每根电线并输入新名称,更改所有实例的网名可能很繁琐。此外,任何单一设计层次级别的尺寸限制为原理图纸的尺寸,因此复杂设计需要大量的计划和前瞻性思考,仅用于原理图捕获。

因此,硬件描述语言(HDLs)是实现复杂设计的首选工具。HDLs 乍一看与常规编程语言非常相似。例如,Verilog 的语法看起来与 C 或 Java 非常相似。然而,语言的语义可能有点难以理解。

硬件具有固有的并行性,而像 C 这样的过程式语言无法表达。如果你仔细想想,FPGA 上的每一个门和每一个触发器都可以并行计算,而在 C 程序中,通常假设只有一个执行线程。因此,硬件描述语言(HDLs)将硬件表示为一系列并行操作的过程;程序员需要将这些函数分组到正确的进程中,以便编译器能够理解如何将一个过程转换为门。

figure_d-2

图 D-2:典型的 FPGA 设计流程

例如,Verilog 中一个单时钟存储元件(触发器)是一个“过程”,其结构通常如下所示:

input inData;        // declare your inputs and outputs
input clock;
reg   bitOfStorage;  // declare the storage bit as a reg
type

always @(posedge clock) begin
  bitOfStorage <= inData;
end

此代码从输入端口 inData 获取值,并在每个上升沿时钟边沿,将 inData 存储在一个输出称为 bitOfStorage 的触发器中。单个设计中可以存在由 always @( ... ) begin ... end 语法分隔的多个过程,并且所有过程都并行执行。组合逻辑也可以表示为过程。例如,以下 Verilog 代码实现了一个无时钟的两个输入多路复用器:

input  a;
input  b;
input  select;
output out;
reg    c;
always @(a or b or select) begin
  if( select == 1’b1 ) begin
    c <= a;
  end else begin
    c <= b;
  end 
end
assign out = c;  // assign statements can contain logic
                 // functions as well

在这个例子中,always 关键字后面的括号内包含的sensitivity list包含了可能影响输出的所有输入。从 sensitivity list 中省略一个参数意味着即使该参数发生变化,输出也不会改变。例如,如果你从 sensitivity list 中省略了 a 和 b,那么输出只会改变当 select 改变时:你会构建一个存储器,根据 select 的状态存储 a 或 b。然而,多路复用器期望的操作是在任何时候都将 a 或 b 的变化传递到输出,即使 select 没有转换,所以 a 和 b 都必须是 sensitivity list 的一部分。

在学习 HDL 时,有一些细微之处超出了本书的范围,但上面两个代码段应该能让你对预期有所了解。熟练的软件程序员可能比新手更难适应 HDL,因为许多在软件世界中视为理所当然的技巧在直接硬件实现中转换得非常差。数组、结构、乘法和除法原语在软件世界中都是理所当然的,但每个这些结构都转换成可能很大且效率低下的硬件块。此外,在硬件实现中,case 语句中的所有可能情况都存在,无论你是否有意为之;忽略为默认情况完全指定 case 语句通常意味着将生成额外的硬件来处理隐含的情况。Google 上索引了大量的 Verilog 教程和语法参考手册;verilog 语法和 verilog 教程都是搜索语法参考或教程时的好关键词集。Xilinx 的网站也提供了针对 FPGA 设计者的良好的 Verilog 参考,Sutherland HDL 公司在其网站 http://www.sutherland-hdl.com/on-line_ref_guide/vlog_ref_body.html 上提供了一份免费的 Verilog 快速参考指南。

FPGA 超频设计

值得注意的是,用于 FPGA 的时序模型相当保守。这意味着 FPGA 在比时序分析仪允许的频率更高的频率下正常工作是非常可能的。实际上,对 FPGA 逻辑进行仔细的手动布局可以将 FPGA 的性能提升到其标称规格之外。

例如,用于实现 Xbox Hypertransport 总线插件的 FPGA(Xilinx Virtex-E)仅指定可以处理大约 200 Mbits/s/pin 的数据速率,但应用要求 400 Mbits/s/pin。我能实现这一点的原因是实际的逻辑和存储元件可以非常快地运行,但大部分性能都消耗在携带信号之间的线缆和重复器上。具体来说,一些线在 400 Mbits/s 下的延迟会很大,以至于它们实际上存储了一个时钟周期的数据。

我通过捕获一系列数据并将其与之前使用示波器发现的模式进行比较,确定了哪些线比其他线慢。一旦确定了慢路径,我就反转了时钟和/或在延迟过小的通道上插入触发器。最终结果是得到一组经过时间偏移校正的信号。然后,这些信号可以简单地解复用到较低的时钟速率,在那里可以使用传统编译的 HDL 设计技术。

虽然这项技术非常强大,但它并不普遍适用,因为由于芯片之间的差异,导线引起的延迟量各不相同,并且可能取决于环境温度和电源电压质量等参数。然而,在可控条件下针对一个特定的芯片,我能够获得 2 倍于额定性能。与此应用相比,另一个重要区别是,在每几千个中发生 1 个错误的比特错误率是可以容忍的,因为我可以只取三个轨迹并使用 XOR 操作来恢复由于随机噪声源而丢失的任何信息。然而,对于正常应用来说,每 10000 个中有一个错误的比特错误率是不可接受的;比每 10000000000000 个中有一个错误更典型的不可恢复错误率要好。这一切都回到了我常说的一句话:“做一次事情很容易,但完美地做一百万次就很难了。”

HDL 设计输入方法的另一个优点是免费和付费“软核”的可用性。例如,www.opencores.org 等网站提供了一般公众许可的 HDL 核,用于 USB 接口、DES 和 AES 加密引擎以及各种微处理器等功能。此外,几乎每个标准功能都由第三方供应商提供,他们将以费用出售核心。

在将设计编译成硬件之前,强烈建议你在设计输入后对其进行模拟。试图通过调整代码、将其推送到硬件并探测变化来追踪错误是非常低效的。模拟允许你通过按按钮来探测电路的任何节点。此外,模拟代码更改所需的工作量非常小,尤其是与将更改推送到硬件所需的工作量相比。

一旦设计已经输入并模拟,就需要将其编译或转换成通用的网表格式。这种网表格式被输入到一个程序中,该程序将网表原语映射到目标 FPGA 硬件原语,之后映射的原语被放置和布线。结果设计被分析以符合设计者指定的约束条件。如果设计不符合设计者的规格,则需要通过连续的放置和布线迭代进行改进。一旦设计通过了设计约束,它就会进入配置位流生成器,在那里 FPGA 的内部表示被转换成一个二进制文件,该文件可以被 FPGA 用来配置自己。(所有这些步骤在 FPGA 设计工具的后期版本中都可以通过按一个按钮相当无缝地完成。)

项目想法

现在你已经了解了一些关于 FPGA 是什么以及如何编程它们的知识,你可以用它们做什么呢?

结果表明,如今 FPGA 的逻辑容量和性能已经足够强大,可以完成非常令人印象深刻的任务范围。FPGA 最明显的工业应用是在模拟为硬连线硅设计的电路。定制芯片的成本正在飞速上升,很快就会出现一个错误就能导致数十万美元,甚至数百万美元的修复费用。

另一方面,修复 FPGA HDL 描述中的错误基本上只花费时间和设计努力;你不会丢弃任何部件,也不需要购买任何新部件。因此,许多公司已经采取了在最终硅片生产之前,在 FPGA 中完全模拟设计原型的策略。这种方法的一个附带好处是,使用定制硅片的软件和硬件团队可以在定制硅片制造的同时开始使用 FPGA 原型验证他们的设计;这个过程有时可能需要几个月的时间。

对于黑客来说,FPGA 似乎是各种复杂项目的万能药。如果你对进行暴力破解密钥搜索或快速加密大量数据感兴趣,FPGA 是实施加密函数的绝佳选择。它们在实现信号处理功能方面也非常有用,特别是考虑到存在免费的乘数和数字滤波器核心。FPGA 可以在比 DSP 更低的功耗下实现更高的性能,因此在电池供电的机器人等应用中拥有独特的市场空间。FPGA 在嵌入式控制器应用中也很有用:今天的小型微处理器核心,相当于或优于 PIC,可以轻松地集成到 FPGA 中。添加所有你的定制硬件外围设备,例如串行端口和 PWM 定时发生器,你就可以开始业务了。

FPGA 在那些不专注于大量数据处理的情况下也非常有用。在紧凑的空间中,FPGA 可以作为一个出色的粘合逻辑,而且合理放置的 FPGA 可以让你免于因为逻辑设计错误而需要添加线跳线来修复电路板。对于无法负担 1 万美元 Tek TLA 主机的我们来说,FPGA 也提供了一个廉价的逻辑分析仪替代品。最新 FPGA 的高速 I/O 能力与大型自动生成的 FIFO 配置嵌入式存储器相结合,使得设计信号捕获和分析系统变得轻而易举。

最后,FPGA 在混合信号情况下的应用可能并不立即明显。最常见的一种混合信号应用可能是使用 FPGA 来驱动 VGA 监视器的模拟信号。只需要几个电阻分压器或一个精心选择的输出驱动器类型,就可以处理生成彩色图像所需的所有时序和逻辑,这些都可以在 FPGA 内部的逻辑中完成。FPGA 也可以简单地用作 PWM D/A 转换器,甚至可以作为 sigma-delta D/A 或 A/D 转换器的一部分。

购买渠道

你可能认为这样多功能且强大的工具肯定要花费一大笔钱。虽然十年前是这样的,但如今你只需花费不到 50 美元就可以买到 10 万门的 FPGA,而且设计工具对于教育用户和/或爱好者通常是免费的。

当然,单独的 FPGA 并不是那么有用;它需要安装到带有适当连接的板上才能使用。为此,一家名为 XESS(www.xess.com)的公司生产了一系列相对实惠的 FPGA 入门套件。随着新 FPGA 的推出,其产品线会发生变化,但目前的入门级 FPGA 板是 XSA-50 板,它配备了一个 50,000 门的 FPGA,售价约为 150 美元。该板还包括几兆字节的 RAM、并行端口、VGA 端口、PS/2 键盘端口以及其他一些基本设备。

另一个选择是如果你有勇气,从头开始自己制作板。本书的其他附录描述了如何进入板布局和制造以及如何将细间距 FPGA 设备连接到你的板上。实际上,尝试自己制作板是非常有成就感的,我建议你尝试一下;如今,制作板的成本远远低于 100 美元,所以即使你的板最终不起作用,你也不会损失太多。

如果你正在制作自己的板,你需要从 Xilinx 分销商那里购买你的 FPGA。Xilinx 网页(www.xilinx.com)提供了最新的分销商链接。截至本文撰写时,较方便的分销商之一是 NuHorizons(www.nuhorizons.com),因为他们在网页上提供产品可用性和定价信息,无需注册或特殊客户账户。

FPGA 开发软件通常可以以低价或免费获得。例如,Xilinx 为其 Virtex-II(高达 300K 门)、Spartan II-E 和 CoolRunner 系列部件提供免费的开发环境。这个开发环境被称为 Xilinx ISE WebPACK,注册后可以在 www.xilinx.com 下载。这个免费环境拥有令人印象深刻的特性列表,包括原理图和 HDL 输入、HDL 综合器、flop planner、时序驱动的布局和布线、时序分析和功耗分析工具。

Xilinx 还通过 Prentice-Hall 提供其软件的一个版本,称为“Xilinx 学生版”。此软件捆绑了大量的教程和文档,可以帮助你入门 FPGA 设计。你可以在 Xilinx 网站的“教育”标签下找到各种有用的教程和讲座。

附录 E -

调试:提示和技巧

不要慌张!

提高你的调试技能与提高你的设计技能一样重要,甚至更为重要。最重要的单一建议是永远不要慌张:随机地调整和更改东西只会引入比解决的问题更多的不确定性和错误。

当你能够完全了解一个系统以及一个正常工作系统的预期状态时,调试就变得简单了。只需将观察到的状态与预期状态进行比较,就能阐明出了什么问题。不幸的是,现实世界很少是这样运作的。芯片是黑盒子,唯一能够了解芯片内部状态的方法是通过其引脚。许多信号也太难直接测量或记录。此外,制造商提供的规格说明书通常很模糊或难以解释。因此,调试的真正艺术在于在缺乏可见性和全面系统知识的情况下,将一系列症状追溯到根本原因。

理解系统

在没有首先了解你试图调试的内容之前尝试调试一个系统,就像在没有日语知识的情况下尝试阅读日本漫画一样。你可以在表面层次上弄清楚谁是坏人谁是好人,但你会在确切地弄清楚漂浮的猫与所有这一切有什么关系时感到非常困惑。为了完全理解情节,你需要一本日语词典以及大量的时间和耐心。同样,基本的电子原理和直觉会带你到一个大致知道可以期待什么的地步,但真正的启迪只有在阅读了组件数据表之后才会到来。你对一个系统了解得越多,就越容易找出事情出错的原因。在阅读更多关于系统的内容时,记下笔记,并思考如果出了问题,问题可能会以什么方式表现出来。看到其他与你试图修复的系统相似的系统也有帮助,理解操作理论也有帮助。

观察症状

缺陷通过症状表现出来,你必须通过观察几个症状并推断出罪魁祸首来推断根本原因。一个本应显示控制台视频输出的电视出现空白屏幕就是一个症状的例子。你的电视屏幕可能空白的原因有很多,比如损坏的视频线、损坏的电视、损坏的视频连接器、损坏的视频源、视频源中的空白媒体,甚至系统缺乏电力。一般来说,你应该观察至少两个、最好是三个与原因一致的症状,在得出你已经找到了根本原因的结论之前。记住,最具有说明性的症状往往不是明显的外在表现,可能需要测量或实验来找到它们。在我们的空白电视屏幕的例子中,我们的测量方法很简单,就是看看电视上的电源灯是否亮起,或者在没有视频的情况下电视是否发出声音。

调试的基本策略是从一个明显的症状开始,隔离系统的各个部分,以确定哪个部分是症状的直接原因。直接原因被定义为直接影响观察到的症状的东西。电视上视频故障的直接原因可能是没有信号输入电视、电视损坏或电力不足;非直接原因可能是你的视频源中的硬件故障或月亮的相位。换句话说,给定症状 A,考虑所有可能的直接原因 X、Y 和 Z,然后测试每个以确定哪个是实际原因。一旦你隔离了问题,考虑可能导致它失败的原因,并重复这个过程,直到你发现了根本原因

通过使用已知良好的参考,可以简化故障原因的隔离。在我们的例子中,你可以通过给电视输入来自已知良好 DVD 播放器的信号来排除电视作为故障源的可能性。为了使已知良好参考实验有效,你必须保持所有东西不变,除了你用参考替换的部分。将良好的 DVD 播放器插入电视上控制台的不同输入,只会告诉我们电视的显示部分是正常工作的。从控制台输入到电视的路径没有被测试。正确执行实验的方法是将 DVD 播放器插入控制台使用的视频输入。

这种偏执或对系统的固有不信任在追踪微妙的硬件故障时变得非常重要。不要假设任何可能影响你所观察系统的因素,永远不要忽视任何无法解释或不一致的行为,即使它是间歇性的。例如,有时系统会在你触摸电路板上的某个位置或挥动手臂靠近某个区域时正常工作或损坏;有时系统在开机后的一段时间内会表现出不同的行为。将此类观察结果归咎于异常或微不足道的事件是很诱人的,但事实是它们确实发生了,并且必须有解释。一个具体的例子是触摸电路板并观察系统状态的变化。你在哪里触摸的?你是如何触摸的?你的手是湿的还是干的?当你触摸电路板时,你的身体就像一个小电容和一个大电阻。这可能会稍微减慢信号或放电高阻抗节点,如未连接的数字输入。如果你用力按下板子,你可能会以某种方式弯曲板子,从而改变断裂的轨迹或不良焊点的电气特性。

有些症状经常被错误地解释为原因。烧毁的轨迹或损坏的组件通常是问题的症状,而不是原因。换句话说,电路中其他地方的故障通常负责组件的故障。组件自发故障是一个相对罕见的事件。假设你正在调试一个损坏的立体声音响。你闻到从立体声音响中传来的烧焦气味,并看到一个大电阻因过热而变黑。很可能如果你只是更换那个电阻,替换的电阻也会再次烧毁。真正的可能原因可能是一个短路晶体管或损坏的电源电路,但这些并不像烧毁的电阻那样明显。

另一种强大的观察技术是将已知良好的系统进行比较。如果你正在尝试调试一个损坏的设备,找到一个正常工作的设备,并比较两个设备之间的电压和其他操作特性。如果你正在尝试调试你自己的自制系统,如果可能的话,构建电路的模拟,或者找到一个具有类似设计的电路。你可以使用这些已知良好的系统来快速隔离异常行为。此外,你可以以可控的方式在已知良好的样本中诱导故障,以检查你是否真正找到了问题的根本原因。这种技术特别适用于模拟系统。

常见故障

家庭自制的项目中,硬件故障最常见的原因是焊接不良和极化元件安装不当,例如电容器、二极管、集成电路和连接器。此外,连接器尤其臭名昭著,因为它们承受了最多的物理滥用,而且仅通过视觉检查通常很难确定连接器是否处于良好状态。以下是一份常见故障的清单,按流行程度大致降序排列。

  1. 不良的焊接点。 这包括冷焊点、桥接和遗漏的焊点。仔细的视觉检查可以捕捉到许多不良焊点的实例。所有焊点之间的焊料应看起来光滑闪亮,并且焊料应在电路板焊盘和元件引线上显示出湿润的弯月面。好的和坏的焊点图片可以在附录 B:焊接技术中找到。通过轻轻拖动一根硬线,如镊子尖端或回形针,沿封装长度拖动引脚,也可以快速识别许多表面贴装封装上的不良焊点。连接不良的引脚会略微弯曲。弯曲电路板也可以帮助揭示不良焊点。在其他情况下,您可能需要使用万用表来验证焊点的质量。(如果您在焊接元件时有过混乱的经历,请在检查之前用棉签蘸取少量异丙醇清洁电路板。)最后,记住眼见为实:使用放大镜帮助您的检查。中功率显微镜是首选,但任何固定放大镜(如绘图灯上找到的)或珠宝商使用的环形放大镜都将极大地帮助。

  2. 不正确的元件值。 当类似外观但值不同的元件意外安装在电路板上时,就会发生不正确的元件值。这对于表面贴装无源元件尤其成问题,因为它们通常未标记或标记不明显。请记住,正确测试元件值的方法是将其从电路板上取下,然后进行测试。通过在组装过程中非常小心和有系统地存储您的元件在清晰标记的袋子或盒子里,可以避免在电路板上放置错误元件。

  3. 不良的连接器。 这包括反向安装的连接器,或者更糟糕的是,设计时使用了错误的引脚分配。注意引脚 1 的位置和连接器使用的编号系统。一些连接器使用之字形引脚编号系统,而其他连接器使用圆形引脚编号系统。手工组装线对板连接器也很困难。检查所有电线与连接器接触点接口的地方,以查找不良的压接、过多的绝缘或不良的焊点。在最坏的情况下,使用电压表来验证连接器的连续性。

  4. 未阅读数据表导致的配置疏忽。复杂的芯片通常支持多种操作模式,这些模式通过将一组引脚连接到高或低逻辑电平来选择。芯片还经常需要外部电阻来加载或偏置引脚以实现正常操作。有时芯片还需要电容、电阻和电感网络来稳定内部功能。请记住,未使用的输入通常需要连接到固定电压才能正常工作,因此不要因为不使用某些功能而忽略数据表的部分内容。

  5. 设计问题或实现问题。有时错误是由明显的设计错误或正确原理图与板布局之间的转换问题引起的。转换问题通常是由于在指定原理图网络名称时出现错误,或者由于原理图符号上的隐含电源名称。隐含电源名称通常在数字组件中出于方便而使用,但可能会在设计使用多个电源电压的电路时引起重大问题。这些类型的问题可以通过附录 C 中描述的启发式网表检查程序在布局之前捕获。高速设计规则违规代表另一种实现问题。在 25 MHz 或更高频率下运行或具有快速边沿率(< 5 ns)的电路需要特别注意电气阻抗和传输线终止。

  6. 电源电压超出规格。尽可能在接近使用点的位置测试电源电压,因为电线会降低实际交付的电压。在某些情况下,电路本身没有问题,只是电源无法提供足够的电流来运行你的设计。还要检查电源电压随时间的变化。电源上的过多噪声会导致问题,并且使用大量高速 CMOS 逻辑的系统可能会有非常苛刻的电流消耗变化,这可能导致电源电压出现短暂的下降和峰值。

  7. 损坏或损坏的 PC 板走线。如果你手动组装了电路板并且你在安装组件时遇到麻烦,这可能会成为一个问题。组装过程中的过热可能导致走线从电路板上抬起。此外,了解你的板供应商。一些板供应商(尤其是快速周转的折扣原型供应商)不会对你的电路板进行完整的网表电气测试。寻找过度蚀刻的走线,这些走线已经超出公差范围变薄,并检查每个通孔周围是否有银色的光环。有时在板钻孔过程中钻头定位不当或角度不正确,误钻的孔最终会中断电气连接。

  8. 闩锁效应或电源时序问题。闩锁效应是一种潜在的灾难性现象,在芯片的衬底中,电源和地之间会形成一个寄生短路。闩锁效应是由向衬底注入电流触发的。在混合电压系统中,如果施加的输入电压高于芯片的电源电压,这种情况可能会发生。在许多情况下,闩锁效应伴随着芯片过热,可能导致芯片永久性损坏。首次启动系统时,建议使用电流表来监测系统消耗的电流量,并触摸所有组件以检查是否有任何组件过热。如果一个组件进入了闩锁状态,你通常会观察到数百毫安的过量电流消耗。

  9. 热问题。这是线性电压调节器和高功率数字电路的主要问题。验证所有高功率组件是否正确散热,以及散热器在接触芯片封装的电气活动部分时是否正确隔离。

  10. 意外短接到裸铜。这是连接器和芯片的问题,它们的底部有暴露的金属区域,这些区域可能会跨越到板上的暴露区域,如通孔。这同样也是使用螺丝固定板的位置附近的问题。金属螺丝的头部可能会意外接触到放置在螺丝孔太近的通孔。

  11. 板上的污染。这个问题是由板上的焊膏残留物或其他工艺残留物引起的,这些残留物会导致低电流泄漏路径。一些焊膏残留物具有不可忽视的(小于一兆欧姆)电阻,这可能会影响高阻抗电路,如慢时间常数 R-C 网络。

  12. 测试设备故障。如果你使用二手或旧测试设备,这尤其是一个问题。测试探针随着时间的推移会形成弯折和校准故障,所以有时你在示波器上看到的糟糕信号实际上是坏测试探针或探针接地选择不当的结果。将测试设备校准到已知良好的信号,以消除测试设备问题。

  13. 最不可能的问题是坏芯片或故障组件。组件制造商会竭尽全力确保发送给你的部件是功能性的。简单的到中等复杂部件的典型故障率以百万分之一计算。通常,我们喜欢想象我们问题的原因是制造商的坏芯片,但几乎不是这种情况。通常,如果发现坏部件,该部件可能是在加工过程中(粗心处理或组装问题)或电路中其他地方的设计问题导致的损坏,这些设计问题导致了观察到的故障。

从移除的迹线或焊盘恢复

在电路板上抬起或撕裂铜走线是尝试使用飞线安装售后改装的人常见的问题。这种铜箔走线的分层通常是由烙铁过热引起的。另一个常见的原因是在线已经焊接在电路板上后,在剥离线端绝缘层时拉扯连接的改装线。幸运的是,通常很容易从这个问题中恢复过来。

提示

图片

最佳方案是预防。不要使用功率过大的烙铁在电路板上工作。建议使用温度控制的烙铁,但一个低功率(15 瓦)的烙铁也可以使用。此外,如果焊料似乎没有粘到板上,停止加热。相反,在板上和线上涂一点助焊剂,并用烙铁尖端养护剂或用蒸馏水湿润的海绵清洁烙铁尖端(自来水含有可能损坏烙铁尖端的化学物质)。这将提高可焊性,因此你不需要施加太多热量或力量来形成连接。

当你看到电路板上的走线或焊盘抬起时,首先要做的是停止!不要使问题进一步恶化;你能做的最糟糕的事情就是继续拉线,导致整个走线剥落。如果线仍然连接,通过轻轻触摸烙铁到接头并让线脱落来移除线。图 E-1 展示了这样的灾难场景。

图片

图 E-1: 左边,箭头指向正在焊接的原始焊盘。右边,焊盘因过热和过度用力而脱落。

从断裂的走线中恢复的策略是移除阻焊膜,用跳线修复走线,并沿着走线找到附近的元件或通孔作为焊接的替代点。

移除焊膏后,会露出底层的铜迹。可以将一小段跳线焊接到这些裸露的迹线上,以修复由于断裂的迹线造成的断路。裸露区域也便于使用通断测试仪找到一个跳线的替代连接点。可以使用细砂纸(200 目或更细)或用锋利的爱好者刀片刮除焊膏。在移除焊膏时,要小心不要抓到断裂的迹线碎片,以免进一步撕裂电路板的迹线。焊膏移除后,用温和的溶剂,如酒精棉签清洁该区域。然后,在该区域涂上一层非常薄的焊膏,并用干净的烙铁头沿着暴露的迹线擦拭。少量的焊膏会从烙铁头吸到电路板上,并覆盖迹线,防止裸露铜氧化。如果烙铁头太干净,可以在上面滴一滴焊膏,轻轻地在湿海绵上擦拭烙铁头,然后再次尝试。不要尝试在烙铁头尖端用熔化的焊膏球来镀锡迹线。过多的焊膏会导致短路。(注意,焊膏对于在迹线上获得均匀、薄层的焊膏至关重要。不要省略焊膏的应用。)图 E-2 展示了镀锡前后迹线的样子。

图片

图 E-2:左,使用细砂纸移除焊膏后的区域。右,镀锡(重新调整以供焊接)后的区域。

在这个阶段,你可能想使用一个通断测试仪来确定一个用于连接你的修改线的替代点。大多数万用表都带有可听见的通断测试仪功能。当选择此功能时,当探针之间的电阻非常低时,万用表会发出声音。

线路孔和元件引脚都是很好的替代连接点。如果你决定使用线路孔,你必须刮除焊膏并处理线路孔,然后再连接修改线。图 E-3 展示了使用通断测试仪寻找替代焊接点。记住,有时你可能需要通过几个线路孔来找到最佳的替代连接点。

图片

图 E-3:使用通断测试仪寻找替代连接点。在这种情况下,R7R10 是一个很好的替代点。

下一步是将一段短跳线连接到断裂的线路。在断裂线路的区域施加更多焊剂。剪一段细线(约 30 号线径),长度大约与问题中的间隙相同。将线放在间隙上,利用焊剂的粘性帮助放置过程。用镊子固定线,并用烙铁加热,直到两侧都粘附到断裂线路的边缘。用镊子轻轻推动线,以确认线是否到位;线不应移动。同时,使用万用表检查相邻线路的短路。如果发现短路,只需加热跳线,直到它从板上脱落,然后再次尝试。图 E-4 展示了修复后的线路外观。

最后,将修改线连接到之前用万用表发现的备用焊接点。

图片

图 E-4:左侧,已安装跳线覆盖损坏的线路。右侧,修改线已成功连接到备用焊接点。

附录 F -

Xbox 硬件参考

本附录总结了 Xbox 硬件中使用的所有主要连接器的引脚排列。

电源引脚排列

Xbox 使用的电源是一个最大 96 瓦的开关电源,峰值脉冲能力为 160 瓦,但不超过 10 秒。微软从多个供应商那里购买这种电源,包括 Delta Electronics, Inc.(www.deltaww.com)。Delta 的电源用于美国 Xbox,您可以通过他们的网站或通过网络搜索找到该部件的数据表。

引脚 描述 线色
1 +12V 黄色
2 +5V 红色
3 +5V 红色
4 +5V 红色
5 +3.3V 橙色
6 +3.3V 待机 棕色
7 GND 黑色
8 GND 黑色
9 GND 黑色
10 GND 黑色
11 开机 白色
12 电源 OK 蓝色

表 F-1:主要电源连接器引脚排列。线色可能因您 Xbox 中使用的具体电源型号而略有不同。此表适用于 Delta DPSN-96AP A 版本电源。

描述 线色
+12V 黄色
GND 黑色
GND 黑色
+5V 红色

表 F-2:硬盘电源连接器引脚排列。

视频连接器引脚排列

视频连接器引脚排列有点神秘,因为当对其进行探测时,其中一些信号没有明显的或可识别的信号模式,并且因为单个连接器支持多种显示模式。有几个网站发布了视频连接器的引脚排列,但将发布的信息与测量结果进行交叉检查时,发现了一些差异。我在这里尽力将来自 XboxHacker BBS 和 Sourceforge.net 上的 ucon64 网页上的两个单独帖子拼凑起来并加以协调。原始帖子可以在 http://www.xboxhacker.net/index.php?do=article&id=10&page=1http://ucon64.sourceforge.net/ucon64misc/conn.html 找到。XboxHacker BBS 网页上列出了由 MODE1-3 信号可选择的八个视频模式的定义。我的测量结果表明,所有复合视频和音频信号映射都是正确的,但我无法验证 Xboxhacker BBS 帖子中给出的 SDTV、HDTV 和 RGB 映射。如果任何这些信号有误,我提前表示歉意。

注意,Xbox 连接器上的 12 号和 24 号引脚有较长的引脚,这表明它们用于在热插拔事件期间向连接到视频连接器的外围设备供电。较长的引脚允许在外围设备在 Xbox 通电时连接的情况下,在外围设备电路接收到信号之前先上电。这有助于防止外围设备芯片内部可能出现的称为闩锁效应的潜在破坏性情况。

figure_f-1

图 F-1:从外部查看 Xbox 音频-视频连接器。

| 引脚 | 信号名称 | I/O | 备注 |
| --- | --- | --- |
| 1 | 右音频 | 出 | 音频输出,右声道 |
| 2 | GND | 电源 | |
| 3 | SPDIF | 出 | 索尼/飞利浦数字接口(S/PDIF)音频输出 |
| 4 | VSYNC | 出 | 垂直同步(VGA 输出模式) |
| 5 | GND | 电源 | |
| 6 | GND | 电源 | |
| 7 | GND | 电源 | |
| 8 | GND | 电源 | |
| 9 | Pb / B | 出 | Pb 用于 HDTV 模式,蓝色用于 RGB 模式 |
| 10 | GND | 电源 | |
| 11 | Y/G | 出 | Y 在 SDTV 和 HDTV 模式中,RGB 模式中的绿色 |
| 12 | GND | 电源 | 有较长的引脚用于热插拔 |
| 13 | CVIDEO | 出 | 复合视频输出。 |
| 14 | GND | 电源 | |
| 15 | C / Pr / R | 出 | C 在 SDTV 中,Pr 在 HDTV 中,RGB 模式中的红色 |
| 16 | GND | 电源 | |
| 17 | STATUS | 出 | SCART(Syndicat des Constructeurs d'Appareils Radio Recepteurs et Televisions)状态引脚 |
| 18 | MODE3 | 入 | 视频输出模式选择引脚 3 |
| 19 | MODE2 | 入 | 视频输出模式选择引脚 2 |
| 20 | MODE1 | 入 | 视频输出模式选择引脚 1 |
| 21 | HSYNC | 出 | 水平同步(VGA 输出模式) |
| 22 | GND | 电源 | 左声道音频电缆屏蔽 |
| 23 | 左音频 | 出 | 音频输出,左声道 |
| 24 | +5V | 电源 | +5V 电源,有较长的引脚用于热插拔 |

表 F-3: 视频连接器引脚配置。

表 F-3 中用于 Xbox 视频连接器的引脚编号如图 F-1 所示。Xboxhacker 衍生的引脚配置和 ucon64 衍生的引脚配置在编号方案上存在分歧,因此我选择了一个介于两者之间的编号方案。有趣的是,图 F-1 中的引脚 24 映射到 Xbox 视频连接器上的一个方形焊盘,这表明我在这里为连接器选择的编号方案与制造商的编号方案不一致(方形焊盘通常表示引脚 1,而圆形焊盘表示所有其他引脚)。这不应影响表格的正确性,因为引脚编号方案是任意的,只需与引脚定义表保持一致。

USB 连接器引脚配置

Xbox 使用 USB 衍生版本用于游戏控制器端口。Xbox 前面有四个游戏控制器端口,它们都具有相同的引脚配置,如图 F-2 所示。

figure_f-2

图 F-2: 从 Xbox 机箱外部观察到的游戏控制器引脚配置。

“视频同步”信号是一个 3.3V CMOS 或 TTL 兼容信号。它是一个基本 15.734 kHz 正极性脉冲串,与复合视频输出的水平线时间同步,每个视频场开始时有一个较长的脉冲。该信号使指向电视屏幕的外设,如光笔或用于射击游戏的激光枪,能够导出位置信息。

游戏控制器通过一个中间断开式连接器连接到 Xbox。这个断开式连接器的目的是在电缆绕在用户脚上时,通过拖拽或猛拉来防止控制台损坏(尤其是硬盘损坏)。图 F-3 展示了这个断开式连接器的引脚排列。

figure_f-3

图 F-3:从正面朝向靠近 Xbox 的连接器方向看,游戏控制器断开式引脚排列。

Xbox 游戏控制器具有两个用于内存卡、麦克风和其他外围设备的扩展插槽。这些插槽还提供 USB 兼容接口。游戏控制器包含一个 USB 集线器(Atmel AT43USB401 集线器芯片),它将传入的 USB 信号重复发送到扩展插槽。图 F-4 展示了扩展连接器的引脚排列。

figure_f-4

图 F-4:从面向上方的按钮朝向游戏控制器插槽看,游戏控制器扩展插槽的引脚排列。

以太网连接器引脚排列

Xbox 上的以太网端口是一个标准的 10/100 基带-TX 交叉对 RJ-45 连接器。表 F-4 中的引脚排列和颜色基于 EIA/TIA 568B 标准。图 F-5 展示了连接器的引脚编号。

引脚 描述 线色
1 发送 + 橙色条纹
2 发送 - 橙色
3 接收 + 绿色条纹
4 未连接 蓝色
5 未连接 蓝色条纹
6 接收 - 绿色
7 未连接 棕色条纹
8 未连接 棕色

表 F-4:以太网 10/100 RJ-45 引脚排列。

figure_f-5

图 F-5:从外部朝向 Xbox 后面板看,Xbox 以太网连接器的引脚排列。

ATA 连接器引脚排列

Xbox 使用标准的先进技术附件(ATA)总线与其硬盘和 DVD 驱动器通信。ATA 总线通常(但技术上不正确地)被称为 IDE(集成驱动器电子)总线。今天的大多数驱动器都符合 IDE 风格;例如,SCSI 驱动器也具有集成驱动器电子。然而,多年的(误)使用已经使 IDE 这个术语与 ATA 总线同义。

表 F-5 给出了在 Xbox 主板上向下看连接器时,从 Xbox 后背朝向观察者(连接器应在右手边)看到的 ATA 连接器的引脚排列。注意引脚编号是如何交错排列的,所有奇数引脚在一侧,偶数引脚在另一侧。

引脚 名称 备注 引脚 名称 备注
1 复位 2
3 数据 7 4 数据 8
5 数据 6 6 数据 9
7 数据 5 8 数据 10
9 数据 4 10 数据 11
11 数据 3 12 数据 12
13 数据 2 14 数据 13
15 数据 1 16 数据 14
17 数据 0 18 数据 15
19 20 用于极化的空白引脚
21 DMARQ DMA 请求 22
23 DIOW- I/O 写 24
25 DIOR- I/O 读 26
27 IORDY I/O 就绪 28 CSEL 电缆选择
29 DMACK- DMA 确认 30
31 INTRQ 中断请求 32 IOCS16- 16 位 I/O
33 DA1 设备地址位 1 34 PDIAG- 通过诊断
35 DA0 设备地址位 0 36 DA2 设备地址位 2
37 CS0- 芯片选择 0 38 CS1- 芯片选择 1
39 DASP- 设备活动/从设备存在 40

表 F-5:ATA 连接器引脚排列。

DVD-ROM 电源连接器

Xbox 使用专有的 DVD-ROM 电源连接器。这个连接器不仅提供电源,还携带一些控制和状态信号。这些信号传达有关驱动器和驱动器托盘状态的信息。这里给出的引脚排列来自 Xboxhacker BBS,基于此引脚排列的原始帖子可以在 http://www.xboxhacker.net/forums/index.php?act=ST&f=5&t=1025&s=0755f2b600975b776552f93d0730e4b1 找到。

figure_f-6

图 F-6:DVD-ROM 电源连接器引脚编号,从向下看 Xbox 主板的角度看。

从向下看 Xbox 主板的角度看,连接器引脚编号可以在图 F-6 中找到,引脚排列在表 F-6 中。

引脚 名称 注释 引脚 名称 注释
1 12VDC +12 伏电源 2 5VDC +5 伏电源
3 GND 电流返回,参考 4 EJECT- 活动低托盘弹出
5 TS0 托盘状态 0 6 TS1 托盘状态 1
7 TS2 托盘状态 2 8 ACTIVITY- 磁盘寻道/数据传输
9 12VDC +12 伏电源 10 5VDC +5 伏电源
11 GND 电流返回,参考 12 GND 电流返回,参考
13 未连接 用于极化的空白

表 F-6:DVD 电源连接器引脚排列(在主板上查看)。

LPC 连接器

Xbox 具有基于 LPC(低引脚数)总线的调试和测试端口。这个总线最初由英特尔定义,用于与南桥芯片组一起使用,以减少引脚数,从而降低成本,同时保持对传统 PC I/O 功能的支持。这些传统 I/O 功能曾经位于几乎灭绝的 ISA 总线上,包括键盘、鼠标、串行端口、并行端口和引导 ROM。英特尔对 LPC 总线的规范可以在 http://www.intel.com/design/chipsets/industry/25128901.pdf 找到。

LPC 调试连接器特别重要,因为它可以用来向 Xbox 提供备用 ROM 映像,以防内置 ROM 缺失或损坏,以至于 ROM 看起来缺失或空白。这个特性可以并且已经被用来制作易于安装的备用引导 ROM。

Xbox LPC 调试连接器的引脚排列似乎基于英特尔的可安装 LPC 调试模块设计指南,http://www.intel.com/technology/easeofuse/LPC_mod_spec72.pdf,并有一些小的修改,如表 F-7 中所述。特别是,针 16 的功能不清楚,因为其配对的针 15 被重新分配为 Xbox 主板上的电源针。针 15 作为电源针的分配是通过分配给该针的粗线迹和附近的去耦电容器推断出来的。如果针 15 打算用作永久高 SPDA1 信号,那么将使用没有电源调节的较窄线迹。

引脚 名称 注释 引脚 名称 注释
1 LCLK 33 MHz 时钟 2 VSS 电流返回
3 LFRAME# 开始,LPC 事务结束 4 KEYWAY 空白用于极化
5 LRST# LPC 复位 6 VCC5 +5V 电源
7 LAD3# 复用地址/数据 8 LAD2# 复用地址/数据
9 VCC3 +3.3V 电源 10 LAD1# 复用地址/数据
11 LAD0# 复用地址/数据 12 VSS 电流返回
13 SCL I2C 串行时钟 14 SDA I2C 串行数据
15 VCC3 +3.3V 电源(在英特尔规范中为 SPDA1) 16 SPDA0 串行 EEPROM 设备的地址选择(?)。

表 F-7:LPC 连接器引脚排列(主板视图)。

风扇连接器

Xbox 中的风扇连接器是一个三针接头,其中针 1 和针 3 连接到温度调节的脉冲宽度调制(PWM)风扇速度控制器,而针 2 连接到+12 伏电源。

前面板连接器

Xbox 的前面板功能,即闪烁的 LED、电源开关和弹出开关,通过前面板连接器连接到 Xbox 主板。此连接器的引脚排列如表 F-8 所示。引脚排列反映了从上方查看 Xbox 主板上的连接器引脚编号。

| 引脚 | 注释 | 引脚 | 注释 |
| --- | --- | --- | --- | --- | --- |
| 1 | 地 | 2 | 开关电源 |
| 3 | 地 | 4 | 弹出开关 |
| 5 | 绿色 LED | 6 | 红色 LED |
| 7 | 红色 LED | 8 | 绿色 LED |
| 9 | 未连接但已布线 | 10 | 无针(极化) |

表 F-8:前面板连接器(主板视图)。

$24.99 ($34.99 CDN)

货架位置: PC 硬件/通用

获取 在微软之前破解 Xbox!*

qANQR1DBwU4DiyVm0iq7P8gQB/9IoylwNnOxHExELKfHCTyOxX1m/eKe3+bgN/kc

afpcdG1BR0ZV3degJhP2ru8h58Tw/MLU+h+jMYPUOCulwRAMyhxqX+0K1fU0oNAd

1UKi0e8sju0mks0XXzEOXNpM6BO8L90/NCSUTWPBUMgR6/KtezsFJUDAIOlxVuBX

IpN1x+6A3O6Tayrg0+Qp+hD3FDRSIVKoD/uiaCnxkp5wxXh3JPRU3JMHWtUcwsr2

ThN1xhandO6Tn gg0dep+hDhackingKwas iaCcekledxby3JheUoriginalwsr2

这本关于破解的实用指南因原始出版商担心 DMCA 相关诉讼而被取消。在作者自行出版书籍(在此期间他直接销售了数千本)之后,破解 Xbox 现由 No Starch Press 出版。

《破解 Xbox》 从几个硬件修改的逐步教程开始,这些教程教授基本的黑客技术和必要的逆向工程技能。它进一步讨论了 Xbox 的安全机制和其他高级黑客主题,强调计算机安全和逆向工程的重要主题。本书包括许多实用指南,例如如何获取黑客工具、焊接技术、调试技巧以及 Xbox 硬件参考指南。

《破解 Xbox》 面临着当今黑客所面临的社会和政治问题,并通过与几位大师级黑客的访谈,向读者介绍了背后的人。它探讨了今天对合法逆向工程活动的法律挑战可能产生的潜在影响,这些问题在电子前沿基金会(EFF)的 Lee Tien 所贡献的一章中得到了进一步探讨,该章节讨论了黑客的权利和责任。本书以对安全 PC 平台最新趋势和漏洞的讨论结束。

赶快购买 《破解 Xbox》,以免微软先下手为强!

VurrRyVnZ6EetM Hacking yD h i Xbox xbEforeaMicrosoft BOesDPGWrkhbxfH

VDsdRyVDZ6E0sMGl2Qe9/yDriFn2RJx1E1bmoaSd/+Va3UfEBOXBDPGWrkhbxfH

5+zS6m6B4sG3p+2veuIZSN3CTfHRWCbAjcmYWokhHUN+p2VOpeTit7w08cEqMjDc

/du9x6CkPyxGMcL4EwVpNLf3PO6nCevVNRk18pSq64ICUgtRFqmc+JXCg+UZO2Mi

ISBN 1-59327-029-1

5 2 4 9 9>

9 781593 270292

THE FINEST IN GEEK ENTERTAINMENT™

www.nostarch.com

posted @ 2025-11-27 09:20  绝不原创的飞龙  阅读(85)  评论(0)    收藏  举报