<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.iquebrew.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hexkyz</id>
	<title>iQueBrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://www.iquebrew.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hexkyz"/>
	<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Special:Contributions/Hexkyz"/>
	<updated>2026-11-12T23:40:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IO&amp;diff=840</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=IO&amp;diff=840"/>
		<updated>2018-05-06T21:43:03Z</updated>

		<summary type="html">&lt;p&gt;Hexkyz: Add a bunch of stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Memory mapped registers available on the iQue Player.&lt;br /&gt;
&lt;br /&gt;
= MI =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300000 || 4 || MI_INIT_MODE_REG/MI_MODE_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300004 || 4 || MI_VERSION_REG/MI_NOOP_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300008 || 4 || MI_INTR_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA430000C || 4 || MI_INTR_MASK_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300010 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300014 || 4 || MI_SK_EXCEPTION_REG || Reading from this address within game code causes an exception; SK exception handler checks this address as well, and makes some decisions based on the value: bits 7-4 = ?, bit 3 = ?, bit 2 = SKC, the other bits seem unused. bit 9 = execute related? (isBb?), bit 8 = execute related?&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300028 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA430002C || 1 || MI_RANDOM_BIT || Hardware RNG? Seems to return 1 bit of randomness, SK function at &amp;lt;tt&amp;gt;0x9FC03410&amp;lt;/tt&amp;gt; gets lots of entropy from this then hashes it with SHA1 (several times?), this function is used to get randomness used when ECC signing, and when creating key material for recrypt.sys.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300030 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300038 || 4 || MI_HW_INTR_REG || Hardware interrupts (0x40 = NAND DMA, 0x80 = MD, 0x100 = RDB, 0x200 = AES, 0x400 = PI_ERR, 0x800 = USB0, 0x1000 = USB1, 0x2000 = NAND).&lt;br /&gt;
|-&lt;br /&gt;
| 0xA430003C || 4 || MI_HW_INTR_MASK_REG || Hardware interrupt mask.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VI =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400000 || 4 || VI_STATUS_REG/VI_CONTROL_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400004 || 4 || VI_ORIGIN_REG/VI_DRAM_ADDR_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400008 || 4 || VI_WIDTH_REG/VI_H_WIDTH_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA440000C || 4 || VI_INTR_REG/VI_V_INTR_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400010 || 4 || VI_CURRENT_REG/VI_V_CURRENT_LINE_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400014 || 4 || VI_BURST_REG/VI_TIMING_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400018 || 4 || VI_V_SYNC_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA440001C || 4 || VI_V_SYNC_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400020 || 4 || VI_LEAP_REG/VI_H_SYNC_LEAP_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400024 || 4 || VI_H_START_REG/VI_H_VIDEO_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400028 || 4 || VI_V_START_REG/VI_V_VIDEO_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA440002C || 4 || VI_V_BURST_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400030 || 4 || VI_X_SCALE_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400034 || 4 || VI_Y_SCALE_REG ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AI =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4500000 || 4 || AI_DRAM_ADDR_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4500004 || 4 || AI_LEN_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4500008 || 4 || AI_CONTROL_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA450000C || 4 || AI_STATUS_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4500010 || 4 || AI_DACRATE_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4500014 || 4 || AI_BITRATE_REG ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PI =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600000 || 4 || PI_DRAM_ADDR_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600004 || 4 || PI_CART_ADDR_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600008 || 4 || PI_RD_LEN_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA460000C || 4 || PI_WR_LEN_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600010 || 4 || PI_STATUS_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600014 || 4 || PI_BSD_DOM1_LAT_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600018 || 4 || PI_BSD_DOM1_PWD_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA460001C || 4 || PI_BSD_DOM1_PGS_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600020 || 4 || PI_BSD_DOM1_RLS_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600024 || 4 || PI_BSD_DOM2_LAT_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600028 || 4 || PI_BSD_DOM2_PWD_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA460002C || 4 || PI_BSD_DOM2_PGS_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600030 || 4 || PI_BSD_DOM2_RLS_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600038 || 4 || PI_CARD_STATUS_REG || Tells if the NAND card is present or not&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600040 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600044 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600048 || 4 || PI_CARD_ADDR_REG || Takes the device buffer address for RAM&amp;lt;-&amp;gt;NAND DMA&lt;br /&gt;
|-&lt;br /&gt;
| 0xA460004C || 4 || PI_CARD_CONFIG_REG || Takes configuration parameters for the NAND card&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600050 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600054 || 4 || ||  &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600058 || 4 || PI_EX_RD_LEN_REG || Enhanced PI read length register&lt;br /&gt;
|-&lt;br /&gt;
| 0xA460005C || 4 || PI_EX_WR_LEN_REG || Enhanced PI write length register&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600060 || 4 || [[#PI_MISC_REG|PI_MISC_REG]] || This register is used for RTC, error led, power and more&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600070 || 4 || PI_CARD_BLK_OFFSET_REG || Takes the NAND card block offset for reading/writing&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610000 || 4 || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610200 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610420 || 176 || PI_AES_EXPANDED_KEY || AES-128 expanded key for hardware AES engine&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46104D0 || 16 || PI_AES_IV || AES-128-CBC initialisation vector for hardware AES engine&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610500 || 4 || || ATB?&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610504 || 4 || || ATB?&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4620000 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46E0000 || 2 || PI_RDB_REQ_HI_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46E0002 || 2 || PI_RDB_REQ_LO_REG ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46E0004 || 2 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46E0400 || 2 || || RDB related&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46E0402 || 2 || || RDB related&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46E8000 || 2 || PI_RDB_STATUS_REG ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PI_MISC_REG ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit(s)&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 31-15 || Box Id&lt;br /&gt;
|-&lt;br /&gt;
| 6-7 || RTC mask&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Error led mask (always 0x01)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Power mask (always 0x01)&lt;br /&gt;
|-&lt;br /&gt;
| 2-3 || RTC status&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Error led&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Power status (on or off)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= USB =&lt;br /&gt;
The iQue Player has support for two USB controllers, one mapped at 0xA4900000 and another at 0xA4A00000.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4900000 || 4 || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4940010 || 4 || USB0_STATUS_REG || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4A00000 || 4 || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4A40010 || 4 || USB1_STATUS_REG || &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hexkyz</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=Virage2&amp;diff=837</id>
		<title>Virage2</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Virage2&amp;diff=837"/>
		<updated>2018-05-06T16:48:13Z</updated>

		<summary type="html">&lt;p&gt;Hexkyz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virage2 is a 16K EEPROM bank located inside the SoC that can only be read in secure mode (mapped at &amp;lt;tt&amp;gt;0xBFCA0000&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x14 || skHash || Secure Kernel hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x40 || romPatch || ROM patch bitmap (4 x 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x20 || publicKey || Per-console ECC public key&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || 0x04 || bbId || Per-console ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || 0x40 || privateKey || Per-console ECC private key&lt;br /&gt;
|-&lt;br /&gt;
| 0xB8 || 0x10 || bootAppKey || Common key&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 || 0x10 || recryptListKey || Per-console key&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || 0x10 || appStateKey || Per-console key&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x10 || selfMsgKey || Per-console key&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || 0x04 || csumAdjust || Per-console checksum adjustment&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC || 0x04 || jtagEnable || JTAG status field&lt;/div&gt;</summary>
		<author><name>Hexkyz</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=Virage0-1&amp;diff=836</id>
		<title>Virage0-1</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Virage0-1&amp;diff=836"/>
		<updated>2018-05-06T16:41:45Z</updated>

		<summary type="html">&lt;p&gt;Hexkyz: Fix mistakes and update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virage0 and Virage1 are two 4K EEPROM banks located inside the SoC that can only be read in secure mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x01 || tsCrlVersion || Seems to be always 0x00&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0x01 || caCrlVersion || Seems to be always 0x00&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x01 || cpCrlVersion || Seems to be always 0x01&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x01 || contentRlVersion || Seems to be always 0x00&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x02 || ticketRlVersion || Seems to be always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x02 || tidWindow || Seems to be always 0x001A&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x34 || cc || Play-time (600 minutes = 0x0258)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x02 || seq || CRC&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x02 || sum || CRC&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hexkyz</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=699</id>
		<title>IQue Player System Flaws</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=699"/>
		<updated>2018-04-29T20:10:56Z</updated>

		<summary type="html">&lt;p&gt;Hexkyz: Consistency&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:iQue Player System Flaws}}&lt;br /&gt;
==Hardware==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| No known hardware exploits &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Secure Kernel==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| psychic paper: Secure Kernel could incorrectly consider a self-signed certificate chain as valid&lt;br /&gt;
| The function for verifying certificate chains at &amp;lt;tt&amp;gt;0x9FC028BC&amp;lt;/tt&amp;gt; is passed an array of pointers to certificates.&lt;br /&gt;
For the first 5 elements, it checks to see if the certificate was issued by &amp;lt;tt&amp;gt;Root&amp;lt;/tt&amp;gt;, if so it checks if the certificate was signed by the hardcoded &amp;lt;tt&amp;gt;Root&amp;lt;/tt&amp;gt; public key (and returns immediately with the result).&lt;br /&gt;
&lt;br /&gt;
If the certificate wasn&amp;#039;t signed by &amp;lt;tt&amp;gt;Root&amp;lt;/tt&amp;gt;, it checks if the certificate was signed by the public key of the next certificate in the array.&lt;br /&gt;
&lt;br /&gt;
If all 5 certificates verified correctly, the function will return success.&lt;br /&gt;
| Assuming this function can be called with an attacker-controlled array of certificates, self-signing of certificates (and thus, arbitrary code execution, with full non-Secure Mode privileges)&lt;br /&gt;
(This is not the case for Secure Applications, the code in SK for verifying those sets up a hardcoded array on the stack for the certificate verification function)&lt;br /&gt;
| April 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| skLaunchSetup and skRecryptBegin leave CMD in memory if its signature does not verify&lt;br /&gt;
| The function called by skLaunchSetup (and skRecryptBegin) at &amp;lt;tt&amp;gt;0x9FC00BAC&amp;lt;/tt&amp;gt; verifies ticket and CMD, and decrypts the titlekey.&lt;br /&gt;
After verifying the ticket signature, it copies the CMD to another place in memory, derives the titlekey encryption key, decrypts the titlekey with the titlekek, then verifies the CMD signature.&lt;br /&gt;
&lt;br /&gt;
If the CMD signature does not verify successfully, the function just returns an error, leaving the unsigned CMD in place.&lt;br /&gt;
&lt;br /&gt;
Most of the code that uses a CMD in SK uses the CMD in that place in memory that this function copies the CMD to, and trusts that whatever data is there has been verified already.&lt;br /&gt;
&lt;br /&gt;
The entire CMD is covered by the ticket signature anyway, so this isn&amp;#039;t that useful really, besides potentially making psychic paper easier to exploit.&lt;br /&gt;
| With existing code execution with access to skLaunchSetup or skRecryptBegin and some other SKC that uses SK&amp;#039;s internal CMD copy (only non-test SAs have this level of access), and the ability to sign a ticket but not a CMD:&lt;br /&gt;
Allowing the use of an unsigned CMD by SK, potentially leading to privilege escalation (by specifying arbitrary allowed hardware access/allowed SKCs).&lt;br /&gt;
| April 26, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| skLaunch does not check content hash if recrypt flag is set in CMD&lt;br /&gt;
| skLaunch calculates the SHA1 hash of the content and compares it to the value in the CMD, returning an error if the hash doesn&amp;#039;t match. This entire block of code is jumped over if the recrypt flag is set in the CMD.&lt;br /&gt;
| With plaintext of an application with the recrypt flag set in its CMD, arbitrary code execution (via, for example, implementation of the attack described in pocorgtfo17)&lt;br /&gt;
| Early 2018?&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| skVerifyHash signature pointer not validated&lt;br /&gt;
| skVerifyHash takes in a u8 pointer to a signature to verify, but does not actually validate this pointer is valid before treating the memory it points to as an RSA/ECC signature.&lt;br /&gt;
| Causing the Secure Kernel to data abort -- possibly usable as an infoleak, depending on the provided cert chain&lt;br /&gt;
| April 29, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]]&lt;br /&gt;
|-&lt;br /&gt;
| SK&amp;#039;s ECDH implementation does no validation of the other party&amp;#039;s public key&lt;br /&gt;
| When deriving the titlekek using ECDH, SK does no validation whatsoever of the public key, which comes from the ticket. Because ECDH is just multiplication, passing in an all-zero public key would lead to an all-zero titlekek being used.&lt;br /&gt;
| With the ability to sign a ticket (for example, psychic paper): causing SK to use a constant titlekek; no need to know a console&amp;#039;s ECC keypair.&lt;br /&gt;
| April 29, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==System Applications==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Exploitable System Applications&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  No known System Application exploits&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hexkyz</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=698</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=698"/>
		<updated>2018-04-29T20:10:31Z</updated>

		<summary type="html">&lt;p&gt;Hexkyz: Normalize SKC names and document args&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Kernel calls =&lt;br /&gt;
All secure kernel calls return a s32 error code in $v0. 0 means success, below zero means error.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || skGetId || $a0=u32* out_bbid&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || skLaunchSetup || $a0=???, $a1=???, $a2=???&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || skLaunch || $a0=u8* decrypted_content&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || skRecryptListValid || $a0=u8* recrypt_list&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || skRecryptBegin || $a0=???, $a1=???, $a2=???&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || skRecryptData || $a0=???, $a1=???&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || skRecryptComputeState || $a0=u8* buf, $a1=u32 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || skRecryptEnd || $a0=u8* buf&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || skSignHash || $a0=u8* sha1hash, $a1=u8* out_signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || skVerifyHash || $a0=u8* sha1hash, $a1=u8* signature, $a2=certificate** certificate_chain, $a3=crl** crls?&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || skGetConsumption || $a0=u8* out_size_buf, $a1=u8* out_buf&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || skAdvanceTicketWindow || void&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || skSetLimit || $a0=u16 limit_low?, $a1=u16 limit_high?&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || skExit || void&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || skKeepAlive || void&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hexkyz</name></author>
	</entry>
</feed>