<?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=Riley</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=Riley"/>
	<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Special:Contributions/Riley"/>
	<updated>2026-11-12T05:45:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=903</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=903"/>
		<updated>2018-08-08T11:58:08Z</updated>

		<summary type="html">&lt;p&gt;Riley: &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;
| Virage2 is writable&lt;br /&gt;
| SK has code to write to Virage2; this actually works and writes there.&lt;br /&gt;
Virage2 was assumed &amp;quot;OTP&amp;quot; before, it contains SK hash, bootrom patches, BBID and key material.&lt;br /&gt;
&lt;br /&gt;
Successfully overwriting the correct virage2 areas allows for persistent boot-time secure mode code execution.&lt;br /&gt;
&lt;br /&gt;
WARNING: overwriting SK hash with garbage, not fixing checksum, etc, WILL hard brick your console!&lt;br /&gt;
| May 4, 2018&lt;br /&gt;
| [[User:Normmatt|Normmatt]]&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 (this is possible, thanks to other (below) issues), 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;
Also: Injection of games; see [[iQueRECTool]].&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 and CMD (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;
| skRecryptData insufficient checks&lt;br /&gt;
| skRecryptData allows for NULL to be passed in as a pointer, for supporting some alternate mode controlled by a u32 in SK .data.&lt;br /&gt;
However, if this u32 is 0 (which is the default), no further checks are done and recrypt operations are done starting from NULL with provided length (in 0x400 chunks).&lt;br /&gt;
&lt;br /&gt;
Also, if skRecryptBegin wasn&amp;#039;t called, the recrypt operation is done by decrypting using the current hardware AES engine state, then re-encrypting with a completely zero internal state (which is invalid, so nothing will be done).&lt;br /&gt;
&lt;br /&gt;
If skRecryptBegin was called, the re-encryption will succeed as the internal state would have been set, and re-encrypted data would be written to the same area that the original data was read from. (To get to the SK code area with this, though, requires overwriting all of DRAM)&lt;br /&gt;
| Possible infoleak into the PI buffer. (without recrypt state set)&lt;br /&gt;
Possible secure mode code execution. (with recrypt state set)&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| SK&amp;#039;s CRL checking function will not check a ticket CRL at all if the ticket CRL version in the ticket (as s32) is &amp;lt; 0&lt;br /&gt;
| The function in SK that checks provided CRLs at &amp;lt;tt&amp;gt;0x9FC02CB4&amp;lt;/tt&amp;gt; checks the provided ticket CRL version first (which comes from the ticket.) If it&amp;#039;s less than 0 as s32, it will not be checked at all, that call will be jumped over.&lt;br /&gt;
&lt;br /&gt;
The first CRL in the list is the ticket CRL; thus this could provide a favourable situation for exploiting psychic paper.&lt;br /&gt;
&lt;br /&gt;
Additionally, the required elements to craft a CRL such that SA believes it to be valid with the public key in the correct place for psychic paper do not overlap.&lt;br /&gt;
&lt;br /&gt;
Furthermore, libultra function osBbSaGamePrelaunch (which calls skLaunchSetup/skRecryptBegin/etc), which is called by SA when launching a game, stores the CRL structure for those two SKCs directly after the ticket bundle structure in .data. This, plus other flaws (below) lead directly to the successful exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| eSKape: bad SKC table bounds check&lt;br /&gt;
| SK&amp;#039;s Secure Kernel Call handler bounds check uses a signed comparison when checking the SKC number that&amp;#039;s being called to make sure it is within the bounds of the table, leading to the ability to have SK take the SKC function pointer from non-secure RAM, and thus, arbitrary code execution in secure mode.&lt;br /&gt;
| Secure mode code execution.&lt;br /&gt;
| May 1, 2018&lt;br /&gt;
| [[User:Stuckpixel|Stuckpixel]] and [[User:Riley|Riley]] (complementary)&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;
| libultra _osBbSaVerifyTickets gets an entire ticket bundle then just uses skVerifyHash with the ticket cert-chain ptr&lt;br /&gt;
| _osBbVerifyTickets is called by osBbSaMetaGetTickets if argument 2 is not 0. (osBbSaMetaGetTickets, in turn, is called by a function in SA that appears to get the data for the game menu?)&lt;br /&gt;
This function calls osBbSaBundleTicket, which gets a &amp;quot;ticket bundle&amp;quot; (struct containing ticket + ticket+CMD cert chain + CRL pointers, pointer to which is used as an argument for skLaunchSetup and skRecryptBegin), then proceeds to call skVerifyHash passing a pointer to the ticket cert-chain pointer array from that structure.&lt;br /&gt;
&lt;br /&gt;
Given that the CMD cert chain pointer array is directly after the ticket cert-chain pointer array in that structure, this gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper and self-signing tickets such that non-test SAs believe them to be valid.&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| libultra osBbSaCertCreateChain only uses the endmost certificate&amp;#039;s issuer&lt;br /&gt;
| osBbSaCertCreateChain parses cert.sys to create a cert chain array for SK (first element points to the object&amp;#039;s signer, second element points to its signer, etc.).&lt;br /&gt;
This function only uses the issuer of the endmost certificate (object&amp;#039;s signer), to get a list of certificate names to obtain.&lt;br /&gt;
&lt;br /&gt;
The rest of the certificates only have their name compared against the one currently being searched for. There are no checks that the chain being created ends in Root. This gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| EMS monitor SA&amp;#039;s signature verification code is flawed&lt;br /&gt;
| The EMS monitor SA, when loading its payload from NAND, verifies its CMD signature using similar code to what SK does.&lt;br /&gt;
However, SK&amp;#039;s code, being in SK, calls SK-internal functions for the verification, whereas the SA has to use skVerifyHash.&lt;br /&gt;
&lt;br /&gt;
skVerifyHash imposes less constraints on verification due to it having to support everything; most notably, no checks are done as to what type of certificate was used for signing, and ECC signatures (at the end of a cert chain) are allowed.&lt;br /&gt;
&lt;br /&gt;
Additionally, usage of skVerifyHash requires that a list of CRL pointers is passed to it; these pointers are placed directly after the certificate chain pointers in memory, which potentially gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| More signers/signatures are allowed that perhaps would have been intended; possibly, exploitation of psychic paper.&lt;br /&gt;
| All EMS monitor SAs?&lt;br /&gt;
| August 8, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=902</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=902"/>
		<updated>2018-08-08T11:57:58Z</updated>

		<summary type="html">&lt;p&gt;Riley: &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;
| Virage2 is writable&lt;br /&gt;
| SK has code to write to Virage2; this actually works and writes there.&lt;br /&gt;
Virage2 was assumed &amp;quot;OTP&amp;quot; before, it contains SK hash, bootrom patches, BBID and key material.&lt;br /&gt;
&lt;br /&gt;
Successfully overwriting the correct virage2 areas allows for persistent boot-time secure mode code execution.&lt;br /&gt;
&lt;br /&gt;
WARNING: overwriting SK hash with garbage, not fixing checksum, etc, WILL hard brick your console!&lt;br /&gt;
| May 4, 2018&lt;br /&gt;
| [[User:Normmatt|Normmatt]]&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 (this is possible, thanks to other (below) issues), 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;
Also: Injection of games; see [[iQueRECTool]].&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 and CMD (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;
| skRecryptData insufficient checks&lt;br /&gt;
| skRecryptData allows for NULL to be passed in as a pointer, for supporting some alternate mode controlled by a u32 in SK .data.&lt;br /&gt;
However, if this u32 is 0 (which is the default), no further checks are done and recrypt operations are done starting from NULL with provided length (in 0x400 chunks).&lt;br /&gt;
&lt;br /&gt;
Also, if skRecryptBegin wasn&amp;#039;t called, the recrypt operation is done by decrypting using the current hardware AES engine state, then re-encrypting with a completely zero internal state (which is invalid, so nothing will be done).&lt;br /&gt;
&lt;br /&gt;
If skRecryptBegin was called, the re-encryption will succeed as the internal state would have been set, and re-encrypted data would be written to the same area that the original data was read from. (To get to the SK code area with this, though, requires overwriting all of DRAM)&lt;br /&gt;
| Possible infoleak into the PI buffer. (without recrypt state set)&lt;br /&gt;
Possible secure mode code execution. (with recrypt state set)&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| SK&amp;#039;s CRL checking function will not check a ticket CRL at all if the ticket CRL version in the ticket (as s32) is &amp;lt; 0&lt;br /&gt;
| The function in SK that checks provided CRLs at &amp;lt;tt&amp;gt;0x9FC02CB4&amp;lt;/tt&amp;gt; checks the provided ticket CRL version first (which comes from the ticket.) If it&amp;#039;s less than 0 as s32, it will not be checked at all, that call will be jumped over.&lt;br /&gt;
&lt;br /&gt;
The first CRL in the list is the ticket CRL; thus this could provide a favourable situation for exploiting psychic paper.&lt;br /&gt;
&lt;br /&gt;
Additionally, the required elements to craft a CRL such that SA believes it to be valid with the public key in the correct place for psychic paper do not overlap.&lt;br /&gt;
&lt;br /&gt;
Furthermore, libultra function osBbSaGamePrelaunch (which calls skLaunchSetup/skRecryptBegin/etc), which is called by SA when launching a game, stores the CRL structure for those two SKCs directly after the ticket bundle structure in .data. This, plus other flaws (below) lead directly to the successful exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| eSKape: bad SKC table bounds check&lt;br /&gt;
| SK&amp;#039;s Secure Kernel Call handler bounds check uses a signed comparison when checking the SKC number that&amp;#039;s being called to make sure it is within the bounds of the table, leading to the ability to have SK take the SKC function pointer from non-secure RAM, and thus, arbitrary code execution in secure mode.&lt;br /&gt;
| Secure mode code execution.&lt;br /&gt;
| May 1, 2018&lt;br /&gt;
| [[User:Stuckpixel|Stuckpixel]] and [[User:Riley|Riley]] (complementary)&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;
| libultra _osBbSaVerifyTickets gets an entire ticket bundle then just uses skVerifyHash with the ticket cert-chain ptr&lt;br /&gt;
| _osBbVerifyTickets is called by osBbSaMetaGetTickets if argument 2 is not 0. (osBbSaMetaGetTickets, in turn, is called by a function in SA that appears to get the data for the game menu?)&lt;br /&gt;
This function calls osBbSaBundleTicket, which gets a &amp;quot;ticket bundle&amp;quot; (struct containing ticket + ticket+CMD cert chain + CRL pointers, pointer to which is used as an argument for skLaunchSetup and skRecryptBegin), then proceeds to call skVerifyHash passing a pointer to the ticket cert-chain pointer array from that structure.&lt;br /&gt;
&lt;br /&gt;
Given that the CMD cert chain pointer array is directly after the ticket cert-chain pointer array in that structure, this gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper and self-signing tickets such that non-test SAs believe them to be valid.&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| libultra osBbSaCertCreateChain only uses the endmost certificate&amp;#039;s issuer&lt;br /&gt;
| osBbSaCertCreateChain parses cert.sys to create a cert chain array for SK (first element points to the object&amp;#039;s signer, second element points to its signer, etc.).&lt;br /&gt;
This function only uses the issuer of the endmost certificate (object&amp;#039;s signer), to get a list of certificate names to obtain.&lt;br /&gt;
&lt;br /&gt;
The rest of the certificates only have their name compared against the one currently being searched for. There are no checks that the chain being created ends in Root. This gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| EMS monitor SA&amp;#039;s signature verification code is flawed&lt;br /&gt;
| The EMS monitor SA, when loading its payload from NAND, verifies its CMD signature using similar code to what SK does.&lt;br /&gt;
However, SK&amp;#039;s code, being in SK, calls SK-internal functions for the verification, whereas the SA has to use skVerifyHash.&lt;br /&gt;
&lt;br /&gt;
skVerifyHash imposes less constraints on verification due to it having to support everything; most notably, no checks are done as to what type of certificate was used for signing, and ECC signatures (at the end of a cert chain) are allowed.&lt;br /&gt;
&lt;br /&gt;
Additionally, usage of skVerifyHash requires that a list of CRL pointers is passed to it; these pointers are placed directly after the certificate chain in memory, which potentially gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| More signers/signatures are allowed that perhaps would have been intended; possibly, exploitation of psychic paper.&lt;br /&gt;
| All EMS monitor SAs?&lt;br /&gt;
| August 8, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=901</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=901"/>
		<updated>2018-08-08T11:52:20Z</updated>

		<summary type="html">&lt;p&gt;Riley: /* System Applications */&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;
| Virage2 is writable&lt;br /&gt;
| SK has code to write to Virage2; this actually works and writes there.&lt;br /&gt;
Virage2 was assumed &amp;quot;OTP&amp;quot; before, it contains SK hash, bootrom patches, BBID and key material.&lt;br /&gt;
&lt;br /&gt;
Successfully overwriting the correct virage2 areas allows for persistent boot-time secure mode code execution.&lt;br /&gt;
&lt;br /&gt;
WARNING: overwriting SK hash with garbage, not fixing checksum, etc, WILL hard brick your console!&lt;br /&gt;
| May 4, 2018&lt;br /&gt;
| [[User:Normmatt|Normmatt]]&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 (this is possible, thanks to other (below) issues), 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;
Also: Injection of games; see [[iQueRECTool]].&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 and CMD (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;
| skRecryptData insufficient checks&lt;br /&gt;
| skRecryptData allows for NULL to be passed in as a pointer, for supporting some alternate mode controlled by a u32 in SK .data.&lt;br /&gt;
However, if this u32 is 0 (which is the default), no further checks are done and recrypt operations are done starting from NULL with provided length (in 0x400 chunks).&lt;br /&gt;
&lt;br /&gt;
Also, if skRecryptBegin wasn&amp;#039;t called, the recrypt operation is done by decrypting using the current hardware AES engine state, then re-encrypting with a completely zero internal state (which is invalid, so nothing will be done).&lt;br /&gt;
&lt;br /&gt;
If skRecryptBegin was called, the re-encryption will succeed as the internal state would have been set, and re-encrypted data would be written to the same area that the original data was read from. (To get to the SK code area with this, though, requires overwriting all of DRAM)&lt;br /&gt;
| Possible infoleak into the PI buffer. (without recrypt state set)&lt;br /&gt;
Possible secure mode code execution. (with recrypt state set)&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| SK&amp;#039;s CRL checking function will not check a ticket CRL at all if the ticket CRL version in the ticket (as s32) is &amp;lt; 0&lt;br /&gt;
| The function in SK that checks provided CRLs at &amp;lt;tt&amp;gt;0x9FC02CB4&amp;lt;/tt&amp;gt; checks the provided ticket CRL version first (which comes from the ticket.) If it&amp;#039;s less than 0 as s32, it will not be checked at all, that call will be jumped over.&lt;br /&gt;
&lt;br /&gt;
The first CRL in the list is the ticket CRL; thus this could provide a favourable situation for exploiting psychic paper.&lt;br /&gt;
&lt;br /&gt;
Additionally, the required elements to craft a CRL such that SA believes it to be valid with the public key in the correct place for psychic paper do not overlap.&lt;br /&gt;
&lt;br /&gt;
Furthermore, libultra function osBbSaGamePrelaunch (which calls skLaunchSetup/skRecryptBegin/etc), which is called by SA when launching a game, stores the CRL structure for those two SKCs directly after the ticket bundle structure in .data. This, plus other flaws (below) lead directly to the successful exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| eSKape: bad SKC table bounds check&lt;br /&gt;
| SK&amp;#039;s Secure Kernel Call handler bounds check uses a signed comparison when checking the SKC number that&amp;#039;s being called to make sure it is within the bounds of the table, leading to the ability to have SK take the SKC function pointer from non-secure RAM, and thus, arbitrary code execution in secure mode.&lt;br /&gt;
| Secure mode code execution.&lt;br /&gt;
| May 1, 2018&lt;br /&gt;
| [[User:Stuckpixel|Stuckpixel]] and [[User:Riley|Riley]] (complementary)&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;
| libultra _osBbSaVerifyTickets gets an entire ticket bundle then just uses skVerifyHash with the ticket cert-chain ptr&lt;br /&gt;
| _osBbVerifyTickets is called by osBbSaMetaGetTickets if argument 2 is not 0. (osBbSaMetaGetTickets, in turn, is called by a function in SA that appears to get the data for the game menu?)&lt;br /&gt;
This function calls osBbSaBundleTicket, which gets a &amp;quot;ticket bundle&amp;quot; (struct containing ticket + ticket+CMD cert chain + CRL pointers, pointer to which is used as an argument for skLaunchSetup and skRecryptBegin), then proceeds to call skVerifyHash passing a pointer to the ticket cert-chain pointer array from that structure.&lt;br /&gt;
&lt;br /&gt;
Given that the CMD cert chain pointer array is directly after the ticket cert-chain pointer array in that structure, this gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper and self-signing tickets such that non-test SAs believe them to be valid.&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| libultra osBbSaCertCreateChain only uses the endmost certificate&amp;#039;s issuer&lt;br /&gt;
| osBbSaCertCreateChain parses cert.sys to create a cert chain array for SK (first element points to the object&amp;#039;s signer, second element points to its signer, etc.).&lt;br /&gt;
This function only uses the issuer of the endmost certificate (object&amp;#039;s signer), to get a list of certificate names to obtain.&lt;br /&gt;
&lt;br /&gt;
The rest of the certificates only have their name compared against the one currently being searched for. There are no checks that the chain being created ends in Root. This gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| EMS monitor SA&amp;#039;s signature verification code is flawed&lt;br /&gt;
| The EMS monitor SA, when loading its payload from NAND, verifies its CMD signature using similar code to what SK does.&lt;br /&gt;
However, SK&amp;#039;s code, being in SK, calls SK-internal functions for the verification, whereas the SA has to use skVerifyHash.&lt;br /&gt;
&lt;br /&gt;
skVerifyHash imposes less constraints on verification due to it having to support everything; most notably, no checks are done as to what type of certificate was used for signing, and ECC signatures (at the end of a cert chain) are allowed.&lt;br /&gt;
&lt;br /&gt;
On its own, this turns out not to be that useful in practise.&lt;br /&gt;
| Nothing really, just more signers/signatures are allowed that perhaps would have been intended.&lt;br /&gt;
| All EMS monitor SAs?&lt;br /&gt;
| August 8, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=CMD&amp;diff=839</id>
		<title>CMD</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=CMD&amp;diff=839"/>
		<updated>2018-05-06T19:21:43Z</updated>

		<summary type="html">&lt;p&gt;Riley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An iQue &amp;#039;&amp;#039;&amp;#039;Content MetaData (CMD)&amp;#039;&amp;#039;&amp;#039; is used to store data about a piece of content, such as the size, hash and ID. It&amp;#039;s used as part of the [[SKSA]] (for info about the SA1/SA2) and also used as part of the [[Title Data]] structure (for info about the game title). &lt;br /&gt;
&lt;br /&gt;
Each ticket is signed via RSA-2048 using a CP (content protection?) certificate.&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
The CMD format is similar to a [http://wiibrew.org/wiki/Ticket Wii ticket], though it seems the structure was reworked sometime between the iQue and Wii.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Length&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Information&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| bytes&lt;br /&gt;
| ca_crl_version&lt;br /&gt;
| Unknown (always 0?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| cmd_crl_version&lt;br /&gt;
| Unknown (always 1?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| uint32&lt;br /&gt;
| content_size&lt;br /&gt;
| Content Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| unused_flags&lt;br /&gt;
| bit 0 on if SA; nothing checks it though&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x10&lt;br /&gt;
| bytes&lt;br /&gt;
| titlekey_iv&lt;br /&gt;
| IV used to encrypt titlekey (with common key)                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x14&lt;br /&gt;
| bytes&lt;br /&gt;
| content_hash&lt;br /&gt;
| sha1 hash of plaintext content&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x10&lt;br /&gt;
| bytes&lt;br /&gt;
| content_iv&lt;br /&gt;
| IV used to encrypt content&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| recrypt_flag&lt;br /&gt;
| if bit 1 on, content will be re-encrypted on first launch, using console-unique key stored in Virage2 in the SoC    &lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| allowed_hardware&lt;br /&gt;
| bitfield, each bit enables access to some MMIO regs new to iQue Player:&lt;br /&gt;
* bits 0-7: new PI stuff              &lt;br /&gt;
* bit 0: PI buffer used for aes/NAND read output and PI DMA (1KB at PI_BASE+0x10000)    &lt;br /&gt;
* bit 1: NAND flash regs in PI        &lt;br /&gt;
* bit 2: memory mapper for old PI dma &lt;br /&gt;
* bit 3: hardware AES-engine in PI&lt;br /&gt;
* bit 4: new PI dma engine, DMAs  from/to PI buffer&lt;br /&gt;
* bit 5: new GPIO; power + LED&lt;br /&gt;
* bit 6: external IO bus stuff (debug?)&lt;br /&gt;
* bit 7: new PI error stuff&lt;br /&gt;
* bit 8: enables access to USB regs&lt;br /&gt;
* bit 9: enables access to internal ram used for SK stack  &lt;br /&gt;
(0 for games, 0x13 for iQue Club, 0x1F7/0x1B3 for SA)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| allowed_secure_kernel_calls&lt;br /&gt;
| one bit per syscall bit 0 allows skc 0, etc.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| console_id&lt;br /&gt;
| can be zero; if not can only run on certain (used for SAs, not games) &lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x40&lt;br /&gt;
| chars&lt;br /&gt;
| signer&lt;br /&gt;
| Authority (cert used to sign ticket)&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| uint32&lt;br /&gt;
| content_id&lt;br /&gt;
| Content ID (can&amp;#039;t be higher than 99999999, if (cid / 100) % 10 == 9, this is a game manual)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x10&lt;br /&gt;
| bytes&lt;br /&gt;
| titlekey&lt;br /&gt;
| crypted with common key, and if this is not an SA, then crypted again with key derived using ECDH of console&amp;#039;s privkey and pubkey in ticket   &lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x100&lt;br /&gt;
| bytes&lt;br /&gt;
| signature&lt;br /&gt;
| RSA-2048 signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Signature ==&lt;br /&gt;
The signature is made from a SHA1 hash of 0x0 - 0xAC, prior to the titlekey being encrypted with the ECDH-derived titlekek.&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=CMD&amp;diff=838</id>
		<title>CMD</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=CMD&amp;diff=838"/>
		<updated>2018-05-06T19:21:00Z</updated>

		<summary type="html">&lt;p&gt;Riley: remove speculation that turned out to be incorrect.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An iQue &amp;#039;&amp;#039;&amp;#039;Content MetaData (CMD)&amp;#039;&amp;#039;&amp;#039; is used to store data about a piece of content, such as the size, hash and ID. It&amp;#039;s used as part of the [[SKSA]] (for info about the SA1/SA2) and also used as part of the [[Title Data]] structure (for info about the game title). &lt;br /&gt;
&lt;br /&gt;
Each ticket is signed via RSA-2048 using a CP (content protection?) certificate, the method for signing/verifying has been found for SA1/SA2, but game tickets don&amp;#039;t seem to work. It&amp;#039;s likely that some part of the structure is changed in memory just before the iQue validates it.&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
The CMD format is similar to a [http://wiibrew.org/wiki/Ticket Wii ticket], though it seems the structure was reworked sometime between the iQue and Wii.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Length&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Information&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| bytes&lt;br /&gt;
| ca_crl_version&lt;br /&gt;
| Unknown (always 0?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| cmd_crl_version&lt;br /&gt;
| Unknown (always 1?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| uint32&lt;br /&gt;
| content_size&lt;br /&gt;
| Content Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| unused_flags&lt;br /&gt;
| bit 0 on if SA; nothing checks it though&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x10&lt;br /&gt;
| bytes&lt;br /&gt;
| titlekey_iv&lt;br /&gt;
| IV used to encrypt titlekey (with common key)                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x14&lt;br /&gt;
| bytes&lt;br /&gt;
| content_hash&lt;br /&gt;
| sha1 hash of plaintext content&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x10&lt;br /&gt;
| bytes&lt;br /&gt;
| content_iv&lt;br /&gt;
| IV used to encrypt content&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| recrypt_flag&lt;br /&gt;
| if bit 1 on, content will be re-encrypted on first launch, using console-unique key stored in Virage2 in the SoC    &lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| allowed_hardware&lt;br /&gt;
| bitfield, each bit enables access to some MMIO regs new to iQue Player:&lt;br /&gt;
* bits 0-7: new PI stuff              &lt;br /&gt;
* bit 0: PI buffer used for aes/NAND read output and PI DMA (1KB at PI_BASE+0x10000)    &lt;br /&gt;
* bit 1: NAND flash regs in PI        &lt;br /&gt;
* bit 2: memory mapper for old PI dma &lt;br /&gt;
* bit 3: hardware AES-engine in PI&lt;br /&gt;
* bit 4: new PI dma engine, DMAs  from/to PI buffer&lt;br /&gt;
* bit 5: new GPIO; power + LED&lt;br /&gt;
* bit 6: external IO bus stuff (debug?)&lt;br /&gt;
* bit 7: new PI error stuff&lt;br /&gt;
* bit 8: enables access to USB regs&lt;br /&gt;
* bit 9: enables access to internal ram used for SK stack  &lt;br /&gt;
(0 for games, 0x13 for iQue Club, 0x1F7/0x1B3 for SA)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| allowed_secure_kernel_calls&lt;br /&gt;
| one bit per syscall bit 0 allows skc 0, etc.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| int32&lt;br /&gt;
| console_id&lt;br /&gt;
| can be zero; if not can only run on certain (used for SAs, not games) &lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x40&lt;br /&gt;
| chars&lt;br /&gt;
| signer&lt;br /&gt;
| Authority (cert used to sign ticket)&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| uint32&lt;br /&gt;
| content_id&lt;br /&gt;
| Content ID (can&amp;#039;t be higher than 99999999, if (cid / 100) % 10 == 9, this is a game manual)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x10&lt;br /&gt;
| bytes&lt;br /&gt;
| titlekey&lt;br /&gt;
| crypted with common key, and if this is not an SA, then crypted again with key derived using ECDH of console&amp;#039;s privkey and pubkey in ticket   &lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x100&lt;br /&gt;
| bytes&lt;br /&gt;
| signature&lt;br /&gt;
| RSA-2048 signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Signature ==&lt;br /&gt;
The signature is made from a SHA1 hash of 0x0 - 0xAC, prior to the titlekey being encrypted with the ECDH-derived titlekek.&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=827</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=827"/>
		<updated>2018-05-05T20:58:51Z</updated>

		<summary type="html">&lt;p&gt;Riley: add skRecryptData 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=u8* buf, $a1=u32 size&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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=OTP&amp;diff=826</id>
		<title>OTP</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=OTP&amp;diff=826"/>
		<updated>2018-05-04T16:29:44Z</updated>

		<summary type="html">&lt;p&gt;Riley: Riley moved page OTP to Virage2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Virage2]]&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=Virage2&amp;diff=825</id>
		<title>Virage2</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Virage2&amp;diff=825"/>
		<updated>2018-05-04T16:29:44Z</updated>

		<summary type="html">&lt;p&gt;Riley: Riley moved page OTP to Virage2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virage2 is a rewritable 256 (0xFF) Byte memory region located inside the SoC. It can only be read in secure mode, and is mapped to &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  || SK Hash || common&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x10 x 4 || ROM Patch || common&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x20  || EccPublicKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || 0x04  || bbId || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || 0x40  || EccPrivateKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xB8 || 0x10  || bootAppKey (COMMON KEY)|| common&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 || 0x10  || recryptListKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || 0x10  || appStateKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x10  || selfMsgKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || 0x04  || csumAdjust || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC || 0x04  || jtagEnable || common&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=823</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=823"/>
		<updated>2018-05-04T11:28:59Z</updated>

		<summary type="html">&lt;p&gt;Riley: otp? we don&amp;#039;t need no stinkin&amp;#039; otp&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;
| Virage2 is writable&lt;br /&gt;
| SK has code to write to Virage2; this actually works and writes there.&lt;br /&gt;
Virage2 was assumed &amp;quot;OTP&amp;quot; before, it contains SK hash, bootrom patches, BBID and key material.&lt;br /&gt;
&lt;br /&gt;
Successfully overwriting the correct virage2 areas allows for persistent boot-time secure mode code execution.&lt;br /&gt;
&lt;br /&gt;
WARNING: overwriting SK hash with garbage, not fixing checksum, etc, WILL hard brick your console!&lt;br /&gt;
| May 4, 2018&lt;br /&gt;
| [[User:Normmatt|Normmatt]]&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 (this is possible, thanks to other (below) issues), 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 and CMD (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;
| skRecryptData insufficient checks&lt;br /&gt;
| skRecryptData allows for NULL to be passed in as a pointer, for supporting some alternate mode controlled by a u32 in SK .data.&lt;br /&gt;
However, if this u32 is 0 (which is the default), no further checks are done and recrypt operations are done starting from NULL with provided length (in 0x400 chunks).&lt;br /&gt;
&lt;br /&gt;
Also, if skRecryptBegin wasn&amp;#039;t called, the recrypt operation is done by decrypting using the current hardware AES engine state, then re-encrypting with a completely zero internal state (which is invalid, so nothing will be done).&lt;br /&gt;
&lt;br /&gt;
If skRecryptBegin was called, the re-encryption will succeed as the internal state would have been set, and re-encrypted data would be written to the same area that the original data was read from. (To get to the SK code area with this, though, requires overwriting all of DRAM)&lt;br /&gt;
| Possible infoleak into the PI buffer. (without recrypt state set)&lt;br /&gt;
Possible secure mode code execution. (with recrypt state set)&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| SK&amp;#039;s CRL checking function will not check a ticket CRL at all if the ticket CRL version in the ticket (as s32) is &amp;lt; 0&lt;br /&gt;
| The function in SK that checks provided CRLs at &amp;lt;tt&amp;gt;0x9FC02CB4&amp;lt;/tt&amp;gt; checks the provided ticket CRL version first (which comes from the ticket.) If it&amp;#039;s less than 0 as s32, it will not be checked at all, that call will be jumped over.&lt;br /&gt;
&lt;br /&gt;
The first CRL in the list is the ticket CRL; thus this could provide a favourable situation for exploiting psychic paper.&lt;br /&gt;
&lt;br /&gt;
Additionally, the required elements to craft a CRL such that SA believes it to be valid with the public key in the correct place for psychic paper do not overlap.&lt;br /&gt;
&lt;br /&gt;
Furthermore, libultra function osBbSaGamePrelaunch (which calls skLaunchSetup/skRecryptBegin/etc), which is called by SA when launching a game, stores the CRL structure for those two SKCs directly after the ticket bundle structure in .data. This, plus other flaws (below) lead directly to the successful exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| eSKape: bad SKC table bounds check&lt;br /&gt;
| SK&amp;#039;s Secure Kernel Call handler bounds check uses a signed comparison when checking the SKC number that&amp;#039;s being called to make sure it is within the bounds of the table, leading to the ability to have SK take the SKC function pointer from non-secure RAM, and thus, arbitrary code execution in secure mode.&lt;br /&gt;
| Secure mode code execution.&lt;br /&gt;
| May 1, 2018&lt;br /&gt;
| [[User:Stuckpixel|Stuckpixel]] and [[User:Riley|Riley]] (complementary)&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;
| libultra _osBbSaVerifyTickets gets an entire ticket bundle then just uses skVerifyHash with the ticket cert-chain ptr&lt;br /&gt;
| _osBbVerifyTickets is called by osBbSaMetaGetTickets if argument 2 is not 0. (osBbSaMetaGetTickets, in turn, is called by a function in SA that appears to get the data for the game menu?)&lt;br /&gt;
This function calls osBbSaBundleTicket, which gets a &amp;quot;ticket bundle&amp;quot; (struct containing ticket + ticket+CMD cert chain + CRL pointers, pointer to which is used as an argument for skLaunchSetup and skRecryptBegin), then proceeds to call skVerifyHash passing a pointer to the ticket cert-chain pointer array from that structure.&lt;br /&gt;
&lt;br /&gt;
Given that the CMD cert chain pointer array is directly after the ticket cert-chain pointer array in that structure, this gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper and self-signing tickets such that non-test SAs believe them to be valid.&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| libultra osBbSaCertCreateChain only uses the endmost certificate&amp;#039;s issuer&lt;br /&gt;
| osBbSaCertCreateChain parses cert.sys to create a cert chain array for SK (first element points to the object&amp;#039;s signer, second element points to its signer, etc.).&lt;br /&gt;
This function only uses the issuer of the endmost certificate (object&amp;#039;s signer), to get a list of certificate names to obtain.&lt;br /&gt;
&lt;br /&gt;
The rest of the certificates only have their name compared against the one currently being searched for. There are no checks that the chain being created ends in Root. This gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=Virage2&amp;diff=743</id>
		<title>Virage2</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Virage2&amp;diff=743"/>
		<updated>2018-05-02T21:04:48Z</updated>

		<summary type="html">&lt;p&gt;Riley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OTP is a One Time Programmable 256Bytes memory located inside the SoC and seems to be called &amp;quot;virage2&amp;quot; inside SDK code. It can only be read in secure mode, and is mapped to &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  || SK Hash || common&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x10 x 4 || ROM Patch || common&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x20  || EccPublicKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || 0x04  || bbId || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || 0x40  || EccPrivateKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xB8 || 0x10  || bootAppKey - COMMON KEY || common&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 || 0x10  || recryptListKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || 0x10  || appStateKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x10  || selfMsgKey || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || 0x04  || csumAdjust || per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC || 0x04  || jtagEnable || common&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IO&amp;diff=731</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=IO&amp;diff=731"/>
		<updated>2018-05-02T12:17:23Z</updated>

		<summary type="html">&lt;p&gt;Riley: add MI_RANDOM_BIT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Custom registers.&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;
| 0xA4300010 || 4  || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300014 || 4? || || 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;
| 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? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA430003C || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400000 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4500008 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600010 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600014 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600018 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA460001C || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600020 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600024 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600028 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA460002C || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600030 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600040 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600044 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600048 || 4? || || Many times used for read/write actions. (card data access register???)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600050 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600054 || 4? || ||  &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600060 || 4 || [[#StatusField| StatusField]] || This register is used for RTC, error led and other things... (probably status register?, made-up name)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600070 || 4? || || &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 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610504 || 4? || || atb? (virtual address?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46E0400 || 4? or 2? || || rdb?&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4940010 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4A40010 || 4? || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= StatusField = &lt;br /&gt;
&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;
| ?-15 || Box Id&lt;br /&gt;
|-&lt;br /&gt;
| 27 || Power (on and off)&lt;br /&gt;
|-&lt;br /&gt;
| 28 || RTC related?&lt;br /&gt;
|-&lt;br /&gt;
| 29 || Unknown bit&lt;br /&gt;
|-&lt;br /&gt;
| 30 || Error led&lt;br /&gt;
|-&lt;br /&gt;
| 31 || Power (only on)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RTC ==&lt;br /&gt;
&lt;br /&gt;
The iQue Player has a custom RTC functionality. The Nintendo 64 doesn&amp;#039;t have a RTC, except the Nintendo 64 version of Animal Crossing which uses a special custom RTC chip instead of a built-in RTC. The RTC functionality is heavly used in the game [[Animal_Crossing| Animal Crossing]]. The RTC can be accessed through 0xA4600060. (unknown how)&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IO&amp;diff=720</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=IO&amp;diff=720"/>
		<updated>2018-05-01T18:14:26Z</updated>

		<summary type="html">&lt;p&gt;Riley: Added some AES MMIO registers.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Custom registers.&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;
| 0xA4300014 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300030 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300038 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA430003C || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400000 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4500008 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600010 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600014 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600018 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA460001C || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600020 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600024 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600028 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA460002C || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600030 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600040 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600044 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600048 || 4? || || Many times used for read/write actions. (card data access register???)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600050 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600054 || 4? || ||  &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600060 || 4 || [[#StatusField| StatusField]] || This register is used for RTC, error led and other things... (probably status register?, made-up name)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600070 || 4? || || &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 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610504 || 4? || || atb? (virtual address?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46E0400 || 4? or 2? || || rdb?&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4940010 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4A40010 || 4? || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= StatusField = &lt;br /&gt;
&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;
| ?-15 || Box Id&lt;br /&gt;
|-&lt;br /&gt;
| 27 || Power (on and off)&lt;br /&gt;
|-&lt;br /&gt;
| 28 || RTC related?&lt;br /&gt;
|-&lt;br /&gt;
| 29 || Unknown bit&lt;br /&gt;
|-&lt;br /&gt;
| 30 || Error led&lt;br /&gt;
|-&lt;br /&gt;
| 31 || Power (only on)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RTC ==&lt;br /&gt;
&lt;br /&gt;
The iQue Player (or card?) has a custom RTC functionality. The Nintendo 64 doesn&amp;#039;t have a RTC, except the Nintendo 64 version of Animal Crossing which uses a special custom RTC chip instead of a built-in RTC. The RTC functionality is heavly used in the game [[Animal_Crossing| Animal Crossing]]. The RTC can be accessed through 0xA4600060. (unknown how)&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=BB_registers&amp;diff=718</id>
		<title>BB registers</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=BB_registers&amp;diff=718"/>
		<updated>2018-05-01T17:44:52Z</updated>

		<summary type="html">&lt;p&gt;Riley: Riley moved page BB registers to IO&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[IO]]&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IO&amp;diff=717</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=IO&amp;diff=717"/>
		<updated>2018-05-01T17:44:52Z</updated>

		<summary type="html">&lt;p&gt;Riley: Riley moved page BB registers to IO&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Custom registers.&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;
| 0xA4300030 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4300038 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA430003C || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4400000 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4500008 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600010 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600014 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600018 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA460001C || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600020 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600024 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600028 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA460002C || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600030 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600040 || 4? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600048 || 4? || || Many times used for read/write actions. (card data access register???)&lt;br /&gt;
|- &lt;br /&gt;
| 0xA4600060 || 4 || [[#StatusField| StatusField]] || This register is used for RTC, error led and other things... (probably status register?, made-up name)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4600070 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610000 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610200 || 4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610500 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4610504 || 4? || || atb? (virtual address?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA46E0400 || 4? or 2? || || rdb?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= StatusField = &lt;br /&gt;
&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;
| ?-15 || Box Id&lt;br /&gt;
|-&lt;br /&gt;
| 27 || Power (on and off)&lt;br /&gt;
|-&lt;br /&gt;
| 28 || RTC related?&lt;br /&gt;
|-&lt;br /&gt;
| 29 || Unknown bit&lt;br /&gt;
|-&lt;br /&gt;
| 30 || Error led&lt;br /&gt;
|-&lt;br /&gt;
| 31 || Power (only on)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RTC ==&lt;br /&gt;
&lt;br /&gt;
The iQue Player (or card?) has a custom RTC functionality. The Nintendo 64 doesn&amp;#039;t have a RTC, except the Nintendo 64 version of Animal Crossing which uses a special custom RTC chip instead of a built-in RTC. The RTC functionality is heavly used in the game [[Animal_Crossing| Animal Crossing]]. The RTC can be accessed through 0xA4600060. (unknown how)&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=708</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=708"/>
		<updated>2018-04-30T21:12:49Z</updated>

		<summary type="html">&lt;p&gt;Riley: and thus, the psychic paper exploit chain is complete&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 (this is possible, thanks to other (below) issues), 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 and CMD (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;
| skRecryptData insufficient checks&lt;br /&gt;
| skRecryptData allows for NULL to be passed in as a pointer, for supporting some alternate mode controlled by a u32 in SK .data.&lt;br /&gt;
However, if this u32 is 0 (which is the default), no further checks are done and recrypt operations are done starting from NULL with provided length (in 0x400 chunks).&lt;br /&gt;
&lt;br /&gt;
Also, if skRecryptBegin wasn&amp;#039;t called, the recrypt operation is done by decrypting using the current hardware AES engine state, then re-encrypting with a completely zero internal state (which is invalid, so nothing will be done).&lt;br /&gt;
&lt;br /&gt;
If skRecryptBegin was called, the re-encryption will succeed as the internal state would have been set, and re-encrypted data would be written to the same area that the original data was read from. (To get to the SK code area with this, though, requires overwriting all of DRAM)&lt;br /&gt;
| Possible infoleak into the PI buffer. (without recrypt state set)&lt;br /&gt;
Possible secure mode code execution. (with recrypt state set)&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| SK&amp;#039;s CRL checking function will not check a ticket CRL at all if the ticket CRL version in the ticket (as s32) is &amp;lt; 0&lt;br /&gt;
| The function in SK that checks provided CRLs at &amp;lt;tt&amp;gt;0x9FC02CB4&amp;lt;/tt&amp;gt; checks the provided ticket CRL version first (which comes from the ticket.) If it&amp;#039;s less than 0 as s32, it will not be checked at all, that call will be jumped over.&lt;br /&gt;
&lt;br /&gt;
The first CRL in the list is the ticket CRL; thus this could provide a favourable situation for exploiting psychic paper.&lt;br /&gt;
&lt;br /&gt;
Additionally, the required elements to craft a CRL such that SA believes it to be valid with the public key in the correct place for psychic paper do not overlap.&lt;br /&gt;
&lt;br /&gt;
Furthermore, libultra function osBbSaGamePrelaunch (which calls skLaunchSetup/skRecryptBegin/etc), which is called by SA when launching a game, stores the CRL structure for those two SKCs directly after the ticket bundle structure in .data. This, plus other flaws (below) lead directly to the successful exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| April 30, 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;
| libultra _osBbSaVerifyTickets gets an entire ticket bundle then just uses skVerifyHash with the ticket cert-chain ptr&lt;br /&gt;
| _osBbVerifyTickets is called by osBbSaMetaGetTickets if argument 2 is not 0. (osBbSaMetaGetTickets, in turn, is called by a function in SA that appears to get the data for the game menu?)&lt;br /&gt;
This function calls osBbSaBundleTicket, which gets a &amp;quot;ticket bundle&amp;quot; (struct containing ticket + ticket+CMD cert chain + CRL pointers, pointer to which is used as an argument for skLaunchSetup and skRecryptBegin), then proceeds to call skVerifyHash passing a pointer to the ticket cert-chain pointer array from that structure.&lt;br /&gt;
&lt;br /&gt;
Given that the CMD cert chain pointer array is directly after the ticket cert-chain pointer array in that structure, this gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper and self-signing tickets such that non-test SAs believe them to be valid.&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| libultra osBbSaCertCreateChain only uses the endmost certificate&amp;#039;s issuer&lt;br /&gt;
| osBbSaCertCreateChain parses cert.sys to create a cert chain array for SK (first element points to the object&amp;#039;s signer, second element points to its signer, etc.).&lt;br /&gt;
This function only uses the issuer of the endmost certificate (object&amp;#039;s signer), to get a list of certificate names to obtain.&lt;br /&gt;
&lt;br /&gt;
The rest of the certificates only have their name compared against the one currently being searched for. There are no checks that the chain being created ends in Root. This gives a favourable situation for exploitation of psychic paper.&lt;br /&gt;
| Exploitation of psychic paper&lt;br /&gt;
| All non-test SAs?&lt;br /&gt;
| April 30, 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=707</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=707"/>
		<updated>2018-04-30T17:14:35Z</updated>

		<summary type="html">&lt;p&gt;Riley: dank memes&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 and CMD (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;
| skRecryptData insufficient checks&lt;br /&gt;
| skRecryptData allows for NULL to be passed in as a pointer, for supporting some alternate mode controlled by a u32 in SK .data.&lt;br /&gt;
However, if this u32 is 0 (which is the default), no further checks are done and recrypt operations are done starting from NULL with provided length (in 0x400 chunks).&lt;br /&gt;
&lt;br /&gt;
Also, if skRecryptBegin wasn&amp;#039;t called, the recrypt operation is done by decrypting using the current hardware AES engine state, then re-encrypting with a completely zero internal state (which is invalid, so nothing will be done).&lt;br /&gt;
&lt;br /&gt;
If skRecryptBegin was called, the re-encryption will succeed as the internal state would have been set, and re-encrypted data would be written to the same area that the original data was read from. (To get to the SK code area with this, though, requires overwriting all of DRAM)&lt;br /&gt;
| Possible infoleak into the PI buffer. (without recrypt state set)&lt;br /&gt;
Possible secure mode code execution. (with recrypt state set)&lt;br /&gt;
| April 30, 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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=704</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=704"/>
		<updated>2018-04-29T21:48:14Z</updated>

		<summary type="html">&lt;p&gt;Riley: clarification&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 and CMD (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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=697</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=697"/>
		<updated>2018-04-29T14:41:08Z</updated>

		<summary type="html">&lt;p&gt;Riley: removed dev-only SKCs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Kernel calls =&lt;br /&gt;
&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 || In&lt;br /&gt;
|-&lt;br /&gt;
|  0x0 || skcGetBBID || $a0=u32* out_bbid&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || skcPrepareCMDAndTik || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || skcStartContent || $a0=address where decrypted content has been loaded&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || skcVerifyRecryptSys || $a0=address of recrypt.sys contents&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || skRecryptBegin || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || skRecryptData || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || skRecryptComputeState || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || skRecryptEnd || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || skcECCSignSHA1Hash || $a0=u8* sha1hash, $a1=u8* out_signature&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || skcVerifySignature || $a0=u8* sha1hash, $a1=u8* signature, $a2=certificate** certificate_chain, $a3=crl** crls?&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || skGetConsumption || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xB || skAdvanceTicketWindow || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || skSetLimit || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || skcReboot || void&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || skcKeepAlive || void&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=694</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=694"/>
		<updated>2018-04-29T12:23:46Z</updated>

		<summary type="html">&lt;p&gt;Riley: kekking at the titlekek, it&amp;#039;s also useless&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;
| skcPrepareCMDAndTik and skc04 leave CMD in memory if its signature does not verify&lt;br /&gt;
| The function called by skcPrepareCMDAndTik (and skc04) 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 skcPrepareCMDAndTik or skc04 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;
| skcStartContent does not check content hash if recrypt flag is set in CMD&lt;br /&gt;
| skcStartContent 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;
| skcVerifySignature signature pointer not validated&lt;br /&gt;
| skcVerifySignature 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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=693</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=693"/>
		<updated>2018-04-29T11:01:38Z</updated>

		<summary type="html">&lt;p&gt;Riley: &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;
| skcPrepareCMDAndTik and skc04 leave CMD in memory if its signature does not verify&lt;br /&gt;
| The function called by skcPrepareCMDAndTik (and skc04) 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 skcPrepareCMDAndTik or skc04 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;
| skcStartContent does not check content hash if recrypt flag is set in CMD&lt;br /&gt;
| skcStartContent 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;
| skcVerifySignature signature pointer not validated&lt;br /&gt;
| skcVerifySignature 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;
&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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=689</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=689"/>
		<updated>2018-04-26T23:05:50Z</updated>

		<summary type="html">&lt;p&gt;Riley: &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;
| skcPrepareCMDAndTik and skc04 leave CMD in memory if its signature does not verify&lt;br /&gt;
| The function called by skcPrepareCMDAndTik (and skc04) 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 skcPrepareCMDAndTik or skc04 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;
| skcStartContent does not check content hash if recrypt flag is set in CMD&lt;br /&gt;
| skcStartContent 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;
&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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=688</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=688"/>
		<updated>2018-04-26T22:04:14Z</updated>

		<summary type="html">&lt;p&gt;Riley: /* Secure Kernel calls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Kernel calls =&lt;br /&gt;
&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 || In&lt;br /&gt;
|-&lt;br /&gt;
|  0x0 || skcGetBBID || $a0=u32* out_bbid&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || skcPrepareCMDAndTik || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || skcStartContent || $a0=address where decrypted content has been loaded&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || skcVerifyRecryptSys || $a0=address of recrypt.sys contents&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || skcECCSignSHA1Hash || $a0=u8* sha1hash, $a1=u8* out_signature&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || skcVerifySignature || $a0=u8* sha1hash, $a1=u8* signature, $a2=certificate** certificate_chain, $a3=crl** crls?&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xB || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || skcReboot || void&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || ??? || ???&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=687</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=687"/>
		<updated>2018-04-26T22:03:54Z</updated>

		<summary type="html">&lt;p&gt;Riley: skcVerifySignature&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Kernel calls =&lt;br /&gt;
&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 || In&lt;br /&gt;
|-&lt;br /&gt;
|  0x0 || skcGetBBID || $a0=u32* out_bbid&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || skcPrepareCMDAndTik || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || skcStartContent || $a0=address where decrypted content has been loaded&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || skcVerifyRecryptSys || $a0=address of recrypt.sys contents&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || skcECCSignSHA1Hash || $a0=u8* sha1hash, $a1=u8* out_signature&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || skcVerifySignature || $a0=u8* sha1hash, $a1=u8* signature, certificate** certificate_chain, crl** crls?&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xB || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || skcReboot || void&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || ??? || ???&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=686</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=686"/>
		<updated>2018-04-26T19:20:36Z</updated>

		<summary type="html">&lt;p&gt;Riley: skcECCSignSHA1Hash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Kernel calls =&lt;br /&gt;
&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 || In&lt;br /&gt;
|-&lt;br /&gt;
|  0x0 || skcGetBBID || $a0=u32* out_bbid&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || skcPrepareCMDAndTik || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || skcStartContent || $a0=address where decrypted content has been loaded&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || skcVerifyRecryptSys || $a0=address of recrypt.sys contents&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || skcECCSignSHA1Hash || $a0=u8* sha1hash, $a1=u8* out_signature&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xB || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || skcReboot || void&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || ??? || ???&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=685</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=685"/>
		<updated>2018-04-26T18:24:44Z</updated>

		<summary type="html">&lt;p&gt;Riley: skcVerifyRecryptSys&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Kernel calls =&lt;br /&gt;
&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 || In&lt;br /&gt;
|-&lt;br /&gt;
|  0x0 || skcGetBBID || $a0=u32* out_bbid&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || skcPrepareCMDAndTik || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || skcStartContent || $a0=address where decrypted content has been loaded&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || skcVerifyRecryptSys || $a0=address of recrypt.sys contents&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xB || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || skcReboot || void&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || ??? || ???&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=684</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=684"/>
		<updated>2018-04-26T18:10:35Z</updated>

		<summary type="html">&lt;p&gt;Riley: /* Secure Kernel */ clarification&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;
| skcPrepareCMDAndTik and skc04 leave CMD in memory if its signature does not verify&lt;br /&gt;
| The function called by skcPrepareCMDAndTik (and skc04) 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 skcPrepareCMDAndTik or skc04 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;
| skcStartContent does not check content hash if recrypt flag is set in CMD&lt;br /&gt;
| skcStartContent 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 usage of xorpads)&lt;br /&gt;
| Early 2018?&lt;br /&gt;
| Everyone&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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=683</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=683"/>
		<updated>2018-04-26T17:48:14Z</updated>

		<summary type="html">&lt;p&gt;Riley: skcStartContent fail.&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;
| skcPrepareCMDAndTik and skc04 leave CMD in memory if its signature does not verify&lt;br /&gt;
| The function called by skcPrepareCMDAndTik (and skc04) 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 skcPrepareCMDAndTik or skc04 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;
| skcStartContent does not check content hash if recrypt flag is set in CMD&lt;br /&gt;
| skcStartContent 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, arbitrary code execution (via usage of xorpads)&lt;br /&gt;
| Early 2018?&lt;br /&gt;
| Everyone&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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=682</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=682"/>
		<updated>2018-04-26T17:40:29Z</updated>

		<summary type="html">&lt;p&gt;Riley: skc02=skcStartContent&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Kernel calls =&lt;br /&gt;
&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 || In&lt;br /&gt;
|-&lt;br /&gt;
|  0x0 || skcGetBBID || $a0=u32* out_bbid&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || skcPrepareCMDAndTik || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || skcStartContent || $a0=address where decrypted content has been loaded&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xB || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || skcReboot || void&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || ??? || ???&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=681</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=681"/>
		<updated>2018-04-26T17:36:26Z</updated>

		<summary type="html">&lt;p&gt;Riley: skcPrepareCMDAndTik fail of limited usefulness&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;
| skcPrepareCMDAndTik and skc04 leave CMD in memory if its signature does not verify&lt;br /&gt;
| The function called by skcPrepareCMDAndTik (and skc04) 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 skcPrepareCMDAndTik or skc04 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;
|}&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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=680</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=680"/>
		<updated>2018-04-26T12:15:32Z</updated>

		<summary type="html">&lt;p&gt;Riley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Kernel calls =&lt;br /&gt;
&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 || In&lt;br /&gt;
|-&lt;br /&gt;
|  0x0 || skcGetBBID || $a0=u32*&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || skcPrepareCMDAndTik || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xB || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || skcReboot || void&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || ??? || ???&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=Main_Page/Navigation&amp;diff=679</id>
		<title>Main Page/Navigation</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Main_Page/Navigation&amp;diff=679"/>
		<updated>2018-04-26T12:00:44Z</updated>

		<summary type="html">&lt;p&gt;Riley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main page box|Navigation|:Navigation}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: -.3em -1em -1em -1em;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; bgcolor=&amp;quot;#fff&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2px&amp;quot; cellspacing=&amp;quot;2px&amp;quot; style=&amp;quot;margin:auto;&amp;quot;&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#e7eef6&amp;quot;&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &amp;#039;&amp;#039;&amp;#039;General&amp;#039;&amp;#039;&amp;#039; &amp;lt;!-- Stuff not directly related to reverse-engineering, system documentation, and homebrew --&amp;gt;&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Homebrew&amp;#039;&amp;#039;&amp;#039; &amp;lt;!-- Hardware and its interfaces --&amp;gt;&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Hardware/Software&amp;#039;&amp;#039;&amp;#039; &amp;lt;!-- Software --&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #F5FAFF;&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
*[[Glossary]]&lt;br /&gt;
*[[Games]]&lt;br /&gt;
*[[:Category:PC utilities|PC Utilities]]&lt;br /&gt;
|&lt;br /&gt;
*[[IQue Player System Flaws|System flaws]]&lt;br /&gt;
|&lt;br /&gt;
*[[:Category:Hardware|Hardware]]&lt;br /&gt;
*[[IQue Player|Player Overview]] ([[IO|IO registers]])&lt;br /&gt;
*[[IQue Card|Memory Card]]&lt;br /&gt;
*[[:Category:File_formats|File Formats]]&lt;br /&gt;
*[[SKC|Secure Kernel calls]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{box-footer-empty}}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=SKC&amp;diff=678</id>
		<title>SKC</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=SKC&amp;diff=678"/>
		<updated>2018-04-26T11:59:57Z</updated>

		<summary type="html">&lt;p&gt;Riley: document some SKCs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Kernel calls =&lt;br /&gt;
&lt;br /&gt;
All secure kernel calls return a s32 error code in $v0. 0 means success, below zero means error.skc&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || In&lt;br /&gt;
|-&lt;br /&gt;
|  0x0 || skcGetBBID || $a0=u32*&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || skcPrepareCMDAndTik || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xB || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || ??? || ???&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || skcReboot || void&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || ??? || ???&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=677</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=677"/>
		<updated>2018-04-26T11:16:53Z</updated>

		<summary type="html">&lt;p&gt;Riley: SA=system application, not secure application&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;
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;
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;
|}&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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=676</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=676"/>
		<updated>2018-04-25T21:03:05Z</updated>

		<summary type="html">&lt;p&gt;Riley: clarification with regard to SAs&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;
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;
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;
|}&lt;br /&gt;
&lt;br /&gt;
==Secure 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 Secure Applications&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  No known Secure 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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=Main_Page/Navigation&amp;diff=675</id>
		<title>Main Page/Navigation</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Main_Page/Navigation&amp;diff=675"/>
		<updated>2018-04-25T20:59:23Z</updated>

		<summary type="html">&lt;p&gt;Riley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main page box|Navigation|:Navigation}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: -.3em -1em -1em -1em;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; bgcolor=&amp;quot;#fff&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2px&amp;quot; cellspacing=&amp;quot;2px&amp;quot; style=&amp;quot;margin:auto;&amp;quot;&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#e7eef6&amp;quot;&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &amp;#039;&amp;#039;&amp;#039;General&amp;#039;&amp;#039;&amp;#039; &amp;lt;!-- Stuff not directly related to reverse-engineering, system documentation, and homebrew --&amp;gt;&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Homebrew&amp;#039;&amp;#039;&amp;#039; &amp;lt;!-- Hardware and its interfaces --&amp;gt;&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Hardware/Software&amp;#039;&amp;#039;&amp;#039; &amp;lt;!-- Software --&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #F5FAFF;&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
*[[Glossary]]&lt;br /&gt;
*[[Games]]&lt;br /&gt;
*[[:Category:PC utilities|PC Utilities]]&lt;br /&gt;
|&lt;br /&gt;
*[[IQue Player System Flaws|System flaws]]&lt;br /&gt;
|&lt;br /&gt;
*[[:Category:Hardware|Hardware]]&lt;br /&gt;
*[[IQue Player|Player Overview]] ([[IO|IO registers]])&lt;br /&gt;
*[[IQue Card|Memory Card]]&lt;br /&gt;
*[[:Category:File_formats|File Formats]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{box-footer-empty}}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player_System_Flaws&amp;diff=674</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=674"/>
		<updated>2018-04-25T20:57:48Z</updated>

		<summary type="html">&lt;p&gt;Riley: *pops champagne*&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;
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;
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;
| April 2018&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Secure 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 Secure Applications&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  No known Secure 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>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=Titles&amp;diff=576</id>
		<title>Titles</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Titles&amp;diff=576"/>
		<updated>2018-04-05T22:59:39Z</updated>

		<summary type="html">&lt;p&gt;Riley: /* Videos */ oops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are titles downloadable via http://cds.idc.ique.com:16963/cds/download?content_id=xxx, where xxx is replaced with one of the following IDs:&lt;br /&gt;
&lt;br /&gt;
=== [[SKSA]] ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (KiB)&lt;br /&gt;
|-&lt;br /&gt;
| 1009&lt;br /&gt;
| D458B4189DE60947AAA44ABC5C4235A3&lt;br /&gt;
| 999,424&lt;br /&gt;
| 976&lt;br /&gt;
|-&lt;br /&gt;
| 1010&lt;br /&gt;
| D6E171FC693F61B0456B1A6C187717B7&lt;br /&gt;
| 229,376&lt;br /&gt;
| 224&lt;br /&gt;
|-&lt;br /&gt;
| 1011&lt;br /&gt;
| C233D6C6972DE294B6B59D99FFD48695&lt;br /&gt;
| 3,751,936&lt;br /&gt;
| 3,664&lt;br /&gt;
|-&lt;br /&gt;
| 1012&lt;br /&gt;
| C520AAAED20B4371B2ED7BB1063ABA7A&lt;br /&gt;
| 229,376&lt;br /&gt;
| 224&lt;br /&gt;
|-&lt;br /&gt;
| 1013&lt;br /&gt;
| 134B0AB9AFD980E11B5CA983CE597699&lt;br /&gt;
| 3,817,472&lt;br /&gt;
| 3728&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Apps ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! Name&lt;br /&gt;
! Have ticket?&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (KiB)&lt;br /&gt;
! Icon&lt;br /&gt;
! Title image&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.idc.ique.com:16963/cds/download?content_id=10000001 10000001]&lt;br /&gt;
| ? (older [[iQue Club]]?)&lt;br /&gt;
| N&lt;br /&gt;
| 99BF5E73BDE973481DF31DA37E0323C1&lt;br /&gt;
| 557,056&lt;br /&gt;
| 544&lt;br /&gt;
| [[File:10000001_thumb.png]]&lt;br /&gt;
| [[File:10000001_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.idc.ique.com:16963/cds/download?content_id=10000002 10000002]&lt;br /&gt;
| ? (older [[iQue Club]]?)&lt;br /&gt;
| N&lt;br /&gt;
| 998B226B8DB3C9EC33714311E5D4518F&lt;br /&gt;
| 557,056&lt;br /&gt;
| 544&lt;br /&gt;
| [[File:10000002_thumb.png]]&lt;br /&gt;
| [[File:10000002_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.idc.ique.com:16963/cds/download?content_id=10000003 10000003]&lt;br /&gt;
| [[iQue Club]]&lt;br /&gt;
| Y&lt;br /&gt;
| A872E4B02A6E878B0182078CD3CA7A54&lt;br /&gt;
| 573,440&lt;br /&gt;
| 560&lt;br /&gt;
| [[File:10000003_thumb.png]]&lt;br /&gt;
| [[File:10000003_title.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Games ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! Name&lt;br /&gt;
! Have ticket?&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (MiB)&lt;br /&gt;
! Icon&lt;br /&gt;
! Title image&lt;br /&gt;
|-&lt;br /&gt;
| 1101104&lt;br /&gt;
| [[Super Mario 64]]&lt;br /&gt;
| Y&lt;br /&gt;
| C459BA45F0B0071ECF6B62DA70F3D0A2&lt;br /&gt;
| 8,060,928&lt;br /&gt;
| 7.68&lt;br /&gt;
| [[File:1101104_thumb.png]]&lt;br /&gt;
| [[File:1101104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1102101&lt;br /&gt;
| [[Yoshi&amp;#039;s Story]]&lt;br /&gt;
| Y&lt;br /&gt;
| F41DD4A1699C271725540B9E9B06905B&lt;br /&gt;
| 16,023,552&lt;br /&gt;
| 15.2&lt;br /&gt;
| [[File:1102101_thumb.png]]&lt;br /&gt;
| [[File:1102101_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1201105&lt;br /&gt;
| [[Super Smash Bros. | Smash Bros]]&lt;br /&gt;
| Y&lt;br /&gt;
| 49844CB8FE9A45BAE2A20837BDD273B8&lt;br /&gt;
| 16,793,600&lt;br /&gt;
| 16.0&lt;br /&gt;
| [[File:1201105_thumb.png]]&lt;br /&gt;
| [[File:1201105_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2101104&lt;br /&gt;
| [[The Legend of Zelda: Ocarina of Time | TLoZ: OoT]]&lt;br /&gt;
| Y&lt;br /&gt;
| 5AD50BA0418FEDE5975D8C5A9479026A&lt;br /&gt;
| 29,868,032&lt;br /&gt;
| 28.4&lt;br /&gt;
| [[File:2101104_thumb.png]]&lt;br /&gt;
| [[File:2101104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2102104&lt;br /&gt;
| [[Paper Mario]]&lt;br /&gt;
| Y&lt;br /&gt;
| 0FA599E0C4572D01E0F27053A6C0E2C9&lt;br /&gt;
| 41,943,040&lt;br /&gt;
| 40.0&lt;br /&gt;
| [[File:2102104_thumb.png]]&lt;br /&gt;
| [[File:2102104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 21031??&lt;br /&gt;
| [[The Legend of Zelda: Majora&amp;#039;s Mask | TLoZ: MM (not on CDS)]]&lt;br /&gt;
| N&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 2104108&lt;br /&gt;
| [[Animal Crossing]]&lt;br /&gt;
| Y&lt;br /&gt;
| ABB27076A1CA5632CBF2442F2FD761A0&lt;br /&gt;
| 16,138,240&lt;br /&gt;
| 15.3&lt;br /&gt;
| [[File:2104108_thumb.png]]&lt;br /&gt;
| [[File:2104108_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2105103&lt;br /&gt;
| [[Custom Robo]]&lt;br /&gt;
| Y&lt;br /&gt;
| 6A9BD38BC13CC294484F296C13455720&lt;br /&gt;
| 16,793,600&lt;br /&gt;
| 16.0&lt;br /&gt;
| [[File:2105103_thumb.png]]&lt;br /&gt;
| [[File:2105103_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2106101&lt;br /&gt;
| [[&amp;quot;21061&amp;quot; | ?]]&lt;br /&gt;
| N&lt;br /&gt;
| 627DF063F2C7363B62104AF8136D1398&lt;br /&gt;
| 29,868,032&lt;br /&gt;
| 28.4&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 4101104&lt;br /&gt;
| [[Star Fox 64]] (v4)&lt;br /&gt;
| N&lt;br /&gt;
| A35F74BBD3402BDDD5D9DE80B2DFE8D0&lt;br /&gt;
| 11,829,248&lt;br /&gt;
| 11.2&lt;br /&gt;
| [[File:4101104_thumb.png]]&lt;br /&gt;
| [[File:4101104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4101105&lt;br /&gt;
| [[Star Fox 64]] (v5)&lt;br /&gt;
| Y&lt;br /&gt;
| 1DAF559E7FB63E2066C7CA8358B83EE9&lt;br /&gt;
| 11,829,248&lt;br /&gt;
| 11.2&lt;br /&gt;
| [[File:4101105_thumb.png]]&lt;br /&gt;
| [[File:4101105_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4102103&lt;br /&gt;
| [[Sin and Punishment: Successor of the Earth | Sin &amp;amp; Punishment]]&lt;br /&gt;
| Y&lt;br /&gt;
| CA2F78F45D8DC723C09A3305999C221F&lt;br /&gt;
| 33,636,352&lt;br /&gt;
| 32.0&lt;br /&gt;
| [[File:4102103_thumb.png]]&lt;br /&gt;
| [[File:4102103_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5101104&lt;br /&gt;
| [[Wave Race 64]]&lt;br /&gt;
| Y&lt;br /&gt;
| BFFF6C33FB58657D7EA4479C10F92C26&lt;br /&gt;
| 8,159,232&lt;br /&gt;
| 7.78&lt;br /&gt;
| [[File:5101104_thumb.png]]&lt;br /&gt;
| [[File:5101104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5102108&lt;br /&gt;
| [[Excitebike 64 | Excitebike]]&lt;br /&gt;
| Y&lt;br /&gt;
| 5ADBA1EF5CFB3B5368D92CECFCCF3836&lt;br /&gt;
| 16,072,704&lt;br /&gt;
| 15.3&lt;br /&gt;
| [[File:5102108_thumb.png]]&lt;br /&gt;
| [[File:5102108_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5201104&lt;br /&gt;
| [[Mario Kart 64]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| 9895E8288F822FEE67D4D19FD6BB2CAA&lt;br /&gt;
| 12,533,760&lt;br /&gt;
| 11.9&lt;br /&gt;
| [[File:5201104_thumb.png]]&lt;br /&gt;
| [[File:5201104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5201105&lt;br /&gt;
| [[Mario Kart 64]] (v5)&lt;br /&gt;
| Y&lt;br /&gt;
| 539F1235E78AA9E01DEDEE13E9024DAA&lt;br /&gt;
| 12,533,760&lt;br /&gt;
| 11.9&lt;br /&gt;
| [[File:5201105_thumb.png]]&lt;br /&gt;
| [[File:5201105_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5202103&lt;br /&gt;
| [[F-Zero X]]&lt;br /&gt;
| Y&lt;br /&gt;
| F8AEAABEBCA1B0D228A5FE3C77740381&lt;br /&gt;
| 16,334,848&lt;br /&gt;
| 15.5&lt;br /&gt;
| [[File:5202103_thumb.png]]&lt;br /&gt;
| [[File:5202103_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 6101104&lt;br /&gt;
| [[Dr. Mario 64 | Dr. Mario]]&lt;br /&gt;
| Y&lt;br /&gt;
| 514DCF24C3B6E777157D3F19FEBB253F&lt;br /&gt;
| 3,358,720&lt;br /&gt;
| 3.20&lt;br /&gt;
| [[File:6101104_thumb.png]]&lt;br /&gt;
| [[File:6101104_title.png]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game Manuals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! Name&lt;br /&gt;
! Have ticket?&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (KiB)&lt;br /&gt;
! Icon&lt;br /&gt;
! Title image&lt;br /&gt;
|-&lt;br /&gt;
| 1101902&lt;br /&gt;
| [[Super Mario 64]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 593DC3BDCE513B112784B20E2DD46347&lt;br /&gt;
| 212,992&lt;br /&gt;
| 208&lt;br /&gt;
| [[File:1101902_thumb.png]]&lt;br /&gt;
| [[File:1101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1101906&lt;br /&gt;
| [[Super Mario 64]] (v6)&lt;br /&gt;
| Y&lt;br /&gt;
| 216AD927DD016582EFD548AC0B71D97F&lt;br /&gt;
| 409,600 &lt;br /&gt;
| 400&lt;br /&gt;
| [[File:1101906_thumb.png]]&lt;br /&gt;
| [[File:1101906_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1102902&lt;br /&gt;
| [[Yoshi&amp;#039;s Story]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 4CD568FA411F66FB251EB677F07E621B&lt;br /&gt;
| 196,608&lt;br /&gt;
| 192&lt;br /&gt;
| [[File:1102902_thumb.png]]&lt;br /&gt;
| [[File:1102902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1102904&lt;br /&gt;
| [[Yoshi&amp;#039;s Story]] (v4)&lt;br /&gt;
| N&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:1102902_thumb.png]]&lt;br /&gt;
| [[File:1102902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1102906&lt;br /&gt;
| [[Yoshi&amp;#039;s Story]] (v6)&lt;br /&gt;
| Y&lt;br /&gt;
| 9AFFE75A1208BE881CB959F27AF51EE5&lt;br /&gt;
| 425,984&lt;br /&gt;
| 416&lt;br /&gt;
| [[File:1102906_thumb.png]]&lt;br /&gt;
| [[File:1102906_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1201901&lt;br /&gt;
| [[Super Smash Bros. | Smash Bros]]&lt;br /&gt;
| Y&lt;br /&gt;
| C9BDE191187EEC7CC8C9B3E693427443&lt;br /&gt;
| 294,912&lt;br /&gt;
| 288&lt;br /&gt;
| [[File:1201901_thumb.png]]&lt;br /&gt;
| [[File:1201901_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2101902&lt;br /&gt;
| [[The Legend of Zelda: Ocarina of Time | TLoZ: OoT]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| A5B9C4286D63A47311CDAE8CA52CC849&lt;br /&gt;
| 278,528 &lt;br /&gt;
| 272&lt;br /&gt;
| [[File:2101902_thumb.png]]&lt;br /&gt;
| [[File:2101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2101904&lt;br /&gt;
| [[The Legend of Zelda: Ocarina of Time | TLoZ: OoT]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| 262992B226C0C70A96613DFB4760804D&lt;br /&gt;
| 425,984&lt;br /&gt;
| 416&lt;br /&gt;
| [[File:2101904_thumb.png]]&lt;br /&gt;
| [[File:2101904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2102902&lt;br /&gt;
| [[Paper Mario]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 7372A3D86180167DFACCCB7BAC12CAD7&lt;br /&gt;
| 376,832&lt;br /&gt;
| 368&lt;br /&gt;
| [[File:2102902_thumb.png]]&lt;br /&gt;
| [[File:2102902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2102904&lt;br /&gt;
| [[Paper Mario]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| 178C6727790B36502E1F720EF1B02056&lt;br /&gt;
| 376,832&lt;br /&gt;
| 368&lt;br /&gt;
| [[File:2102904_thumb.png]]&lt;br /&gt;
| [[File:2102904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4101902&lt;br /&gt;
| [[Star Fox 64]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 8741C70E7EC966235E5CE15104FF6C48&lt;br /&gt;
| 163,840&lt;br /&gt;
| 160&lt;br /&gt;
| [[File:4101902_thumb.png]]&lt;br /&gt;
| [[File:4101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4101904&lt;br /&gt;
| [[Star Fox 64]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:4101904_thumb.png]]&lt;br /&gt;
| [[File:4101904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4102901&lt;br /&gt;
| [[Sin and Punishment: Successor of the Earth | Sin &amp;amp; Punishment]]&lt;br /&gt;
| Y&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:4102901_thumb.png]]&lt;br /&gt;
| [[File:4102901_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5101902&lt;br /&gt;
| [[Wave Race 64]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 6684F2014489AFD87D40753CC3D0D44F&lt;br /&gt;
| 311,296&lt;br /&gt;
| 304&lt;br /&gt;
| [[File:5101902_thumb.png]]&lt;br /&gt;
| [[File:5101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5101904&lt;br /&gt;
| [[Wave Race 64]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:5101904_thumb.png]]&lt;br /&gt;
| [[File:5101904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5102902&lt;br /&gt;
| [[Excitebike 64 | Excitebike]]&lt;br /&gt;
| Y&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:5102902_thumb.png]]&lt;br /&gt;
| [[File:5102902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5201902&lt;br /&gt;
| [[Mario Kart 64]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| AA2D45CED10179F32B74375EF8384A61&lt;br /&gt;
| 245,760&lt;br /&gt;
| 240&lt;br /&gt;
| [[File:5201902_thumb.png]]&lt;br /&gt;
| [[File:5201902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5201906&lt;br /&gt;
| [[Mario Kart 64]] (v6)&lt;br /&gt;
| Y&lt;br /&gt;
| 072F79B24AF22B6363094630A9ED3C3D&lt;br /&gt;
| 425,984&lt;br /&gt;
| 416&lt;br /&gt;
| [[File:5201906_thumb.png]]&lt;br /&gt;
| [[File:5201906_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5202902&lt;br /&gt;
| [[F-Zero X]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 0ED89CBDCD2F96C5C08B70EAAAFBC613&lt;br /&gt;
| 180,224&lt;br /&gt;
| 176&lt;br /&gt;
| [[File:5202902_thumb.png]]&lt;br /&gt;
| [[File:5202902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5202904&lt;br /&gt;
| [[F-Zero X]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| B2C723A6F625FB99F08DB09FC4F9DC60&lt;br /&gt;
| 294,912&lt;br /&gt;
| 288&lt;br /&gt;
| [[File:5202904_thumb.png]]&lt;br /&gt;
| [[File:5202904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 6101902&lt;br /&gt;
| [[Dr. Mario 64 | Dr. Mario]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 0B98ABAF20F473D4BEE8E22F18920748&lt;br /&gt;
| 294,912&lt;br /&gt;
| 288&lt;br /&gt;
| [[File:6101902_thumb.png]]&lt;br /&gt;
| [[File:6101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 6101904&lt;br /&gt;
| [[Dr. Mario 64 | Dr. Mario]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| E7D1148BE9AC6149A35F0C22DDFE234E&lt;br /&gt;
| 393,216 &lt;br /&gt;
| 384&lt;br /&gt;
| [[File:6101904_thumb.png]]&lt;br /&gt;
| [[File:6101904_title.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Videos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! Name&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (MiB)&lt;br /&gt;
! Format&lt;br /&gt;
! Resolution&lt;br /&gt;
|-&lt;br /&gt;
| 20000001&lt;br /&gt;
| [[Super Mario 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 480p&lt;br /&gt;
|-&lt;br /&gt;
| 20000002&lt;br /&gt;
| [[Super Mario 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 21000001&lt;br /&gt;
| [[Wave Race 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 480p&lt;br /&gt;
|-&lt;br /&gt;
| 21000002&lt;br /&gt;
| [[Wave Race 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 22000001&lt;br /&gt;
| [[Dr. Mario 64]] Trailer&lt;br /&gt;
| e19f4bfac77c82d949565ffea33b2be6&lt;br /&gt;
| 13,374,918&lt;br /&gt;
| 12.7&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 23000001&lt;br /&gt;
| [[Star Fox 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 24000001&lt;br /&gt;
| Ocarina of Time Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 25000001&lt;br /&gt;
| [[Mario Kart 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 26000001&lt;br /&gt;
| [[F-Zero X]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=Titles&amp;diff=575</id>
		<title>Titles</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=Titles&amp;diff=575"/>
		<updated>2018-04-05T22:59:01Z</updated>

		<summary type="html">&lt;p&gt;Riley: /* Videos */ adding Dr Mario trailer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are titles downloadable via http://cds.idc.ique.com:16963/cds/download?content_id=xxx, where xxx is replaced with one of the following IDs:&lt;br /&gt;
&lt;br /&gt;
=== [[SKSA]] ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (KiB)&lt;br /&gt;
|-&lt;br /&gt;
| 1009&lt;br /&gt;
| D458B4189DE60947AAA44ABC5C4235A3&lt;br /&gt;
| 999,424&lt;br /&gt;
| 976&lt;br /&gt;
|-&lt;br /&gt;
| 1010&lt;br /&gt;
| D6E171FC693F61B0456B1A6C187717B7&lt;br /&gt;
| 229,376&lt;br /&gt;
| 224&lt;br /&gt;
|-&lt;br /&gt;
| 1011&lt;br /&gt;
| C233D6C6972DE294B6B59D99FFD48695&lt;br /&gt;
| 3,751,936&lt;br /&gt;
| 3,664&lt;br /&gt;
|-&lt;br /&gt;
| 1012&lt;br /&gt;
| C520AAAED20B4371B2ED7BB1063ABA7A&lt;br /&gt;
| 229,376&lt;br /&gt;
| 224&lt;br /&gt;
|-&lt;br /&gt;
| 1013&lt;br /&gt;
| 134B0AB9AFD980E11B5CA983CE597699&lt;br /&gt;
| 3,817,472&lt;br /&gt;
| 3728&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Apps ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! Name&lt;br /&gt;
! Have ticket?&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (KiB)&lt;br /&gt;
! Icon&lt;br /&gt;
! Title image&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.idc.ique.com:16963/cds/download?content_id=10000001 10000001]&lt;br /&gt;
| ? (older [[iQue Club]]?)&lt;br /&gt;
| N&lt;br /&gt;
| 99BF5E73BDE973481DF31DA37E0323C1&lt;br /&gt;
| 557,056&lt;br /&gt;
| 544&lt;br /&gt;
| [[File:10000001_thumb.png]]&lt;br /&gt;
| [[File:10000001_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.idc.ique.com:16963/cds/download?content_id=10000002 10000002]&lt;br /&gt;
| ? (older [[iQue Club]]?)&lt;br /&gt;
| N&lt;br /&gt;
| 998B226B8DB3C9EC33714311E5D4518F&lt;br /&gt;
| 557,056&lt;br /&gt;
| 544&lt;br /&gt;
| [[File:10000002_thumb.png]]&lt;br /&gt;
| [[File:10000002_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.idc.ique.com:16963/cds/download?content_id=10000003 10000003]&lt;br /&gt;
| [[iQue Club]]&lt;br /&gt;
| Y&lt;br /&gt;
| A872E4B02A6E878B0182078CD3CA7A54&lt;br /&gt;
| 573,440&lt;br /&gt;
| 560&lt;br /&gt;
| [[File:10000003_thumb.png]]&lt;br /&gt;
| [[File:10000003_title.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Games ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! Name&lt;br /&gt;
! Have ticket?&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (MiB)&lt;br /&gt;
! Icon&lt;br /&gt;
! Title image&lt;br /&gt;
|-&lt;br /&gt;
| 1101104&lt;br /&gt;
| [[Super Mario 64]]&lt;br /&gt;
| Y&lt;br /&gt;
| C459BA45F0B0071ECF6B62DA70F3D0A2&lt;br /&gt;
| 8,060,928&lt;br /&gt;
| 7.68&lt;br /&gt;
| [[File:1101104_thumb.png]]&lt;br /&gt;
| [[File:1101104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1102101&lt;br /&gt;
| [[Yoshi&amp;#039;s Story]]&lt;br /&gt;
| Y&lt;br /&gt;
| F41DD4A1699C271725540B9E9B06905B&lt;br /&gt;
| 16,023,552&lt;br /&gt;
| 15.2&lt;br /&gt;
| [[File:1102101_thumb.png]]&lt;br /&gt;
| [[File:1102101_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1201105&lt;br /&gt;
| [[Super Smash Bros. | Smash Bros]]&lt;br /&gt;
| Y&lt;br /&gt;
| 49844CB8FE9A45BAE2A20837BDD273B8&lt;br /&gt;
| 16,793,600&lt;br /&gt;
| 16.0&lt;br /&gt;
| [[File:1201105_thumb.png]]&lt;br /&gt;
| [[File:1201105_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2101104&lt;br /&gt;
| [[The Legend of Zelda: Ocarina of Time | TLoZ: OoT]]&lt;br /&gt;
| Y&lt;br /&gt;
| 5AD50BA0418FEDE5975D8C5A9479026A&lt;br /&gt;
| 29,868,032&lt;br /&gt;
| 28.4&lt;br /&gt;
| [[File:2101104_thumb.png]]&lt;br /&gt;
| [[File:2101104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2102104&lt;br /&gt;
| [[Paper Mario]]&lt;br /&gt;
| Y&lt;br /&gt;
| 0FA599E0C4572D01E0F27053A6C0E2C9&lt;br /&gt;
| 41,943,040&lt;br /&gt;
| 40.0&lt;br /&gt;
| [[File:2102104_thumb.png]]&lt;br /&gt;
| [[File:2102104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 21031??&lt;br /&gt;
| [[The Legend of Zelda: Majora&amp;#039;s Mask | TLoZ: MM (not on CDS)]]&lt;br /&gt;
| N&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 2104108&lt;br /&gt;
| [[Animal Crossing]]&lt;br /&gt;
| Y&lt;br /&gt;
| ABB27076A1CA5632CBF2442F2FD761A0&lt;br /&gt;
| 16,138,240&lt;br /&gt;
| 15.3&lt;br /&gt;
| [[File:2104108_thumb.png]]&lt;br /&gt;
| [[File:2104108_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2105103&lt;br /&gt;
| [[Custom Robo]]&lt;br /&gt;
| Y&lt;br /&gt;
| 6A9BD38BC13CC294484F296C13455720&lt;br /&gt;
| 16,793,600&lt;br /&gt;
| 16.0&lt;br /&gt;
| [[File:2105103_thumb.png]]&lt;br /&gt;
| [[File:2105103_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2106101&lt;br /&gt;
| [[&amp;quot;21061&amp;quot; | ?]]&lt;br /&gt;
| N&lt;br /&gt;
| 627DF063F2C7363B62104AF8136D1398&lt;br /&gt;
| 29,868,032&lt;br /&gt;
| 28.4&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 4101104&lt;br /&gt;
| [[Star Fox 64]] (v4)&lt;br /&gt;
| N&lt;br /&gt;
| A35F74BBD3402BDDD5D9DE80B2DFE8D0&lt;br /&gt;
| 11,829,248&lt;br /&gt;
| 11.2&lt;br /&gt;
| [[File:4101104_thumb.png]]&lt;br /&gt;
| [[File:4101104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4101105&lt;br /&gt;
| [[Star Fox 64]] (v5)&lt;br /&gt;
| Y&lt;br /&gt;
| 1DAF559E7FB63E2066C7CA8358B83EE9&lt;br /&gt;
| 11,829,248&lt;br /&gt;
| 11.2&lt;br /&gt;
| [[File:4101105_thumb.png]]&lt;br /&gt;
| [[File:4101105_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4102103&lt;br /&gt;
| [[Sin and Punishment: Successor of the Earth | Sin &amp;amp; Punishment]]&lt;br /&gt;
| Y&lt;br /&gt;
| CA2F78F45D8DC723C09A3305999C221F&lt;br /&gt;
| 33,636,352&lt;br /&gt;
| 32.0&lt;br /&gt;
| [[File:4102103_thumb.png]]&lt;br /&gt;
| [[File:4102103_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5101104&lt;br /&gt;
| [[Wave Race 64]]&lt;br /&gt;
| Y&lt;br /&gt;
| BFFF6C33FB58657D7EA4479C10F92C26&lt;br /&gt;
| 8,159,232&lt;br /&gt;
| 7.78&lt;br /&gt;
| [[File:5101104_thumb.png]]&lt;br /&gt;
| [[File:5101104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5102108&lt;br /&gt;
| [[Excitebike 64 | Excitebike]]&lt;br /&gt;
| Y&lt;br /&gt;
| 5ADBA1EF5CFB3B5368D92CECFCCF3836&lt;br /&gt;
| 16,072,704&lt;br /&gt;
| 15.3&lt;br /&gt;
| [[File:5102108_thumb.png]]&lt;br /&gt;
| [[File:5102108_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5201104&lt;br /&gt;
| [[Mario Kart 64]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| 9895E8288F822FEE67D4D19FD6BB2CAA&lt;br /&gt;
| 12,533,760&lt;br /&gt;
| 11.9&lt;br /&gt;
| [[File:5201104_thumb.png]]&lt;br /&gt;
| [[File:5201104_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5201105&lt;br /&gt;
| [[Mario Kart 64]] (v5)&lt;br /&gt;
| Y&lt;br /&gt;
| 539F1235E78AA9E01DEDEE13E9024DAA&lt;br /&gt;
| 12,533,760&lt;br /&gt;
| 11.9&lt;br /&gt;
| [[File:5201105_thumb.png]]&lt;br /&gt;
| [[File:5201105_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5202103&lt;br /&gt;
| [[F-Zero X]]&lt;br /&gt;
| Y&lt;br /&gt;
| F8AEAABEBCA1B0D228A5FE3C77740381&lt;br /&gt;
| 16,334,848&lt;br /&gt;
| 15.5&lt;br /&gt;
| [[File:5202103_thumb.png]]&lt;br /&gt;
| [[File:5202103_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 6101104&lt;br /&gt;
| [[Dr. Mario 64 | Dr. Mario]]&lt;br /&gt;
| Y&lt;br /&gt;
| 514DCF24C3B6E777157D3F19FEBB253F&lt;br /&gt;
| 3,358,720&lt;br /&gt;
| 3.20&lt;br /&gt;
| [[File:6101104_thumb.png]]&lt;br /&gt;
| [[File:6101104_title.png]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game Manuals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! Name&lt;br /&gt;
! Have ticket?&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (KiB)&lt;br /&gt;
! Icon&lt;br /&gt;
! Title image&lt;br /&gt;
|-&lt;br /&gt;
| 1101902&lt;br /&gt;
| [[Super Mario 64]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 593DC3BDCE513B112784B20E2DD46347&lt;br /&gt;
| 212,992&lt;br /&gt;
| 208&lt;br /&gt;
| [[File:1101902_thumb.png]]&lt;br /&gt;
| [[File:1101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1101906&lt;br /&gt;
| [[Super Mario 64]] (v6)&lt;br /&gt;
| Y&lt;br /&gt;
| 216AD927DD016582EFD548AC0B71D97F&lt;br /&gt;
| 409,600 &lt;br /&gt;
| 400&lt;br /&gt;
| [[File:1101906_thumb.png]]&lt;br /&gt;
| [[File:1101906_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1102902&lt;br /&gt;
| [[Yoshi&amp;#039;s Story]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 4CD568FA411F66FB251EB677F07E621B&lt;br /&gt;
| 196,608&lt;br /&gt;
| 192&lt;br /&gt;
| [[File:1102902_thumb.png]]&lt;br /&gt;
| [[File:1102902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1102904&lt;br /&gt;
| [[Yoshi&amp;#039;s Story]] (v4)&lt;br /&gt;
| N&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:1102902_thumb.png]]&lt;br /&gt;
| [[File:1102902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1102906&lt;br /&gt;
| [[Yoshi&amp;#039;s Story]] (v6)&lt;br /&gt;
| Y&lt;br /&gt;
| 9AFFE75A1208BE881CB959F27AF51EE5&lt;br /&gt;
| 425,984&lt;br /&gt;
| 416&lt;br /&gt;
| [[File:1102906_thumb.png]]&lt;br /&gt;
| [[File:1102906_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 1201901&lt;br /&gt;
| [[Super Smash Bros. | Smash Bros]]&lt;br /&gt;
| Y&lt;br /&gt;
| C9BDE191187EEC7CC8C9B3E693427443&lt;br /&gt;
| 294,912&lt;br /&gt;
| 288&lt;br /&gt;
| [[File:1201901_thumb.png]]&lt;br /&gt;
| [[File:1201901_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2101902&lt;br /&gt;
| [[The Legend of Zelda: Ocarina of Time | TLoZ: OoT]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| A5B9C4286D63A47311CDAE8CA52CC849&lt;br /&gt;
| 278,528 &lt;br /&gt;
| 272&lt;br /&gt;
| [[File:2101902_thumb.png]]&lt;br /&gt;
| [[File:2101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2101904&lt;br /&gt;
| [[The Legend of Zelda: Ocarina of Time | TLoZ: OoT]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| 262992B226C0C70A96613DFB4760804D&lt;br /&gt;
| 425,984&lt;br /&gt;
| 416&lt;br /&gt;
| [[File:2101904_thumb.png]]&lt;br /&gt;
| [[File:2101904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2102902&lt;br /&gt;
| [[Paper Mario]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 7372A3D86180167DFACCCB7BAC12CAD7&lt;br /&gt;
| 376,832&lt;br /&gt;
| 368&lt;br /&gt;
| [[File:2102902_thumb.png]]&lt;br /&gt;
| [[File:2102902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 2102904&lt;br /&gt;
| [[Paper Mario]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| 178C6727790B36502E1F720EF1B02056&lt;br /&gt;
| 376,832&lt;br /&gt;
| 368&lt;br /&gt;
| [[File:2102904_thumb.png]]&lt;br /&gt;
| [[File:2102904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4101902&lt;br /&gt;
| [[Star Fox 64]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 8741C70E7EC966235E5CE15104FF6C48&lt;br /&gt;
| 163,840&lt;br /&gt;
| 160&lt;br /&gt;
| [[File:4101902_thumb.png]]&lt;br /&gt;
| [[File:4101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4101904&lt;br /&gt;
| [[Star Fox 64]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:4101904_thumb.png]]&lt;br /&gt;
| [[File:4101904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 4102901&lt;br /&gt;
| [[Sin and Punishment: Successor of the Earth | Sin &amp;amp; Punishment]]&lt;br /&gt;
| Y&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:4102901_thumb.png]]&lt;br /&gt;
| [[File:4102901_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5101902&lt;br /&gt;
| [[Wave Race 64]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 6684F2014489AFD87D40753CC3D0D44F&lt;br /&gt;
| 311,296&lt;br /&gt;
| 304&lt;br /&gt;
| [[File:5101902_thumb.png]]&lt;br /&gt;
| [[File:5101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5101904&lt;br /&gt;
| [[Wave Race 64]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:5101904_thumb.png]]&lt;br /&gt;
| [[File:5101904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5102902&lt;br /&gt;
| [[Excitebike 64 | Excitebike]]&lt;br /&gt;
| Y&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [[File:5102902_thumb.png]]&lt;br /&gt;
| [[File:5102902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5201902&lt;br /&gt;
| [[Mario Kart 64]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| AA2D45CED10179F32B74375EF8384A61&lt;br /&gt;
| 245,760&lt;br /&gt;
| 240&lt;br /&gt;
| [[File:5201902_thumb.png]]&lt;br /&gt;
| [[File:5201902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5201906&lt;br /&gt;
| [[Mario Kart 64]] (v6)&lt;br /&gt;
| Y&lt;br /&gt;
| 072F79B24AF22B6363094630A9ED3C3D&lt;br /&gt;
| 425,984&lt;br /&gt;
| 416&lt;br /&gt;
| [[File:5201906_thumb.png]]&lt;br /&gt;
| [[File:5201906_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5202902&lt;br /&gt;
| [[F-Zero X]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 0ED89CBDCD2F96C5C08B70EAAAFBC613&lt;br /&gt;
| 180,224&lt;br /&gt;
| 176&lt;br /&gt;
| [[File:5202902_thumb.png]]&lt;br /&gt;
| [[File:5202902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 5202904&lt;br /&gt;
| [[F-Zero X]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| B2C723A6F625FB99F08DB09FC4F9DC60&lt;br /&gt;
| 294,912&lt;br /&gt;
| 288&lt;br /&gt;
| [[File:5202904_thumb.png]]&lt;br /&gt;
| [[File:5202904_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 6101902&lt;br /&gt;
| [[Dr. Mario 64 | Dr. Mario]] (v2)&lt;br /&gt;
| N&lt;br /&gt;
| 0B98ABAF20F473D4BEE8E22F18920748&lt;br /&gt;
| 294,912&lt;br /&gt;
| 288&lt;br /&gt;
| [[File:6101902_thumb.png]]&lt;br /&gt;
| [[File:6101902_title.png]]&lt;br /&gt;
|-&lt;br /&gt;
| 6101904&lt;br /&gt;
| [[Dr. Mario 64 | Dr. Mario]] (v4)&lt;br /&gt;
| Y&lt;br /&gt;
| E7D1148BE9AC6149A35F0C22DDFE234E&lt;br /&gt;
| 393,216 &lt;br /&gt;
| 384&lt;br /&gt;
| [[File:6101904_thumb.png]]&lt;br /&gt;
| [[File:6101904_title.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Videos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content ID&lt;br /&gt;
! Name&lt;br /&gt;
! MD5&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
! Size (MiB)&lt;br /&gt;
! Format&lt;br /&gt;
! Resolution&lt;br /&gt;
|-&lt;br /&gt;
| 20000001&lt;br /&gt;
| [[Super Mario 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 480p&lt;br /&gt;
|-&lt;br /&gt;
| 20000002&lt;br /&gt;
| [[Super Mario 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 21000001&lt;br /&gt;
| [[Wave Race 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 480p&lt;br /&gt;
|-&lt;br /&gt;
| 21000002&lt;br /&gt;
| [[Wave Race 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 22000001&lt;br /&gt;
| [[Dr. Mario 64]] Trailer&lt;br /&gt;
| e19f4bfac77c82d949565ffea33b2be6&lt;br /&gt;
| 13,374,918&lt;br /&gt;
| 12.7&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
| -&lt;br /&gt;
| 23000001&lt;br /&gt;
| [[Star Fox 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 24000001&lt;br /&gt;
| Ocarina of Time Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 25000001&lt;br /&gt;
| [[Mario Kart 64]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
|-&lt;br /&gt;
| 26000001&lt;br /&gt;
| [[F-Zero X]] Trailer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| AVI&lt;br /&gt;
| 240p&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player&amp;diff=162</id>
		<title>IQue Player</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=IQue_Player&amp;diff=162"/>
		<updated>2018-03-26T10:38:19Z</updated>

		<summary type="html">&lt;p&gt;Riley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:iQue Player}}&lt;br /&gt;
[[File:iQue Player.png|thumb|An &amp;#039;&amp;#039;&amp;#039;iQue Player&amp;#039;&amp;#039;&amp;#039;.]]&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;iQue Player&amp;#039;&amp;#039;&amp;#039; (Chinese: 神游机, lit. &amp;quot;Divine gaming machine&amp;quot;) is a game console created by iQue and BroadOn (formerly Routefree, later iGware, now Acer Cloud) in partnership with Nintendo, only released in China in late 2003. iQue company was co-founded by engineer [https://en.wikipedia.org/wiki/Wei_Yen Dr. Wei Yen], an USA-CHN scientist mainly involved in the development of the N64 GFX chip &amp;quot;Reality Engine&amp;quot;; he is also the founder of ArtX, a company that was commissioned by Nintendo to produce the GameCube GPU named &amp;quot;Flipper&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The reason for this union was dictated by the fact that, since 2000, the Chinese market &amp;quot;suffered&amp;quot; from a [https://en.wikipedia.org/wiki/Video_gaming_in_China#Changes_to_video_game_ban_in_China ban on gaming consoles] because they were considered harmful to the psyche of children (the ban ceased in 2015); Nintendo needed to circumvent the problem and to be able to insert its consoles in the vast market of China ([https://www.thegamesmachine.it/speciali/72045/time-machine-online-nintendo-cina-ique/ here it is a plausible explanation] on how it seems to have done). The opportunity came with iQue products, of which the &amp;quot;i Que Player&amp;quot; represents the progenitor and corresponds to the Chinese version of the Nintendo 64 (there are also iQue GBA, GBA SP, GB Micro, iQue DS, DS Lite, the iQue 3DS)!&lt;br /&gt;
&lt;br /&gt;
This console is not a normal N64 but a &amp;quot;compressed&amp;quot; version of it in a single chip: based on the Nintendo 64, the iQue Player adds features like [[iQue Card|removable NAND flash]] memory, PC connectivity (via USB), slightly better performance, and 14 different [[games]] translated into Simplified Chinese.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
	<entry>
		<id>http://www.iquebrew.org/index.php?title=IQue_Player&amp;diff=123</id>
		<title>IQue Player</title>
		<link rel="alternate" type="text/html" href="http://www.iquebrew.org/index.php?title=IQue_Player&amp;diff=123"/>
		<updated>2018-03-25T11:43:54Z</updated>

		<summary type="html">&lt;p&gt;Riley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;#039;&amp;#039;&amp;#039;iQue Player&amp;#039;&amp;#039;&amp;#039; is a game console created by iQue and BroadOn (formerly Routefree, later iGware, now Acer Cloud) in partnership with Nintendo, released only in China. Based on the N64, it adds features like removable [[NAND]] flash memory, PC connectivity (via USB), slightly better performance &amp;amp; exclusive Chinese-translated games.&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Riley</name></author>
	</entry>
</feed>