- 精华
- 0
- 帖子
- 46
- 威望
- 0 点
- 积分
- 47 点
- 种子
- 0 点
- 注册时间
- 2012-10-10
- 最后登录
- 2016-8-22
|
本帖最后由 /sun独孤宇鹏 于 2012-10-31 17:30 编辑
几日前成功破掉Corona 4G主机后,对开机时间一直不甚满意,不是很稳定,所以翻了一些国外论坛,仔细的阅读了一下关于脉冲自制的原理,不知道自己理解的正确与否,与大家一起交流一下。
脉冲自制原理:
(free60大大原文)
We found that by sending a tiny reset pulse to the processor while it is slowed down does not reset it but instead changes the way the code runs, it seems it's very efficient at making bootloaders memcmp functions always return "no differences". memcmp is often used to check the next bootloader SHA hash against a stored one, allowing it to run if they are the same. So we can put a bootloader that would fail hash check in NAND, glitch the previous one and that bootloader will run, allowing almost any code to run.
XBOX360的CPU硬件上有设计缺陷,对某些硬件攻击没有防护能力(比如重启脉冲法),在处于低频运行时(老版频率520KHz,Slim版频率100Mhz),给CPU发送一个复位脉冲后,CPU不会重启,反而会崩溃掉BOOTLOADER校验机制,从而使运行自制BOOTLOADER时,MEMCMP函数仍然可以返回校验正确的结果,这样启动系统后,就可以随意执行任何未签名的代码了。
关于脉冲板:
因为自己用的脉冲板是maxtrix蓝板,故信号点说明以此为例:
A点:CPU_reset (用于在CPU运行于低频状态时发送复位脉冲,使CPU校验机制崩溃,从而可以加载自制的bootloader)
B点:POST_OUT1(系统反馈信号码型,用于了解当前系统的工作状态)
C点:STBY_48M(脉冲板工作的主时钟,由XBOX上的hana芯片引出)(此接点在CORONA主板上已经取消掉了)
D\E点:I2C总线(RGH2.0上用于配置时钟配置芯片,达到使CPU工作频率降低的作用,与CPU_PLL_BYPASS类似,但slim上没有CPU_PLL_BYPASS信号)
VCC/GND:脉冲板的工作电源和地
脉冲板的主要作用就是在适合的时间点上向CPU发送一段复位脉冲来扰乱CPU的校验机制。这里面有两个关键点:
1.足够低的CPU主频。
只有CPU主频足够低的时候,运行速度较慢的时候,才可以相对拉长这个适合的时间点,提高成功率。
2.适合的时间点。
只有在适合的关键时间点上发送复位脉冲,才能成功扰乱CPU校验机制,从而成功开机。
针对第一点,因为老板主机的主板上面有CPU_PLL_BYPASS信号接点,在启用该接点时,可以使CPU主频降低至520KHz,如此低的主频提供了足够长的脉冲时间点,所以老版主机的开机成功率普遍较高。而Slim版主机的主板没有CPU_PLL_BYPASS这个信号接点。无法像老版主机一样将CPU主频降到那么低的程度,但是发现该主板上的100MHz时钟频率可以由可编程PLL寄存器控制,从而使CPU与GPU的频率异步匹配。而这个寄存器是可以由SMC通过I2C总线改写的,通过改写PLL寄存器从而使CPU主频降低。
针对第二点,老版主机有CPU_PLL_BYPASS信号接点可以将时间点“拉伸”的足够长,Slim主机的Trinity主板有HANA芯片,可以给脉冲板提供原始时钟频率。让脉冲板与主板运行在一个同步的时钟频率。
这里简单说一下单片机的计时原理,单片机由晶振提供原始时钟频率,然后通过分频器,得到各种需要的时钟频率,比如1HZ(每个脉冲周期是1秒),比如1KHz(每个脉冲周期是一毫秒),从而可以实现各种需要的计时周期。这里有个问题,因为晶振的震荡频率出厂就确定了,不同的晶振震荡频率是不完全一致的,是由他们的形状、材料、切割方向等因素确定的。
由此可以分析,trinity主板由主板上的HANA芯片给脉冲板提供原始时钟频率,让脉冲板与主板运行在一个同步的时钟模式上,这为后续的复位脉冲计时提供了一个精确的时钟基础。可坑爹的是,CORONA主板取消掉了HANA芯片,脉冲板的时钟频率只能由一个独立的晶振提供。问题来了,质量不好的晶振的振荡频率跟标称是有差距的,这就给后续脉冲复位计时带来了不稳定因素。所以个人觉得,一个质量好的振荡频率精确的晶振是提高开机成功率的必要因素。
来看一下开机的流程:
1.通过I2C总线(D/E接点)向CPU发送D8代码,降低CPU主频至100MHz。
2.监听B接点,等待DA代码的开始(DA代码是执行内部存储的哈希值与固件镜像中的哈希值的匹配),当监听到DA代码后,启用一个计时器。
3.当计时器达到一个预设的精确值时,通过A接点向CPU发送一个20ns的复位脉冲。
4.等待一段时间后,通过I2C总线向CPU发送指令,恢复正常的CPU主频。
5.监听B接点,如果监听到F2代码的话,说明启动失败,脉冲板进入下一个工作周期。幸运的话,就会成功启动了。
这里计时器的预设等待时间是在程序代码里面设置好的,我们无法修改,而不同主机需要的时间是有细微不同的,预设的时间不一定会适合该主机,这个时候需要我们采取一些手段来改变这个发送脉冲的时间。
电路中能起到该作用的有两个原件,一个是电容,一个是电感(A点接线绕圈等效于一个空心电感)。
在脉冲发生时,电容的充放电过程会一定程度上延缓脉冲到达上升沿或下降沿的时间,同理,电感的自感作用也会延缓这个时间(小弟电路上只有初级基础,不知道这么理解的对不对)
所以小弟理解的是,使用电容和电感,都会细微的延长达到脉冲边沿的时间,也就相当于延后了这个关键时间点,空心电感的电感值跟绕线直径与箍数有关,电容值和等效电感值的改变,会实现不同的延缓时间。
关于电阻,小弟的理解是,电阻串联在A接点上,起到分压的作用,这样在脉冲电压变化有斜率(增加电容和电感后)的时候,可以把时间点稍稍提前。我也不知道这么理解对不对,如果理解有误,希望各位朋友能多交流一下。谢谢啦.....
|
|