xbox360吧 关注:267,282贴子:6,111,164

回复:Xbox360保护和破解的历程

取消只看楼主收藏回复

让我们暂时离开光盘驱动器固件的战场,有一个不太有趣的时期。当时研究人员试图制作“隐形”固件(LiteTouch+就此埋下伏笔),以免被 Xbox Live 禁止,适应具有新“浪潮”的新游戏 - 尽管微软对光驱固件进行版本更新。但研究者依旧有应对措施并将结果移植,扩展到各种固件和驱动器的所有内容中。无论如何,一切型号的驱动器都可以被刷写固件了,“备份”成功启动,Xbox 360 越来越受到人们的欢迎......
我们断轴了!


IP属地:浙江来自Android客户端17楼2023-10-12 13:25
回复
    正如您在故事的第一部分中所记得的那样,Xbox 360 系统有一个控制一切的虚拟机管理程序,所有的游戏都在虚拟机内运行。
    所以就是这样。其中一个系统版本,突然出现了一个漏洞!我不确定研究人员到底是如何获得虚拟机管理程序代码样本的。
    但事实是,早在 2006 年底,研究人员就在 Xbox 360 上发布了未签名的代码。
    在 2007 年初,开发人员修复了该漏洞:
    时间表:
    2006 年 10 月 31 日——发布 4532 内核,这是第一个包含 bug 的版本
    2006 年 11 月 16 日——概念验证完成;未签名的代码在虚拟机管理程序上下文中运行
    2006 年 11 月 30 日 — 发布 4548 内核,错误仍未修复
    2006 年 12 月 15 日 — 首次尝试联系供应商报告错误 2006 年 12 月 30 日
    — 公开演示
    2007 年 1 月 3 日 — 已建立供应商联系,全面详细信息披露
    2007 年 1 月 9 日 — 供应商发布补丁
    2007 年 2 月 28 日 — 完整公开发布


    IP属地:浙江来自Android客户端18楼2023-10-12 13:30
    回复
      2026-01-28 18:53:41
      广告
      不感兴趣
      开通SVIP免广告
      虚拟机管理程序有一个功能 - 与其余代码不同,它不是在虚拟地址空间中执行,而是在物理地址空间(实模式)中执行。
      没有使用广播,直接调用地址,如:
      (0x00000000'xxxxxx)。
      这样做要么是为了速度,要么是为了简单……
      这就是 Xbox 360 地址空间的一个特点:
      内存访问模式由其物理地址决定。也就是说,地址的最高有效位具有服务目的。例如:
      地址0x00000 0 00'0000201C 表示直接访问地址0x201C
      而 0x00000 1 00'0000201C 表示在读取同一物理地址 0x201C 时进行即时解密和完整性检查。


      IP属地:浙江来自Android客户端19楼2023-10-12 13:37
      回复
        因此,为了在启用加密和保护的情况下执行,您需要访问
        0x00000 1 00'xxxxxxxx 形式的地址。
        这时硬件模块才开启保护机制。因此,在硬件级别,会自动添加所需的位,也就是这个“1”
        (一个特殊寄存器 “HRMOR” - 虚拟机管理程序实模式偏移寄存器,负责此操作)!
        再次强调,一旦虚拟机管理程序访问像
        0x00000 0 00'xxxxxxx 这样的地址,
        MMU 就会自动将该地址更改为 0x00000 1 00'xxxxxxx,包括加密和保护,且无法跳过这一加密过程!因此,任何在没有保护和加密的情况下“直接”从物理内存执行代码的尝试都注定会失败......或者不一定?
        我们来看看虚拟机管理程序版本 4532 的易受攻击的代码:
        //в %r0 – 获取系统调用号
        13D8: cmplwi %r0, 0x61 –//与最大有效ID(0x61)的值进行比较
        13DC: bge illegal_syscall –//如果传输的数字值大于0x61,我们就说它不正确(非法)
        ...
        13F0: rldicr %r1, %r0, 2, 61 –//将系统调用号乘以4
        13F4: lwz %r4, syscall_table(%r1) –//从syscall固定调用表中获取处理程序地址
        13F8: mtlr %r4 –//将处理程序地址放入 lr 寄存器中
        ...
        1414: blrl —//跳转到这个地址
        你发现漏洞了吗?他就是!cmplwi 指令适用于32 位值,但 rldicr 指令适用于64 位值!也就是说,我们可以提交值0x20000 0 00'0000002A作为系统调用号,它会通过检查(因为低于32位部分0x20小于0x61),因此,处理程序地址不是地址0x00000 0 00'0x10EC,而是将从
        0x80000 0 00'000010EC 获取!
        然后,正如他们所说,小心你的手。地址的最高有效位不为零,因此不添加HRMOR !并且由于真实地址空间是32位,所以我们设置的63位被简单地忽略。我们只需提供不正确的系统调用号即可将虚拟机管理程序重定向到未加密且未受保护的内存!


        IP属地:浙江来自Android客户端21楼2023-10-12 13:57
        回复
          但是等等,既然有方法跳转了,但是为了有地方可以作为跳转的目标,我们需要能够将数据写入物理内存。如何实现这一目标?
          这就是第二个因素发挥作用的地方 - Xbox 360 中的 GPU 非常智能,甚至过于智能。它支持特殊的着色器指令“MemExport”,用于将几何数据导出到物理内存中。也就是说,您可以编译一个着色器,在 GPU 上执行它,从而在任何地方编写任何内容!最重要的是,着色器没有签名;如果您以某种方式修改游戏光盘,则可以轻松替换着色器代码。
          那么只剩下一个问题了。如何替换游戏光盘上的着色器代码?这就是破解机顶盒 DVD 驱动器非常有用的地方。


          IP属地:浙江来自Android客户端22楼2023-10-12 13:59
          回复
            贴吧吞回复了。不更新,服了


            IP属地:浙江来自Android客户端30楼2023-10-12 14:17
            收起回复
              黑客们编写了一个着色器,并将其替换到游戏映像中,刻录在光盘上并成功启动了 Linux!这即是金刚破解(KK) 是的,要启动它,每次都必须启动游戏映像,等待漏洞发挥作用进行引导,并插入 Linux 启动盘。这至少是一个成功的方法在xbox360上运行着未签名代码,尽管没有free boot来得直白




              IP属地:浙江来自Android客户端32楼2023-10-12 14:24
              回复
                正如已经提到的,微软在07年初发布了新内核4558,修复虚拟机管理程序漏洞的系统更新。但是如果我们想要返回有漏洞的内核怎么办?
                降级!
                一般来说,Xbox 360 的保护架构包括停机保护机制。在处理器的硬件熔丝中,从内核4558开始,每次执行更新时,都会烧坏新的一位(锁定值,CF LDV 增加)
                如果熔丝中的同一个 LDV 与系统中的不匹配,游戏机就会简单地执行此保护操作不开机(RF板上下两红两绿故障灯交替闪烁)。
                让我们看一下 Xbox 360 引导加载程序(BL)的结构,即“引导加载程序部分”



                IP属地:浙江来自Android客户端35楼2023-10-12 14:36
                回复
                  2026-01-28 18:47:41
                  广告
                  不感兴趣
                  开通SVIP免广告
                  可以看到该镜像有几组加载器,每组加载器对应一个LDV。
                  在示例中,LDV 0 为1888, LDV 3 为16767, LDV 2 为16756。
                  因此,系统本身的所有更新都记录在 6BL/7BL 部分中,并以补丁的形式简单地“覆盖”在基础上“核心”5BL1888。但是要应用哪组补丁是根据熔丝和加载器标头中规定的 LDV 选择的!对于 5BL,可以修改标头,但有一个大问题 ,也就是先前所提到的加密。
                  - 其使用其中写入的 HMAC-SHA-1 哈希和,来检查标头的正确性。并使用通常的memcmp检查。
                  如果您还没有意识到这是怎么回事,他们在这里设法使用了定时攻击。标准memcmp函数在第一次差异后立即结束比较。因此,通过更改散列的第一个字节并计时memcmp的执行时间,您可以选择所需的值(有了它,验证时间将增加)。继续下去,你可以拾取哈希和的所有字节!
                  对于测量,我们使用 POST_OUT 调试总线。它的工作原理很像在PC上;在加载的不同时刻,会显示一个一字节的值,从中可以判断处理器当前正在执行的位置以及发生了什么错误。本质上,这些是主板上的 8 个点,每个点负责一个特定的值:
                  注:后续的rgh破解也是用到了这条总线以监控cpu状态,从而发出脉冲重启信号


                  IP属地:浙江来自Android客户端36楼2023-10-12 14:41
                  收起回复
                    通过焊接到这些点,您可以测量每个加载阶段的执行时间并查看是否发生错误。
                    整个哈希选择过程大约需要一个小时。
                    结果是一个镜像,其中为基础内核安装了当前的 LDV,这就是为什么没有应用补丁并启动了最旧版本的 1888 系统!从而可以更新到有漏洞的版本 4532:




                    IP属地:浙江来自Android客户端37楼2023-10-12 14:44
                    收起回复
                      当然,微软通过更新第一个可更新引导加载程序(2BL,“CB”)并烧断 CBLDV 保险丝(fuseset 02)来修复此漏洞,这使得再次降级变得不可能。现不再使用 memcmp,而是使用其安全版本,无论外部输入值如何,执行时间都相同。


                      IP属地:浙江来自Android客户端42楼2023-10-12 15:11
                      收起回复
                        JTAG 破解!
                        在降级并且使用KK漏洞的路途被封堵的情况下,研究人员也没有放弃,并发现了一个新的漏洞。是的,这是开发者无法想象的。
                        在游戏机的正常操作模式下,所有引导加载程序(BL)以链的形式相互连接(1,2,…,6,7)。因此,每个加载器的一级秘钥解密取决于前一个加载器标头中的数据区域(配对数据,上级配对秘钥)。此外,代码加密取决于唯一的处理器密钥,因此您无法在不知道 CPU_Key 的情况下获取和构建工作映像。
                        或者,有可能吗?
                        在主机生产阶段(当处理器密钥尚未通过网线烧入保险丝时),当配对数据为零(零配对)时,会使用 Xbox 360 的特殊启动模式。这样的映像(具有易受攻击的内核!)可以在任何主机上启动,甚至不需要知道处理器密钥!
                        不幸的是,不会完全启动;您将收到以下e79固件错误:
                        注:不同于0熔丝cpu的xdk xebuild加载,单纯仅未烧录cpukey


                        IP属地:浙江来自Android客户端45楼2023-10-12 19:31
                        回复
                          也就是说,虽然金刚游戏无法启动,漏洞利用无法通过着色器激活……但易受攻击的内核已经启动了!
                          也许还有另一种方法可以读写RAM来运行未授权的代码?原来是有的。
                          首先,我们将机顶盒南桥的三个空闲 GPIO 引脚焊接到 GPU 的 JTAG 引脚上:
                          然后我们修改南桥固件,即SMC(虽然它是加密的,但未签名),并使用易受攻击的内核组装镜像。然后神奇的事情发生了:
                          启动时,南桥通过 GPU JTAG 爬升到 PCI Express 并配置 NAND 控制器
                          现在NAND控制器在读取时,会将数据写入我们需要的内存区域
                          系统内核启动并告诉南桥系统已经启动(在出现E79之前)
                          南桥猛拉 NAND 控制器,在正确的位置覆盖 RAM 并利用虚拟机管理程序漏洞!(即不添加HRMOR,但使用读取)
                          控制权转移到我们的代码,我们做我们想做的
                          简而言之,我们所做的一切与 King Kong Shader Exploit 中相同,但更酷 - 无需启动游戏和更换磁盘,在开机过程中就完成了曾经使用KK着色器完成的任务。


                          IP属地:浙江来自Android客户端46楼2023-10-12 19:37
                          回复
                            基于JTAG Hack,创建了系统的修改版本——XBReboot、Freeboot,禁用了签名验证,使得盗版猖獗。游戏不仅可以从 USB 驱动器和硬盘驱动器启动,还可以通过 SMB 协议直接从计算机启动。
                            重要的是,成熟的系统黑客为那些丢失 DVD 密钥而无法玩游戏的人提供了机会 - 拥有处理器密钥,从Xell或者固件KV解密,提取 DVD 密钥并不困难。
                            当然,微软再次通过再次更新2BL CB并增加CBLDV值来快速关闭该漏洞。易受攻击的虚拟机管理程序的传奇故事到此结束,人们跑去商店购买“JTAG 兼容”游戏机的剩余部分 - 每个人都希望从 USB 闪存驱动器上玩游戏而不出现任何问题。论坛上讨论了哪些发布日期的捆绑包适合黑客攻击……有关(7371之前)
                            Xbox 360 系统修改的话题已经平息了近两年,但固件的话题仍在继续发展。研究人员和微软之间最广泛的争斗正是在LiteOn驱动器的固件中发生的。但更多内容将在下一篇文章中介绍:)
                            敬请期待第二部分


                            IP属地:浙江来自Android客户端47楼2023-10-12 19:40
                            收起回复
                              2026-01-28 18:41:41
                              广告
                              不感兴趣
                              开通SVIP免广告
                              第二部分:
                              上次我们进行 Xbox 360 光驱固件的话题时,提到开发人员明显意识到 DVD-ROM 的保护很容易被绕过,并且肯定需要对此采取一些措施。
                              他们尝试了通过更新游戏机本身的软件来纠正这种情况没有成功,所以新的驱动器,飞利浦和建兴进入了战场。
                              Xbox 360 的 DVD 驱动器在每个新型号的保护方面都变得越来越先进。但黑客们拥有的破解手段每次都会变得越来越复杂来应对。
                              在这一部分中,15432将陈述给您开发人员是如何尝试纠正使用未经许可光盘的情况,以及当几乎所有方法都封堵时您还可以采用哪些方法来刷新 DVD 驱动器固件。


                              IP属地:浙江来自Android客户端51楼2023-10-12 19:56
                              回复