A9VG电玩部落论坛

 找回密码
 注册
搜索
12
返回列表 发新帖
楼主: aim

[破解] [破解]另一个cIOS应用:xyzzy-1.0,获取你机器的key[11楼更新9562大大厚道的翻译和

[复制链接]
aim

精华
2
帖子
5433
威望
7 点
积分
6041 点
种子
5 点
注册时间
2005-7-12
最后登录
2020-11-17
 楼主| 发表于 2008-7-25 21:00  ·  广东 | 显示全部楼层
下面是引用9562于2008-07-25 10:11发表的:
老大,全砖的nand可以修复了吗,外网有消息吗,难道他们那全砖很少?
老早就出了Bushing's Amoxiflash刷写程序
需要那个 Infectus 和一个自制的PCB


.......
应该能修,但是要时事先备份数据,用备份数据修复。否则可能修起来很麻烦,大概跟key有关系吧。我没记错的话直接复制别的机器的数据是不行的

精华
0
帖子
516
威望
0 点
积分
560 点
种子
11 点
注册时间
2007-3-5
最后登录
2024-10-8
发表于 2008-7-31 21:44  ·  江苏 | 显示全部楼层
转自以下网址
竟然是3月的帖子

http://www.itocp.com/viewthread.php?tid=4474


本文是timbinc的blog的一个翻译,主要是想让大家了解wii的破解过程和wii的加密系统的运作情况,
有些专业术语会在后面做个简短的介绍。

Wii hacked it!
   在bushing展示了首个通过注入执行的homebrew之后,发生了很多事情。这次注入是通过光盘的哈希和验证漏洞来完成的,但是它的发现者segher决定不公布这个漏洞。这个漏洞很容易通过以后的firmware更新来patch掉,并不会造成功能上的任何影响。此外,还有一个漏洞就没那么容易被patch了。因为这个注入是通过游戏的savegame漏洞执行的。当然你可以对游戏代码进行修改,但是我们也可以换个游戏。
   好吧,我已经花了太多时间在high-level上面了,所以还是让我们回到我感兴趣的系统结构上来吧,我们来讲讲bootloader!
   之前我们已经知道了在wii的flash中有一个称为"boot1"的固定代码块作为wii的第一段执行代码。它是"starlet"的执行代码.我们现在还不知道这段代码的加密算法(有传闻是基于LFSR的流芯片并使用AES加密算法),也不知道代码是如何做hash的.但是我们有一个从系统update中得到的称为"BC"的程序.我们不确定BC代码的用途(可能是用来从gc模式返回到wii模式),但是BC确实能够替代boot1的工作.它能够从flash中读取一段数据并进行解码,验证解密部分并跳过.一旦我们对其算法重新编码,实际上我们就得到了一个"boot2".设定一个新的哈西函数对boot2进行加密,那么我们就有了一个种了bug的boot2了,并且能够用它来替换boot1。显然,直接将boot2灌入flash是危险且愚蠢的,因为你得不到任何返回结果,无法判断代码的执行情况。
   那么接下来要做的事情就很清楚了,我们要使用boot2替代boot1在starlet上执行这段代码。我把我那台在360上用过的老旧的FPGA的NAND flash emulator又拿出来使用。我把flash的针脚接在FPGA上,花了好几个小时,让这个升级版的flash能够在wii上正常工作。现在我可以从这个替换的FPGA上启动了。由于这个NAND flash emulator有512MRAM,我无法将flash的内容输出到ram,所以我立刻改写了代码并用它替换了flashrom中的代码。我使用的这个NAND模拟器的FPGA里有一个内嵌的Powerpc核心,我加了一个以太网MAC,并使用lwip连接到一个TCPserver来标示flash页的位置。这样能使得开发的工作容易些,并且最重要的,我现在能够在pc上看到并修改NAND的内容。
   bushing已经准备了一个修改过的boot2,非常幸运,它可以在starlet上运行。那么,接下来要做的第一件事当然就是"hello world",但如何输出结果?就像我曾经在gc模式下做的一样,我想使用一个软件UART,但我找不到可用的GPIO。最后我使用了sensorbar的LED来输出结果,就像你们图片中看到的一样。

   之后,我使用NAND接口来运行一个非标准命令来得到指定地址的内容,然后我在FPGA上添加了代码将地址内容输出到FPGA的UART上。
   经过几个小时,我终于dump出了boot1,并且还dump出了一段新的代码。这段代码用来对NANDflash的头进行解密送到memory并作了一个SHA1加密。通过比较hash运算前后的数据,表明这段代码就是个bootrom!bingo,我决定称它做boot0。
我们来看看wii启动前的整个加密过程做了些什么:
1.wii首先执行boot0代码,这段代码可能是存放在hollywood的掩模rom中
2.boot0从flash中载入首个0x2F页("既boot1"),使用固定的AES密匙解码,然后作hash运算和预订值进行对比
3.如果hash运算得到的结果全为0,则跳过检查(猜测可能供某些开发机使用)
4.boot1查找flash中的一个确定的头部位置,从那里得到boot2的位置信息
5.在那个地方,需要对boot2做一次验证,然后通过hash运算解出boot2
6.从flash中加载boot2的payload,解码并做hash验证
7.boot2加载firmware,然后是系统启动之类的事情,后面的我不是很感兴趣了....
..........
    后面就是timbinc对wii的加密系统的评价,他提到使用bootrom是一个很好的思路。作者提到在gc上由于硬件的限制,使得加密运算不可能做的很复杂,往往都是使用一个固定的密钥做流加密,不能hash,是个很大的漏洞。bootrom提供足够的空间可以使用更加复杂的算法,甚至还能提供硬件级的SHA-1,AES的加密计算,这样使得整个加密系统比以前进步很多。后面作者还提到这个系统的一些缺陷以及自己对这个加密系统的一些改动想法,然后是对整个破解团队的感谢

具体内容看这里http://debugmo.de/?p=59#more-59
注:
homebrew:自制软件,指未经授权玩家自行编写的软件
high-level:指高层系统。后面tim写的是对wii的底层加密系统的破解,相较而言,对TPsavegame的bug注入就是在应用层的高层破解。
hash算法:把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。比较著名的hash算法有MD5.MD2等,下文提到的SAH1也是一种
starlet:一个在图形处理器中没有公开过的芯片(undocumented processor),这个芯片被他们叫"Starlet"(因为没有官方名称),芯片的作用是控制Wii的RAM、安全和加密并控制几乎所有周边。
LFSR:线性反馈移位寄存器。其反馈函数是寄存器中某些位的简单异或。一个n位的LFSR能够在重复之前产生2^n-1位长的伪随机序列,一般用来做伪随机数产生。
UART:通用异步收发器。它是一种串行接口,许多微处理器和微控制器中都包含这种外设接口。它提供了一种简单的途径,使两个器件无需共享同一个时钟信号就能进行通信。串口信号只需两根信号线(Rx和Tx)即可实现,而且只要两端器件都采用同样的位格式和波特率,那么它们无需其它任何对方的信息就可以成功传输数据。
LWIP:LWIP是瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP的含义是Light Weight(轻型)IP协议,相对于uip。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LwIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端嵌入式系统中使用。

精华
2
帖子
4942
威望
7 点
积分
6124 点
种子
0 点
注册时间
2007-4-8
最后登录
2024-3-12
发表于 2008-7-31 22:14  ·  北京 | 显示全部楼层
金顶神功顶LS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2025-2-2 06:42 , Processed in 0.147829 second(s), 12 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部