···1212As of 2024, every console manufactured before 2011 is subject to trivial
1313piracy, and cheating online in many games is possible with savegame exploits,
1414patched game files on burned DVDs, or network exploits.
1515-The last method to run homebrew without soldering was patched in 2007.
1515+The last method to run homebrew without soldering a modchip was patched in 2007.
16161717## Security Features
1818···3232 the hypervisor never allocates executable virtual memory to the kernel
3333 that has the execute permission *and* write permission.
3434 * New memory when loading new executables can't be marked as executable
3535- unless all signature checks have been passed.
3535+ unless all signature checks have been passed by both the kernel and
3636+ hypervisor.
3637 * Games for the most part run in the same privilege ring as kernel, for
3738 performance. Certain software uses a "user-mode" but that doesn't act
3839 as much of a security barrier, rather a memory management mode.
···4344 preventing hardware DMA attacks or kernel-land software exploits from
4445 tampering with it or its state, even in uncontrollable ways.
4546 * The encryption is AES-128 with a slightly customised algorithm. Encryption
4646- is done per cache line.
4747- * The encryption and hashing is done transparently to the kernel by the L2
4848- cache.
4949- * Random AES key chosen at startup by 2BL, with help from hardware RNG. The
5050- 2BL also checks to make sure there's sufficient randomness so the RNG
5151- can't be rigged or disabled.
4747+ is done per every 0x10 bytes (AES block size) with a random key.
4848+ * The hashing is a custom variation of CRC16 by IBM. Hashing is done per
4949+ every 0x80 bytes (cache line size) and is done using a random key generated
5050+ at startup.
5151+ * The encryption and hashing is done transparently to the kernel by the MMU
5252+ and L2 cache.
5353+ * Random AES keys are chosen at startup by 2BL, with help from hardware RNG.
5454+ The 2BL also checks to make sure there's sufficient randomness so the RNG
5555+ can't be rigged or disabled in hardware.
52565357## Security Pitfalls
5458···6670 * XGD3 seemed to have partially fixed this problem.
6771* While various system applications are compiled with stack canaries enabled,
6872 plenty of games are not, as was standard for the time for performance reasons.
7373+ * Games can be patched when the system is connected to Live, but being
7474+ offline and clearing cache makes the system vulnerable again.
6975* Due the kernel running under a 32-bit address space, despite being a 64-bit
7076 platform, none of the more advanced security features such as ASLR and PAC
7177 could be used effectively, and in fact weren't used at all. This, combined
7278 with the lack of stack canaries, makes exploiting userland trivial.
7979+* System management controller / SMC / Southbridge firmware is not signed,
8080+ meaning it can be replaced to modify the behaviour or be used to attack the
8181+ CPU (see: SMC Hack, RGH3 - as well as all other RGH variants rebooting rather
8282+ than RRoD on failed boots)
8383+8484+## References
8585+8686+* Memory encryption/hashing:
8787+ https://github.com/GoobyCorp/Xbox-360-Crypto/blob/master/MemCrypto.py
8888+8989+I must've got some more of this info from other places, but I can't remember.