Editing Boot Order

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
[[Category:Software]]
== Boot Sequence ==
== Boot Sequence ==
Power on: syscon boots from its internal (non-encrypted / dual banked) ROM *1 *2
Power on : syscon boots from it's internal (non-encrypted / dual banked) ROM *1 *2
  + syscon powers up various power subsystems
  + syscon powers up various power subsystems
  + syscon powers up cell and checks status
  + syscon powers up cell and checks status
  + syscon sends Cell configuration ring to Cell. It is either sent during or before bootldr. The config ring is checked within bootldr (ch67).
  + syscon sends Cell configuration ring to Cell
  + syscon pulls the reset of Cell high -> Cell INIT (Partially).
  + syscon pulls the reset of Cell high -> Cell INIT
Cell INIT: CELL boots from its internal ROM *2
Cell INIT: CELL boots from it's internal ROM *2
  + fetches encrypted bootldr off NAND (at address 0x000000) /NOR flash (at address 0xFC0000) and boots in isolated SPU.
+ Initialises I/O
Bootldr Running: (Which SPU?)
  + fetches encrypted bootldr off NAND/NOR flash (at address 0xFC0000)
  + Initialises I/O (IOIF0/IOIF1)
+ Initialises RAM
  + Initialises XDR (And verifies with memtest elf - On SPU 0 - It's hardcoded to load there).
  + loads bootldr into Isolated SPU (SPE0)
  + Runtime Secure Boot decrypts and verifies bootldr and executes
  + bootldr decrypts lv0 which runs on PPU -> loaders INIT
  + bootldr decrypts lv0 which runs on PPU -> loaders INIT
  NEW consoles only: metadata lv0.2 (signed with nonrandomfail key) is used to check lv0 integrity
LV0 Running:
+ LV0 boots frequency to 3GHz and does more HW init
loaders INIT: lv0 loads metldr (SPE2)
loaders INIT: lv0 loads metldr (SPE2)
  + passes lv1ldr (which loads lv1) to metldr
  + passes lv1ldr (which loads lv1) to metldr
Line 22: Line 21:


*1) Read/Writeable with undocumented / should also be read/writeable through serial port and possible to switch it to the backup bank1 with backup_mode pulled high
*1) Read/Writeable with undocumented / should also be read/writeable through serial port and possible to switch it to the backup bank1 with backup_mode pulled high
*2) {{CEX}} (+DEX?) consoles go to standby with red light. {{SHOP}} consoles will not standby, but instead boot through without waiting for powerbutton. Also check is done on all models if update is flagged to set it into firmware updating procedure
*2) CEX/Retail consoles go to standby with red light. SEX/SHOP/SECH will not standby, but instead boot through without waiting for powerbutton. Also check is done on all models if update is flagged to set it into firmware updating procedure
*3) Partialy Read/Writeable
*3) Partialy Read/Writeable
about the disabled SPE: syscon reads it’s internal (non-encrypted) eeprom @ 0x48C30 which is value 0×06 on all {{CEX}} consoles and will set the cell config ring accordingly for 7 SPE’s. SPE0 and SPE2 are reserved for bootldr and metldr for isolation respectively. Setting the value to a nonworking state (e.g. 0×00, 0xFF, enabling a defective SPE or disabling a needed SPE for proper boot) might brick the console, locking you out from restoring the correct value to the syscon eeprom. Config ring is checked against the known one in bootldr. If you were to modify syscon and the config ring, it still wouldn't boot and would panic as the config ring does not match the expected one.
about the disabled SPE: syscon reads it’s internal (non-encrypted) eeprom @ 0x48C30 which is value 0×06 on all CEX/Retail consoles and will set the cell config ring accordingly for 7 SPE’s. SPE0 and SPE2 are reserved for bootldr and metldr for isolation respectively. Setting the value to a nonworking state (e.g. 0×00, 0xFF, enabling a defective SPE or disabling a needed SPE for proper boot) might brick the console, locking you out from restoring the correct value to the syscon eeprom.


=== References ===
=== References ===
* [http://ip.com/patapp/US20090055637 Secure power-on reset engine]
* [http://www.multiupload.com/7STWIQ8PBF CellBEBootprocess.pdf (177.69 KB)])
** [https://patentimages.storage.googleapis.com/f1/41/35/ebbd57077c21f9/US7895426.pdf US7895426.pdf]
* [http://www.multiupload.com/KZPVRP2JP8 CBE_Secure_SDK_Guide_v3.0.pdf (182.63 KB)])
** [https://web.archive.org/web/*/http://ps3devwiki.com/files/documents/US20090055637.pdf US20090055637.pdf]
* [http://www.multiupload.com/9L0M97K4CH CellBE_HIG_65nm_v1.01_8Jun2007.pdf (2.38 MB)])
* [https://web.archive.org/web/*/http://ps3devwiki.com/files/documents/-%20Cell%20BE/CellBE_Handbook_v1.12_3Apr09_pub.pdf CellBE_Handbook_v1.12_3Apr09_pub.pdf]
* [http://www.multiupload.com/KERLEWC2PW CellBE_HIG_90nm_v1.5_30Nov2007_pub.pdf (2.38 MB)])
* [https://web.archive.org/web/*/http://ps3devwiki.com/files/documents/-%20Cell%20BE/Cell_Broadband_Engine_processor_vault_security_architecture.pdf Cell_Broadband_Engine_processor_vault_security_architecture.pdf]
* [http://www.multiupload.com/7STWIQ8PBF CellBEBootprocess.pdf (177.69 KB)]) (Mirror: [http://git.gitbrew.org/openclit/documentation/CellBEBootprocess.pdf GitBrew]) //
* [https://web.archive.org/web/*/http://ps3devwiki.com/files/documents/-%20CELL%20SDK%20Documentation/lib/CBE_Secure_SDK_Guide_v3.0.pdf CBE_Secure_SDK_Guide_v3.0.pdf]
* [https://web.archive.org/web/*/http://ps3devwiki.com/files/documents/-%20Cell%20BE/CellBE_HIG_65nm_v1.01_8Jun2007.pdf CellBE_HIG_65nm_v1.01_8Jun2007.pdf)]
* [https://web.archive.org/web/*/http://ps3devwiki.com/files/documents/-%20Cell%20BE/CellBE_HIG_90nm_v1.5_30Nov2007_pub.pdf CellBE_HIG_90nm_v1.5_30Nov2007_pub.pdf])
* [https://web.archive.org/web/*/http://ps3devwiki.com/files/documents/BE_Hardwar_Init_Guide_v1.3_31March2006.pdf BE_Hardwar_Init_Guide_v1.3_31March2006.pdf]


== Chain of Trust ==
== Chain of Trust ==
Line 50: Line 43:
! Exploited
! Exploited
|-
|-
| Runtime Secure Boot
| Runtime Secure Boot
| Hardware based
| Hardware based
| Cell
| Cell
| Hardware Based
| Hardware Based
| no
| no
| no
| no
Line 60: Line 53:
|-
|-
| bootldr (Boot Loader)
| bootldr (Boot Loader)
| [[Flash|NAND (0x000000) / NOR (0xFC0000)]]
| NAND/NOR (0xFC0000)
| SPE(0)
| SPE(0)
| Per Console Encrypted at factory
| Per Console Encrypted at factory
| No <span style="color:red!important;">*</span>
| No <span style="color:red;">*</span>
| No
| Boot lv0
| No
| No
| Setup Primary Hardware + load lv0
| Yes
|-
|-
| lv0 (Level 0)
| lv0 (Level 0)
| [[Flash|NAND/NOR (COREOS)]]
| NAND/NOR (COREOS)
| PPU
| PPU
| Static&nbsp;Encryption / Signed
| Static Encryption / Signed
| Yes
| Yes
| No
| No
| Setup Hardware
| Setup Hardware
| Yes
| No
|-
|-
| metldr (asecure_loader)
| metldr (Meta Loader)
| [[Flash|NAND&nbsp;(0x0040810) / NOR&nbsp;(0x000810)]]
| NAND/NOR (asecure_loader)
| SPE(2)
| SPE(2)
| Per&nbsp;Console&nbsp;Encrypted at&nbsp;factory
| Per Console Encrypted at factory
| No <span style="color:red!important;">*</span>
| No <span style="color:red;">*</span>
| No
| No
| Load loaders (Meta Loader)
| Run loaders
| Yes
| Yes
|-
|-
| lv1ldr (Level 1 (Hypervisor) Loader)
| lv1ldr (Level 1 (Hypervisor) Loader)
| [[Flash|NAND/NOR (COREOS)]]
| NAND/NOR (COREOS)
| SPE(2)
| SPE(2)
| Static&nbsp;Encryption / Signed
| Static Encryption / Signed
| Yes
| Yes
| No
| No
| Decrypt lv1 (Hypervisor) + Initialize ATA/ENCDEC
| Decrypt lv1 (Hypervisor)
| Yes
| Yes
|-
|-
| lv2ldr (Level 2 (GameOS) Loader)
| lv2ldr (Level 2 (GameOS) Loader)
| [[Flash|NAND/NOR (COREOS)]]
| NAND/NOR (COREOS)
| SPE(2)
| SPE(2)
| Static&nbsp;Encryption / Signed
| Static Encryption / Signed
| Yes
| Yes
| No
| No
Line 105: Line 98:
|-
|-
| appldr (Application Loader)
| appldr (Application Loader)
| [[Flash|NAND/NOR (COREOS)]]
| NAND/NOR (COREOS)
| SPE(2)
| SPE(2)
| Static&nbsp;Encryption / Signed
| Static Encryption / Signed
| Yes
| Yes
| Yes
| Yes
Line 114: Line 107:
|-
|-
| isoldr (Isolation Loader)
| isoldr (Isolation Loader)
| [[Flash|NAND/NOR (COREOS)]]
| NAND/NOR (COREOS)
| SPE(2)
| SPE(2)
| Static&nbsp;Encryption / Signed
| Static Encryption / Signed
| Yes
| Yes
| No
| No
Line 123: Line 116:
|-
|-
| rvkldr (Revokation Loader) (Discarded after 0.8)
| rvkldr (Revokation Loader) (Discarded after 0.8)
| [[Flash|NAND/NOR (COREOS)]]
| NAND/NOR (COREOS)
| SPE(2)
| SPE(2)
| Static&nbsp;Encryption / Signed
| Static Encryption / Signed
| Yes
| Yes
| No
| No
| Decrypt revoke list
| decrypt revoke list
| Yes
| Yes
|}
|}
<span style="color:red!important;">*</span> : ofcourse with new hardware revisions, it is updated in factory. See [[Flash#new_metldr.2]]
<span style="color:red;">*</span> : ofcourse with new hardware revisions, it is updated in factory. See [[Flash#new_metldr.2]]


== Chain of trust Diagram ==
== Chain of trust Diagram ==
Line 140: Line 133:


* http://www.ibm.com/developerworks/power/library/pa-cellsecurity/
* http://www.ibm.com/developerworks/power/library/pa-cellsecurity/
== Changes in firmware 3.56 ==
[[spkg_hdr.tar]] and [[ps3swu2.self]] in [[Playstation Update Package (PUP)]] root added


== Changes in firmware 3.60 ==
== Changes in firmware 3.60 ==
Lv0 has now been changed, LV0 now appears to encapsulate all of the [[Loaders]] (appldr, isoldr, lv1ldr, lv2ldr). Now in order to break the chain of trust we need to be able to decrypt/exploit LV0 (or bootldr which loads LV0) and reverse the obfuscation in the loaders -> done! see http://www.psdevwiki.com/ps3/Keys#Key_Scrambling
Lv0 has now been changed, LV0 now appears to encapsulate all of the loaders (appldr, isoldr, lv1ldr, lv2ldr). Now in order to break the chain of trust we need to be able to decrypt/exploit LV0 (or bootldr which loads LV0) which at this time has not been done.


=== Chain of trust Diagram 3.60++ ===
=== Chain of trust Diagram 3.60++ ===
<table width="100%" align="left"><tr><td align="left">[[File:Ps3-cryptochain-360.png|800px|thumb|left|LV0 with encapsulated loaders (appldr, isoldr, lv1ldr, lv2ldr).)]]</tr></table>
<table width="100%" align="left"><tr><td align="left">[[File:Ps3-cryptochain-360.png|800px|thumb|left|LV0 with encapsulated loaders (appldr, isoldr, lv1ldr, lv2ldr).)]]</tr></tr></table><br />
not in this diagram: the added .2 metadata<br />


== PPU Boot Order ==
=== CoreOS PKG Filelisting ===
 
{| border="1" cellspacing="0" cellpadding="5" border="#999" class="wikitable" style="border:1px solid #999; border-collapse: collapse;"
lv0 -> lv1.self -> lv2_kernel.self -> sys_init_osd.self -> vsh.self
|- bgcolor="#cccccc"
 
! File !! &nbsp;1.00-1.94&nbsp; !! &nbsp;2.00-2.36&nbsp; !! &nbsp;2.40-3.01&nbsp; !! &nbsp;3.10-3.42&nbsp; !! &nbsp;3.50-3.55&nbsp; !! &nbsp;3.56&nbsp; !! &nbsp;3.60-3.74&nbsp; !! Loaded by<br />(upper chain of trust) !! Loads<br />(lower chain of trust) !! notes
{{Reverse engineering}}<noinclude>[[Category:Main]]</noinclude>
|-
| aim_spu_module.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || || ||
|-
| appldr || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || metldr/lv0 || vsh.self ||
|-
| creserved_0 || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || || || FF-filled file
|-
| default.spp || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || lv1.self ? || || profiles for LPARs
|-
| emer_init.self || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || lv2.self ? || || recovery menu
|-
| eurus_fw.bin || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || || ||
|-
| hdd_copy.self || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || || ||
|-
| isoldr || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || metldr/lv0 || manu_info_spu_module.self, mc_iso_spu_module.self, me_iso_for_ps2emu.self, me_iso_spu_module.self, sb_iso_spu_module.self, sc_iso.self, sv_iso_for_ps2emu.self. sv_iso_spu_module.self ||
|-
| lv0 || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || bootldr || {appldr, isoldr, lv1ldr, lv2ldr} (parsed through metldr?)||
|-
| lv0.2 || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || lv0 || ||
|-
| lv1.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || lv1ldr || ||
|-
| lv1ldr || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || metldr/lv0 || lv1.self ||
|-
| lv2_kernel.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || lv2ldr || ||
|-
| lv2ldr || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || metldr/lv0 || lv2_kernel.self ||
|-
| manu_info_spu_module.self || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || || ||
|-
| mc_iso_spu_module.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || isoldr || ||
|-
| me_iso_for_ps2emu.self || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || isoldr || ps2_emu.self, ps2_gxemu.self, ps2_softemu.self ||
|-
| me_iso_spu_module.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || isoldr || ||
|-
| pkg.srvk || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || spu_pkg_rvk_verifier.self ? || || signed revokelist
|-
| prog.srvk || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || spu_pkg_rvk_verifier.self ? || || signed revokelist
|-
| sb_iso_spu_module.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || isoldr || ||
|-
| sc_iso.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || isoldr ? || ||
|-
| sdk_version || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || - || - || textfile noting version
|-
| spp_verifier.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || || ||
|-
| spu_pkg_rvk_verifier.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || || ||
|-
| spu_token_processor.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || || ||
|-
| spu_utoken_processor.self || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || || ||
|-
| sv_iso_for_ps2emu.self || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || isoldr || ps2_emu.self, ps2_gxemu.self, ps2_softemu.self ||
|-
| sv_iso_spu_module.self || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || isoldr || ||
|-
|}
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)