<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vague+Rant</id>
	<title>3dbrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vague+Rant"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/Vague_Rant"/>
	<updated>2026-04-20T22:03:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=GPU/External_Registers&amp;diff=22515</id>
		<title>GPU/External Registers</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=GPU/External_Registers&amp;diff=22515"/>
		<updated>2024-03-11T12:19:44Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: /* LCD Source Framebuffer Setup */ Correct typo in mathematical calculation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the address range accessible from the ARM11, used to configure the basic GPU functionality. For information about the internal registers used for 3D rendering, see [[GPU/Internal Registers]].&lt;br /&gt;
&lt;br /&gt;
== Map ==&lt;br /&gt;
Address mappings for the external registers. GSPGPU:WriteHWRegs takes these addresses relative to 0x1EB00000. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! User VA&lt;br /&gt;
! PA&lt;br /&gt;
! Length&lt;br /&gt;
! Name&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00000&lt;br /&gt;
| 0x10400000&lt;br /&gt;
| 4&lt;br /&gt;
| Hardware ID&lt;br /&gt;
| Bit2: new model&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00004&lt;br /&gt;
| 0x10400004&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00010&lt;br /&gt;
| 0x10400010&lt;br /&gt;
| 16&lt;br /&gt;
| [[#Memory Fill|Memory Fill1]] &amp;quot;PSC0&amp;quot;&lt;br /&gt;
| GX command 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00020&lt;br /&gt;
| 0x10400020&lt;br /&gt;
| 16&lt;br /&gt;
| [[#Memory Fill|Memory Fill2]] &amp;quot;PSC1&amp;quot;&lt;br /&gt;
| GX command 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00030&lt;br /&gt;
| 0x10400030&lt;br /&gt;
| 4&lt;br /&gt;
| VRAM bank control&lt;br /&gt;
| Bits 8-11 = bank[i] disabled; other bits are unused.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00034&lt;br /&gt;
| 0x10400034&lt;br /&gt;
| 4&lt;br /&gt;
| GPU Busy&lt;br /&gt;
| Bit26 = PSC0, bit27 = PSC1, Bit30 = PPF, Bit31 = P3D&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00050&lt;br /&gt;
| 0x10400050&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
| Writes 0x22221200 on GPU init.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00054&lt;br /&gt;
| 0x10400054&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
| Writes 0xFF2 on GPU init.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF000C0&lt;br /&gt;
| 0x104000C0&lt;br /&gt;
| 4&lt;br /&gt;
| Backlight control&lt;br /&gt;
| Writes 0x0 to allow backlights to turn off, 0x20000000 to force them always on.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00400&lt;br /&gt;
| 0x10400400&lt;br /&gt;
| 0x100&lt;br /&gt;
| [[#LCD Source Framebuffer Setup|Framebuffer Setup]] &amp;quot;PDC0&amp;quot; (top screen)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00500&lt;br /&gt;
| 0x10400500&lt;br /&gt;
| 0x100&lt;br /&gt;
| [[#LCD Source Framebuffer Setup|Framebuffer Setup]] &amp;quot;PDC1&amp;quot; (bottom)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C00&lt;br /&gt;
| 0x10400C00&lt;br /&gt;
| ?&lt;br /&gt;
| [[#Transfer_Engine|Transfer Engine]] &amp;quot;DMA&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| 0x1EF01000/0x10401000 - 0x1EF01C00/0x10401C00 maps to [[GPU/Internal_Registers|GPU internal registers]]. These registers are usually not read/written directly here, but are written using the command list interface below (corresponding to the GPUREG_CMDBUF_* internal registers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF01000&lt;br /&gt;
| 0x10401000&lt;br /&gt;
| 0x4&lt;br /&gt;
| ?&lt;br /&gt;
| Writes 0 on GPU init and before the Command List is used&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF01080&lt;br /&gt;
| 0x10401080&lt;br /&gt;
| 0x4&lt;br /&gt;
| ?&lt;br /&gt;
| Writes 0x12345678 on GPU init.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF010C0&lt;br /&gt;
| 0x104010C0&lt;br /&gt;
| 0x4&lt;br /&gt;
| ?&lt;br /&gt;
| Writes 0xFFFFFFF0 on GPU init.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF010D0&lt;br /&gt;
| 0x104010D0&lt;br /&gt;
| 0x4&lt;br /&gt;
| ?&lt;br /&gt;
| Writes 1 on GPU init.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF014??&lt;br /&gt;
| 0x104014??&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;quot;PPF&amp;quot; ?&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF018E0&lt;br /&gt;
| 0x104018E0&lt;br /&gt;
| 0x14&lt;br /&gt;
| [[#Command_List|Command List]] &amp;quot;P3D&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory Fill ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  User VA&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF000X0&lt;br /&gt;
| Buffer start physaddr &amp;gt;&amp;gt; 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF000X4&lt;br /&gt;
| Buffer end physaddr &amp;gt;&amp;gt; 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF000X8&lt;br /&gt;
| Fill value&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF000XC&lt;br /&gt;
| Control. bit0: start/busy, bit1: finished, bit8-9: fill-width (0=16bit, 1=3=24bit, 2=32bit)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Memory fills are used to initialize buffers in memory with a given value, similar to memset. A memory fill is triggered by setting bit0 in the control register. Doing so aborts any running memory fills on that filling unit. Upon completion, the hardware unsets bit0 and sets bit1 and fires interrupt PSC0.&lt;br /&gt;
&lt;br /&gt;
These registers are used by [[GSP Shared Memory#GX SetMemoryFill|GX SetMemoryFill]].&lt;br /&gt;
&lt;br /&gt;
== LCD Source Framebuffer Setup ==&lt;br /&gt;
&lt;br /&gt;
All of these registers must be accessed with 32bit operations regardless of the registers&#039; actual bit size.&lt;br /&gt;
&lt;br /&gt;
The naming of these parameters reflects the physical characteristics of the displays, and not the way the 3DS is normally held.&lt;br /&gt;
&lt;br /&gt;
To make sense of these values, the 3DS must be held in a way, so that the bottom screen is in the left hand, and the top screen is in the right hand, and that way the first pixel will be in the top-left corner, as it should be. If the 3DS is held normally, the first pixel is in the bottom-left corner.&lt;br /&gt;
&lt;br /&gt;
All pixel and scanline timing values are 12bits, unless noted. This also applies to those fields where two u16 are combined into one register. Each u16 field is only 12bits in size. timin&lt;br /&gt;
&lt;br /&gt;
The horizontal timing parameter order is as follows (values may overflow through HTotal register value):&lt;br /&gt;
 0x10 &amp;lt; 0x14 &amp;lt;= 0x60.LO &amp;lt;= 0x04 &amp;lt;= 0x60.HI &amp;lt;= 0x08 &amp;lt;= 0x0C &amp;lt;= 0x10&lt;br /&gt;
 0x18 &amp;lt;= 0x60.LO&lt;br /&gt;
&lt;br /&gt;
Timing starts from HCount == 0, then each absolute value in the beforementioned register chain triggers when HCount == register, latching the primitive display controller into a new mode.&lt;br /&gt;
There is an inherent latch order, where if two simultenaous events occur, one event wins over another.&lt;br /&gt;
&lt;br /&gt;
 Known latched modes (in order):&lt;br /&gt;
 - HSync (triggers a line to the LCD to move to the next line)&lt;br /&gt;
 - Back porch (area between HSync and border being displayed, no pixels pushed, min 16 pixel clocks, otherwise the screen gets glitchy)&lt;br /&gt;
 - Left border start (no image data is being displayed, just a configurable solid color)&lt;br /&gt;
 - Image start (pixel data is being DMA&#039;d from video memory or main RAM)&lt;br /&gt;
 - Right border start/Image end (border color is being displayed after the main image)&lt;br /&gt;
 - Unknown synchronization (supposed to be probably right border end, but this mode seems to be broken or not do anything)&lt;br /&gt;
 - Front porch (no pixels pushed, 68 clock min, otherwise the screen doesn&#039;t sync properly, and really glitches out)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Name&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| HTotal&lt;br /&gt;
| The total width of a timing scanline. In other words, this is the horizontal refresh clock divider value.&lt;br /&gt;
&lt;br /&gt;
HClock = PClock / (HTotal + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| HStart&lt;br /&gt;
| Determines when the image is going to be displayed in the visible region (register 0x60).&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| HBR&lt;br /&gt;
| Right border start(?). Does nothing.&lt;br /&gt;
&lt;br /&gt;
While this register seems to have no impact on the image whatsoever, it still has to be set to a valid value.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| HPF&lt;br /&gt;
| Front porch. The image is blanked during this period, and no pixels are pushed to the LCD.&lt;br /&gt;
&lt;br /&gt;
Unknown why, but a single dot of red is displayed before entering this mode.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| HSync&lt;br /&gt;
| Triggers a HSync pulse.&lt;br /&gt;
&lt;br /&gt;
Based on behavior, this needs to last at least a pixel clock for the LCD to register the sync.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| HPB&lt;br /&gt;
| Back porch? Has to be at least one bigger than HSync, otherwise HSync never triggers.&lt;br /&gt;
&lt;br /&gt;
The display is blank, and the LCD displays nothing in this period (doesn&#039;t push pixels).&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| HBL&lt;br /&gt;
| Left border trigger treshold. Enables pushing pixels to the display.&lt;br /&gt;
&lt;br /&gt;
If this value is smaller than the back porch, then the back porch period will be zero, and the border will be immediately displayed upon entering the back porch period.&lt;br /&gt;
&lt;br /&gt;
Can be lower than HSync, as the back porch is what takes the controller out of HSync.&lt;br /&gt;
&lt;br /&gt;
Must be &amp;lt;= HDisp start (reg 0x60 low u16), otherwise no pixels will be pushed due to a glitched state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| H Interrupt timing&lt;br /&gt;
| Made up from two u16 values, PDC interrupt line is asserted when HCount == low u16, and most likely deasserted when HCount == high u16.&lt;br /&gt;
&lt;br /&gt;
There seems to be some limitations though:&lt;br /&gt;
* low u16 must be smaller than high u16&lt;br /&gt;
* if low u16 is less than HTotal then high u16 must also be smaller than HTotal&lt;br /&gt;
* setting low u16 to &amp;gt;= HTotal disables the interrupt ever firing&lt;br /&gt;
&lt;br /&gt;
This is configured by gsp in a way so that low u16 equals to HTotal, meaning the HSync interrupt will never fire.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| low u16: ???&lt;br /&gt;
high u16: ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| VTotal&lt;br /&gt;
| Total height of the timing window. Can be interpreted as the vertical clock divider.&lt;br /&gt;
&lt;br /&gt;
VClock = PClock / (HTotal + 1) / (VTotal + 1)&lt;br /&gt;
&lt;br /&gt;
Setting this to 494 lowers framerate to about 50.040660858 Hz ((268111856 / 24) / (450 + 1) / (494 + 1)).&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| Seems to determine the vertical blanking interval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Setting this to lower than &amp;lt;code&amp;gt;VTotal - VDisp&amp;lt;/code&amp;gt; will cut off the top &amp;lt;code&amp;gt;VTotal - VDisp - thisvalue&amp;lt;/code&amp;gt; lines.&lt;br /&gt;
&lt;br /&gt;
Setting this to higher than &amp;lt;code&amp;gt;VTotal - VDisp&amp;lt;/code&amp;gt; will make the image be pushed downwards with the overscan color visible.&lt;br /&gt;
&lt;br /&gt;
Setting this to higher than &amp;lt;code&amp;gt;HTotal&amp;lt;/code&amp;gt; will make the GPU skip vertical pixel data synchronization (hence filling the screen with the rest of the pixel data past the given screen framebuffer size). Also will skip &amp;lt;code&amp;gt;thisvalue + somevalue - HTotal&amp;lt;/code&amp;gt; lines into the &amp;quot;global&amp;quot; pixel buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| Total amount of vertical scanlines in the pixel buffer, must be bigger than *an unknown blanking-like value*. If this value is less than VDisp then the last two scanlines will be repeated interlaced until VDisp is reached.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| VDisp(?)&lt;br /&gt;
| Total amonut of vertical scanlines displayed (only for top screen it seems like). If this value is less than VTotal then the rest of the scanlines will not be updated on the screen, so those will slowly fade out. Must be bigger than *an unknown blanking-like value*, otherwise an underflow will happen.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| Vertical data offset(?)&lt;br /&gt;
| ??? Seems to offset the screen upwards if this value is high enough. If this value is higher or equal to *some value* (aka. if less than one scanline is displayed on the screen) then the screen will lose synchronization.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| V Interrupt timing&lt;br /&gt;
| Similar to H Interrupt timing (0x1C), except the comparison is done against VCount, the limitations are emposed on VTotal, and the interrupt that fires is VSync.&lt;br /&gt;
&lt;br /&gt;
One important note is that it seems like the VSync interrupt always fires at HCount == 0, and there doesn&#039;t seem to be a register to control this behavior.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ???&lt;br /&gt;
| similar functionality to 0x10&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ???&lt;br /&gt;
| bit0 seems to disable HSync, bit8 seems to disable VSync, rest of the bits aren&#039;t writable.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| Overscan filler color&lt;br /&gt;
| 24bits(? top 8bits ignored)&lt;br /&gt;
&lt;br /&gt;
When the visible region is being drawn, but the timing parameters are set up in a way that the framebuffer is smaller than the visible region, it will be filled by this color.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| HCount&lt;br /&gt;
| Horizontal &amp;quot;beam position&amp;quot; counter. Note that this value does not equal to the current pixel being drawn.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| VCount&lt;br /&gt;
| Vertical &amp;quot;beam position&amp;quot; counter. Note that the scanline being drawn isn&#039;t equal to this value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| ???&lt;br /&gt;
| low u16: Image width (including some offset?)&lt;br /&gt;
high u16: Image height??? (seems to be unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| HDisp&lt;br /&gt;
| low u16: Image start (border --&amp;gt; pixel data)&lt;br /&gt;
high u16: Image end (pixel data --&amp;gt; border)&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ???&lt;br /&gt;
| low u16: unknown&lt;br /&gt;
high u16: framebuffer total height (amount of scanlines blitted regardless of framebuffer height)&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| Framebuffer A first address&lt;br /&gt;
| For top screen, this is the left eye 3D framebuffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| Framebuffer A second address&lt;br /&gt;
| For top screen, this is the left eye 3D framebuffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| Framebuffer format and other settings&lt;br /&gt;
| See [[#Framebuffer_format|framebuffer format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| PDC control&lt;br /&gt;
| Bit 0: Enable display controller.&lt;br /&gt;
Bit 8: HBlank IRQ mask (0 = enabled).&lt;br /&gt;
Bit 9: VBlank IRQ mask (0 = enabled).&lt;br /&gt;
Bit 10: Error IRQ mask? (0 = enabled).&lt;br /&gt;
Bit 16: Output enable?&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| Framebuffer select and status&lt;br /&gt;
| Bit 0: Next framebuffer to display (after VBlank).&lt;br /&gt;
Bit 4: Currently displaying framebuffer?&lt;br /&gt;
Bit 8: Reset FIFO?&lt;br /&gt;
Bit 16: HBlank IRQ status/ack. Write 1 to aknowledge.&lt;br /&gt;
Bit 17: VBlank IRQ status/ack.&lt;br /&gt;
Bit 18: Error IRQ status/ack?&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| Color lookup table index select&lt;br /&gt;
| 8bits, write-only&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| Color lookup table indexed element&lt;br /&gt;
| Contains the value of the color lookup table indexed by the above register, 24bits, RGB8 (0x00BBGGRR)  &lt;br /&gt;
Accessing this register will increase the index register by one&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| Framebuffer stride&lt;br /&gt;
| 32bits (bottom 3bits ignored?)&lt;br /&gt;
&lt;br /&gt;
Distance in bytes between the start of two framebuffer rows (must be a multiple of 8).&lt;br /&gt;
&lt;br /&gt;
In other words, this can be interpreted as the amount to add to the framebuffer pointer after displaying a scanline.&lt;br /&gt;
&lt;br /&gt;
Setting this to zero will cause only the first line of the image to be displayed repeated on the entire display. With the HSync interrupt it&#039;s possible to &amp;quot;race the beam&amp;quot; to (ab)use this feature.&lt;br /&gt;
&lt;br /&gt;
Because of this simplicity, writing a negative value here VFlips the image, although that requires the framebuffer pointer register to be set to the start of the last scanline, instead of at the start of the framebuffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| Framebuffer B first address&lt;br /&gt;
| For top screen, this is the right eye 3D framebuffer. Unused for bottom screen in userland.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| Framebuffer B second address&lt;br /&gt;
| For top screen, this is the right eye 3D framebuffer. Unused for bottom screen in userland.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer format ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 2-0&lt;br /&gt;
| [[#Framebuffer_color_formats|Color format]]&lt;br /&gt;
|-&lt;br /&gt;
| 5-4&lt;br /&gt;
| Framebuffer scanline output mode (framebuffer interleave config)&lt;br /&gt;
&lt;br /&gt;
 0 - A  (output image as normal)&lt;br /&gt;
 1 - AA (output a single line twice, so framebuffer A is interleaved with itself)&lt;br /&gt;
 2 - AB (interleave framebuffer A and framebuffer B)&lt;br /&gt;
 3 - BA (same as above, but the line from framebuffer B is outputted first)&lt;br /&gt;
&lt;br /&gt;
0 is used by bottom screen at all times.&lt;br /&gt;
1 is used by the top screen in 2D mode.&lt;br /&gt;
2 is used by top screen in 3D mode.&lt;br /&gt;
3 goes unused in userland.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Scan doubling enable?* (used by top screen)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9-8&lt;br /&gt;
| DMA size&lt;br /&gt;
&lt;br /&gt;
 0 -  4 words (32 bytes)&lt;br /&gt;
 1 -  8 words (64 bytes)&lt;br /&gt;
 2 - 16 words (128 bytes)&lt;br /&gt;
 3 - ???&lt;br /&gt;
&lt;br /&gt;
FCRAM doesn&#039;t support DMA size 3, as it can only burst up to 16 words (128 bytes), and will show a black screen instead.&lt;br /&gt;
|-&lt;br /&gt;
| 31-16&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* The weird thing about scan doubling, is that it works different between the bottom and top LCD. On the bottom LCD, it doubles the number of outputted pixels (so the same pixel is outputted twice, effectively doing column doubling). However on the top screen, it does scanline doubling instead. Considering that the bottom screen&#039;s table doesn&#039;t work on the top screen, this could give a hint as to how the top screen receives the pixel data from the PDC.&lt;br /&gt;
On a 2DS, it seems to have no effect on the top part of the display, and on the bottom screen it just shifts the framebuffer to the right two pixels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GSP module only allows the LCD stereoscopy to be enabled when bit5=1 and bit6=0 here. When GSP module updates this register, GSP module will automatically disable the stereoscopy if those bits are not set for enabling stereoscopy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When both interlacing and scan doubling are disabled, the full resolution of the top screen (240x800) can be utilized if the PDC registers are updated to accomodate this higher resolution. GSP contains tables for this mode (gsp mode == 1). GSP automatically applies this mode if both bit5 and bit6 are cleared. This is also the default, and the only valid mode for the bottom screen in userland.&lt;br /&gt;
&lt;br /&gt;
If only AB interlacing is enabled, gsp detects this as a request to switch to 3D mode (gsp mode == 2), and enables the parallax barrier.&lt;br /&gt;
It&#039;s unknown how to control this, but some other PDC registers control if interlacing should be done by true interleaving (both framebuffers are treated as 240x400), or skipping lines (both framebuffers are treated as 240x800)&lt;br /&gt;
&lt;br /&gt;
If only scan doubling is enabled, gsp detects it as a request to switch back to 2D mode for the top screen (gsp mode == 0). This is also the default mode for the top screen.&lt;br /&gt;
&lt;br /&gt;
Both interlacing and scan doubling can&#039;t be enabled in usermode, but it works as expected in baremetal.&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer color formats ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| GL_RGBA8_OES&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| GL_RGB8_OES&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| GL_RGB565_OES&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| GL_RGB5_A1_OES&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| GL_RGBA4_OES&lt;br /&gt;
|}&lt;br /&gt;
Color components are laid out in reverse byte order, with the most significant bits used first (i.e. non-24-bit pixels are stored as a little-endian values). For instance, a raw data stream of two GL_RGB565_OES pixels looks like GGGBBBBB RRRRRGGG GGGBBBBB RRRRRGGG.&lt;br /&gt;
&lt;br /&gt;
Color formats 5, 6, and 7 are blocked by gsp, but they behave as pixel-doubled RGBA8 (not line doubling, but instead the same pixel is output twice) if used outside of userland.&lt;br /&gt;
&lt;br /&gt;
== Transfer Engine ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Register address&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C00&lt;br /&gt;
| Input physical address &amp;gt;&amp;gt; 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C04&lt;br /&gt;
| Output physical address &amp;gt;&amp;gt; 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C08&lt;br /&gt;
| DisplayTransfer output width (bits 0-15) and height (bits 16-31).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C0C&lt;br /&gt;
| DisplayTransfer input width and height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C10&lt;br /&gt;
| Transfer flags. (See below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C14&lt;br /&gt;
| GSP module writes value 0 here prior to writing to 0x1EF00C18, for cmd3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C18&lt;br /&gt;
|  Setting bit0 starts the transfer. Upon completion, bit0 is unset and bit8 is set.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C1C&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C20&lt;br /&gt;
| TextureCopy total amount of data to copy, in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C24&lt;br /&gt;
| TextureCopy input line width (bits 0-15) and gap (bits 16-31), in 16 byte units.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF00C28&lt;br /&gt;
| TextureCopy output line width and gap.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers are used by [[GSP_Shared_Memory|GX command]] 3 and 4. For cmd4, *0x1EF00C18 |= 1 is used instead of just writing value 1. The DisplayTransfer registers are only used if bit 3 of the flags is unset and ignored otherwise. The TextureCopy registers are likewise only used if bit 3 is set, and ignored otherwise.&lt;br /&gt;
&lt;br /&gt;
==== Flags Register - 0x1EF00C10 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| When set, the framebuffer data is flipped vertically.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| When set, the input framebuffer is treated as linear and converted to tiled in the output, converts tiled-&amp;gt;linear when unset.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| This bit is required when the output width is less than the input width for the hardware to properly crop the lines, otherwise the output will be mis-aligned.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Uses a TextureCopy mode transfer. See below for details.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Not writable&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Don&#039;t perform tiled-linear conversion. Incompatible with bit 1, so only tiled-tiled transfers can be done, not linear-linear.&lt;br /&gt;
|-&lt;br /&gt;
| 7-6&lt;br /&gt;
| Not writable&lt;br /&gt;
|-&lt;br /&gt;
| 10-8&lt;br /&gt;
| Input framebuffer color format, value0 and value1 are the same as the [[GPU Registers#Framebuffer_color_formats|LCD Source Framebuffer Formats]] (usually zero)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Not writable&lt;br /&gt;
|-&lt;br /&gt;
| 14-12&lt;br /&gt;
| Output framebuffer color format&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Not writable&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Use 32x32 block tiling mode, instead of the usual 8x8 one. Output dimensions must be multiples of 32, even if cropping with bit 2 set above.&lt;br /&gt;
|-&lt;br /&gt;
| 17-23&lt;br /&gt;
| Not writable&lt;br /&gt;
|-&lt;br /&gt;
| 24-25&lt;br /&gt;
| Scale down the input image using a box filter. 0 = No downscale, 1 = 2x1 downscale. 2 = 2x2 downscale, 3 = invalid&lt;br /&gt;
|-&lt;br /&gt;
| 31-26&lt;br /&gt;
| Not writable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TextureCopy ===&lt;br /&gt;
&lt;br /&gt;
When bit 3 of the control register is set, the hardware performs a TextureCopy-mode transfer. In this mode, all other bits of the control register (except for bit 2, which still needs to be set correctly) and the regular dimension registers are ignored, and no format conversions are done. Instead, it performs a raw data copy from the source to the destination, but with a configurable gap between lines. The total amount of bytes to copy is specified in the size register, and the hardware loops reading lines from the input and writing them to the output until this amount is copied. The &amp;quot;gap&amp;quot; specified in the input/output dimension register is the number of chunks to skip after each &amp;quot;width&amp;quot; chunks of the input/output, and is NOT counted towards the total size of the transfer.&lt;br /&gt;
&lt;br /&gt;
By correctly calculating the input and output gap sizes it is possible to use this functionality to copy arbitrary sub-rectangles between differently-sized framebuffers or textures, which is one of its main uses over a regular no-conversion DisplayTransfer. When copying tiled textures/framebuffers it&#039;s important to remember that the contents of a tile are laid out sequentially in memory, and so this should be taken into account when calculating the transfer parameters.&lt;br /&gt;
&lt;br /&gt;
Specifying invalid/junk values for the TextureCopy dimensions can result in the GPU hanging while attempting to process this TextureCopy.&lt;br /&gt;
&lt;br /&gt;
== Command List ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Register address&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF018E0&lt;br /&gt;
| Buffer size in bytes &amp;gt;&amp;gt; 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF018E8&lt;br /&gt;
| Buffer physical address &amp;gt;&amp;gt; 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF018F0&lt;br /&gt;
| Setting bit0 to 1 enables processing GPU command execution. Upon completion, bit0 seems to be reset to 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These 3 registers are used by [[GSP_Shared_Memory|GX command]] 1. This is used for [[GPU/Internal_Registers|GPU commands]].&lt;br /&gt;
&lt;br /&gt;
== Framebuffers ==&lt;br /&gt;
These LCD framebuffers normally contain the last rendered frames from the GPU. The framebuffers are drawn from left-to-right, instead of top-to-bottom.(Thus the beginning of the framebuffer is drawn starting at the left side of the screen)&lt;br /&gt;
&lt;br /&gt;
Both of the 3D screen left/right framebuffers are displayed regardless of the 3D slider&#039;s state, however when the 3D slider is set to &amp;quot;off&amp;quot; the 3D effect is disabled. Normally when the 3D slider&#039;s state is set to &amp;quot;off&amp;quot; the left/right framebuffer addresses are set to the same physical address. When the 3D effect is disabled and the left/right framebuffers are set to separate addresses, the LCD seems to alternate between displaying the left/right framebuffer each frame.&lt;br /&gt;
&lt;br /&gt;
==== Init Values from nngxInitialize for Top Screen ====&lt;br /&gt;
* 0x1EF00400 = 0x1C2&lt;br /&gt;
* 0x1EF00404 = 0xD1&lt;br /&gt;
* 0x1EF00408 = 0x1C1&lt;br /&gt;
* 0x1EF0040C = 0x1C1&lt;br /&gt;
* 0x1EF00410 = 0&lt;br /&gt;
* 0x1EF00414 = 0xCF&lt;br /&gt;
* 0x1EF00418 = 0xD1&lt;br /&gt;
* 0x1EF0041C = 0x1C501C1&lt;br /&gt;
* 0x1EF00420 = 0x10000&lt;br /&gt;
* 0x1EF00424 = 0x19D&lt;br /&gt;
* 0x1EF00428 = 2&lt;br /&gt;
* 0x1EF0042C = 0x1C2&lt;br /&gt;
* 0x1EF00430 = 0x1C2&lt;br /&gt;
* 0x1EF00434 = 0x1C2&lt;br /&gt;
* 0x1EF00438 = 1&lt;br /&gt;
* 0x1EF0043C = 2&lt;br /&gt;
* 0x1EF00440 = 0x1960192&lt;br /&gt;
* 0x1EF00444 = 0&lt;br /&gt;
* 0x1EF00448 = 0&lt;br /&gt;
* 0x1EF0045C = 0x19000F0&lt;br /&gt;
* 0x1EF00460 = 0x1c100d1&lt;br /&gt;
* 0x1EF00464 = 0x1920002&lt;br /&gt;
* 0x1EF00470 = 0x80340&lt;br /&gt;
* 0x1EF0049C = 0&lt;br /&gt;
&lt;br /&gt;
==== More Init Values from nngxInitialize for Top Screen ====&lt;br /&gt;
* 0x1EF00468 = 0x18300000, later changed by GSP module when updating state, framebuffer&lt;br /&gt;
* 0x1EF0046C = 0x18300000, later changed by GSP module when updating state, framebuffer&lt;br /&gt;
* 0x1EF00494 = 0x18300000&lt;br /&gt;
* 0x1EF00498 = 0x18300000&lt;br /&gt;
* 0x1EF00478 = 1, doesn&#039;t stay 1, read as 0&lt;br /&gt;
* 0x1EF00474 = 0x10501&lt;br /&gt;
&lt;br /&gt;
[[Category:GPU]]&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=User_talk:Yellows8&amp;diff=19668</id>
		<title>User talk:Yellows8</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=User_talk:Yellows8&amp;diff=19668"/>
		<updated>2017-02-18T13:05:22Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: /* Nintendo Channel demos */ Many of these were archived.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thanks for clearing that up about the free space on the &amp;quot;TWL&amp;quot;, what confused me about the name was how the dev unit handled ds games. You know how the 3ds&#039;s code name is CTR(we don&#039;t know what that stands for yet) and the ds&#039;s code name is NTR which mean Nitro. When a 3DS game is inserted, the dev menu says a &amp;quot;CTR CARD&amp;quot; is inserted, but when a DS game is inserted it says a &amp;quot;TWL CARD&amp;quot; is inserted instead of what I expected which would be &amp;quot;NTR CARD&amp;quot;. I still do not understand this. - 3dsguy&lt;br /&gt;
:DS=NTR, DSLite=USG (japanese for thin..), DSi=TWL(Twelve), DSiXL=UTL, 3DS=CTR... DS (on the 3DS) is usually associated with DSi.. --[[User:Elisherer|Elisherer]] 02:32, 19 October 2011 (CEST)&lt;br /&gt;
::3dsguy, that game you inserted was released *long* before DSi right?(also, sign your comments with the signature button) --[[User:Yellows8|Yellows8]] 04:02, 19 October 2011 (CEST)&lt;br /&gt;
:Elisherer thanks for clearing that up :).--[[User:3dsguy|3dsguy]] 09:46, 19 October 2011 (CEST)&lt;br /&gt;
::Yellows8, no that game was not, but just now i tryed it with a game released in 2006 and it still said &#039;TWL CARD&#039;, but what Elisherer said explained this.--[[User:3dsguy|3dsguy]] 09:46, 19 October 2011 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:DS   = NTR/Nitro&lt;br /&gt;
:DSi  = TWL/Twilight &lt;br /&gt;
:3DS = CTR/Horizon&lt;br /&gt;
:Wii   = RVL/Revolution&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Yellows8 - if you have DS/Nitro code running on a DSi system, can you escalate to DSi/TWL mode or load a TWL/DSi binary or similar. [[User:Jl12|Jl12]]&lt;br /&gt;
::No, that&#039;s impossible. When DSi launcher/sysmenu switches to DS-mode, launcher clears the MSB of a DSi register disabling access to the registers controlling what hw is enabled and the clock rate etc. Once those regs are disabled, it&#039;s impossible to re-enable them again without resetting the system via I2C etc.(Also, by the time any exploited title is running homebrew code, those regs are already disabled too.) --[[User:Yellows8|Yellows8]] 19:53, 7 November 2011 (CET)&lt;br /&gt;
: Is the NAND encrypted as it is on 3DS? Also, does DSi use DLP [for TWL games] at all? [[User:Jl12|Jl12]]&lt;br /&gt;
::Yes, DSi NAND is encrypted with AES-CTR. DSiWare uses download-play but the WMB/dlp binaries are DS-mode only.--[[User:Yellows8|Yellows8]] 06:27, 14 November 2011 (CET)&lt;br /&gt;
&lt;br /&gt;
@Yellows8 - I&#039;m sorry for asking this so late, but what does NUS stand for in this context &amp;quot;redistributing copyrighted content, in this case NUS content, is *not* allowed here.&amp;quot;. I do not understand why you deleted my page: [[Update Data|Update Data]]&lt;br /&gt;
:NUS = Nintendo Update Servers. Those archive(s) you linked to contained files you downloaded from NUS, all of which are copyrighted. Besides, mirroring NUS content without any decryption done at all is *completely* pointless. --[[User:Yellows8|Yellows8]] 16:41, 12 December 2011 (CET)&lt;br /&gt;
::So would it be better to provide update logs, so it can point people to which update data is from which version as on the NUS the individual update data for each title is not stored the same way for all titles, providing people with further reference, so they know what they are using. You may ask me what would they use them for, they are still not decrypted and therefore pointless. ATM knowing which version is which on the NUS *maybe* very important, but I can&#039;t tell you more until later.--[[User:3dsguy|3dsguy]] 01:19, 13 December 2011 (CET)&lt;br /&gt;
:::Yeah a list of titleIDs and versions would be fine. One could grab that info from [[Title_list]] diffs, but that&#039;s not the best way to handle this. I have lists of updated titles for each 3DS system update, but of course I never bothered to document which version was from what sysupdate beyond just adding them to the title list page.(obtained from their system update SOAP) --[[User:Yellows8|Yellows8]] 02:20, 13 December 2011 (CET)&lt;br /&gt;
&lt;br /&gt;
@Yellows8 - Thanks for your progress everyday, really. i have questions.. If feeling uneasy please tell me politely (and i will remove these).&lt;br /&gt;
* Would you need a tool that can use specified patterns to mark the decrypted binary (certainly it can not be perfect) ? Or have you find a disassembler so powerful that you don&#039;t need that a tool any more? please tell me. if that is useful, let me and my friend make that.&lt;br /&gt;
:The tool would have such ability in resolving the configuration file. Comment, Include, CmdID (with no params), CmdID (with specified params), CmdID (with no specified params). such as 80001000:0103:4,0102:4,Any:4. (ie this can mark 800010000102 out as a second type).&lt;br /&gt;
* Just curious. It has been a long time since neimod&#039;s latest update. Have you got a board from him, or you are only using the exploit (not with the board). If the board is helpful, is there any access to get/purchase one? (if no i think i should learn how to diy one then)&lt;br /&gt;
it seems to be a long time for you to do all the documentations by yourself. (Orz i forgot my suggestion) --[[User:Syphurith|Syphurith]] 02:35, 15 April 2013 (CEST)&lt;br /&gt;
:I don&#039;t have any 3DS ramhaxx, I use software savegame haxx of course. &amp;quot;is there any access to get/purchase one? (if no i think i should learn how to diy one then)&amp;quot; You should be asking neimod about that instead, but [https://secure.flickr.com/photos/neimod/6238747088/in/photostream the] [https://secure.flickr.com/photos/neimod/6212627980/in/photostream soldering] for 3DS ramhaxx would be *really* difficult. I&#039;m not sure what you mean regarding that tool either, are you referring to a tool which would locate the code for service commands in a binary? --[[User:Yellows8|Yellows8]] 03:10, 15 April 2013 (CEST)&lt;br /&gt;
::Thanks for reply. I will try to contact him for boards. About the tool --sniff--.&lt;br /&gt;
::* Cons: can not detect structures; may make mistake; need configuration file (can be made by writing the header code)&lt;br /&gt;
::* Pros: can visually color the matched patterns; can load unlimited size of file (result will be divided into segments of 1MB or other)&lt;br /&gt;
::It would not be too difficult to make. However may take one or two weeks. --[[User:Syphurith|Syphurith]] 03:49, 15 April 2013 (CEST)&lt;br /&gt;
:::I have no need for a tool which searches for service commandIDs, when I can just search for commandIDs etc in my text-editor for disassembled code. --[[User:Yellows8|Yellows8]] 04:04, 15 April 2013 (CEST)&lt;br /&gt;
::::Well thanks for reply. I removed the details above. I will left it undone. Have a good day.--[[User:Syphurith|Syphurith]] 04:21, 15 April 2013 (CEST)&lt;br /&gt;
I&#039;ve seen there are users without contributions flew in. There are even some guys cheating (or just making jokes) with your names.. What&#039;s your opinion about that? PS3Brew is blocking those without edits (daily). --[[User:Syphurith|Syphurith]] 17:03, 17 April 2013 (CEST)&lt;br /&gt;
:I don&#039;t care much about either,(neither of those fake accounts were used to edit anything at least) I&#039;m not an admin here though. --[[User:Yellows8|Yellows8]] 17:36, 17 April 2013 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hello Yellows8,&lt;br /&gt;
I have a question regarding the release of the hack. You guys said, that you won&#039;t release it, because it is very easy to patch. Now the new firmware was released and in fact the exploit was patched. So releasing it now wouldn&#039;t change anything, because Nintendo already patched it.&lt;br /&gt;
&lt;br /&gt;
But if you release it now, people could start develloping homebrew and when you guys find a new exploit for the new firmware, we would already have a good base of homebrew applications.&lt;br /&gt;
&lt;br /&gt;
So why still hiding it from the world?&lt;br /&gt;
&lt;br /&gt;
Best regards and thank you for your work&lt;br /&gt;
&lt;br /&gt;
elBirx&lt;br /&gt;
:&amp;quot;the exploit was patched&amp;quot; Only the code execution haxx was [[5.0.0-11|fixed]], the savegame haxx was not fixed. &amp;quot;But if you release it now, people could start develloping homebrew&amp;quot; No, currently it&#039;s &#039;&#039;&#039;only&#039;&#039;&#039; useful for reverse engineers. Almost everyone that wants that savegame haxx would have no use for it right now, since &amp;quot;it&#039;s &#039;&#039;&#039;only&#039;&#039;&#039; useful for reverse engineers&amp;quot;. --[[User:Yellows8|Yellows8]] 18:46, 21 April 2013 (CEST)&lt;br /&gt;
::So i do think only one that want to do Reverse engineering and do have skills in ARM disassembly can ask you for such a thing. Yellows8, what would i need to learn if i want to analyse those (taken ARM references in consideration)? --[[User:Syphurith|Syphurith]] 03:07, 22 April 2013 (CEST)&lt;br /&gt;
:::What are you referring to by &amp;quot;those&amp;quot;? --[[User:Yellows8|Yellows8]] 04:26, 22 April 2013 (CEST)&lt;br /&gt;
::::I&#039;m so sorry for my poor expression skill. If i want to analyse the ram or anything that you used as a material.. Exefs is ARM code so i think to check those (you can get using exploit/haxx) need arm knowledges. i mean, that is those service APIs. you did say you can check disassembled code. Even i don&#039;t know what is left to be done. --[[User:Syphurith|Syphurith]] 07:31, 22 April 2013 (CEST)&lt;br /&gt;
:::::&amp;quot;what would i need to learn...&amp;quot; You could learn to read/write ARM assembly, and learn reverse engineering. --[[User:Yellows8|Yellows8]] 07:38, 22 April 2013 (CEST)&lt;br /&gt;
::::::Thanks. Confirmed~ That&#039;s clear to me now. --[[User:Syphurith|Syphurith]] 11:53, 22 April 2013 (CEST)&lt;br /&gt;
&lt;br /&gt;
Eh. Yellows8, i got some n00b questions about the ARM execution.&lt;br /&gt;
&lt;br /&gt;
There is non-executable sections in the memory layout, but where did these &amp;quot;This can be executed&amp;quot; flags got initialized (I mean that is made of hardware circuits or bios or other software section)? If that is not changable, would all those ARM cores use the same non-execution flags settings(possibly no so we may change the core to keep that work?). Even more, can we sniffer the data app to core and change its execution length then inject.&lt;br /&gt;
&lt;br /&gt;
Also, is there any method to let the core execute those commands (that you detected) and use that to produce something you interested in?&lt;br /&gt;
:The ARM11 kernel [[Memory_layout#ARM11_User-land_memory_regions|initializes]] the MMU tables. &amp;quot;Also, is there any method to let the core execute those commands (that you detected) and use that to produce something you interested in?&amp;quot; By running code on a 3DS of course. --[[User:Yellows8|Yellows8]] 17:27, 17 June 2013 (CEST)&lt;br /&gt;
::Thanks. But still feeling strange of that strategy. I think at least the Home Menu may be able to re-map or deactive this mark.&lt;br /&gt;
::-snip- Sorry for being noob (i would try learning arm soon). Hope you good work.--[[User:Syphurith|Syphurith]] 02:46, 19 June 2013 (CEST)&lt;br /&gt;
&lt;br /&gt;
Home Menu starts application processes via [[NS]], terminating and &amp;quot;suspending&amp;quot; process execution(the process is still running with that, the application threads wait for a [[NS]] notification for resuming actual execution) is done via NS as well. The ARM11 kernel handles mapping the processes&#039; virtual memory for .text, .rodata, and .data. The ARM11 kernel handles terminating processes as well of course. The only process which has access to [[SVC|svcControlProcessMemory]] for mapping memory or changing memory permissions, is [[RO_Services|RO]] module, and of course that module will only map R-X .text pages for the signed [[CRO0|CRO]] .text. --[[User:Yellows8|Yellows8]] 03:16, 19 June 2013 (CEST)&lt;br /&gt;
:I can still remember ns/ro is also a title in title list. (if manually start that may fails/cause failure) if you launch a title with those commands manually, would it be exposed (in ram?)(, if so we may dump the firmware/modules)? MPS let multiple processes can share the same resources (with home menu?). or have we to modify the real memory externally? There are just thoughts, if interesting please think for a while; if not just tell me &amp;quot;NONE&amp;quot;.--[[User:Syphurith|Syphurith]] 05:17, 19 June 2013 (CEST)&lt;br /&gt;
:I saw you update the AES page recently. you can confirm some keyslots are with the same data, but how had you done that (by comparing the data, or just the same memory location)? Can you even fetch those keys to decrypt the CDN TMD key strings? if so that would be a potential way to go.. BTW you&#039;re disasm those in-memory content not the decrypted Romfs right?&lt;br /&gt;
:I do wonder if contents decrypted succussfully, shall we need any customed disassembler? --[[User:Syphurith|Syphurith]] 16:51, 26 June 2013 (CEST)&lt;br /&gt;
::&amp;quot;some keyslots are with the same data&amp;quot; I encrypted an all-zero block with each AES engine keyslot with CTR=0, and encrypted that data again with each keyslot with keyY=0. When the output block for the former is the same for multiple keyslots, those keyslots use the same keyX/keyY. When the latter output block is the same for multiple keyslots, those keyslots use the same keyX. &amp;quot;decrypt the CDN TMD key strings&amp;quot; TMDs have nothing to do with decrypting the ticket titlekey. [[RomFS]] does not contain code(besides [[CRO0]] for web browser), that&#039;s stored in [[ExeFS]]:/.code. There&#039;s no need to dump code from memory when one can just use the [[AES]] engine. --[[User:Yellows8|Yellows8]] 17:40, 26 June 2013 (CEST)&lt;br /&gt;
:::oh well. sorry for been n00b again. then have you ever found something that you can execute to decrypt those CDN data? i badly wanna try it.. ExeFS.. okey.. hope good work--[[User:Syphurith|Syphurith]] 08:04, 27 June 2013 (CEST)&lt;br /&gt;
:::-snip- --[[User:Syphurith|Syphurith]] 08:36, 27 June 2013 (CEST)&lt;br /&gt;
::::You do not &amp;quot;call&amp;quot; crypto functions here, this is a hardware [[AES]] engine with a hardware key-scrambler. &amp;quot;found something that you can execute to decrypt those CDN data&amp;quot; Not sure what you mean when we had system-version v4.5 total-control code exec haxx since December. --[[User:Yellows8|Yellows8]] 09:52, 27 June 2013 (CEST)&lt;br /&gt;
:::::I forgot that hours ago. sorry. I thought we would be able to feed those raw data we got from CDN, and let it decrypt and extract for us. then at least we may be able to find those differences in modules implemented between two nearby versions. Some just fix crash - stablility, and some would fix some vulnerables we may use, and some would indicates those internal logical process of the module&#039;s implementation. we can not always rely on those ROP or other black-box methods. when we get the opportunity to build a CFW or a special homebrew that would affect the original behaviours of the system, we may need to modify it right? also that should show us some interesting points if we have ones dedicated on analysing those. --[[User:Syphurith|Syphurith]] 14:51, 27 June 2013 (CEST)&lt;br /&gt;
::::::Total-control code exec haxx = access to the [[AES]] engine obviously. &amp;quot;build a &#039;CFW&#039;&amp;quot; That&#039;s not possible because of [[NCCH|RSA]], the only way around that would be to exploit software while the system is booting or exploit Home Menu. And patching the NCCH signature checks(from like savegame haxx with a game) is rather pointless, because you would have to re-patch *every* time you boot your 3DS(there&#039;s no need to run a regular homebrew application via NCCH this way either tbh). --[[User:Yellows8|Yellows8]] 16:06, 27 June 2013 (CEST)&lt;br /&gt;
:::::Thx. That&#039;s exactly how cfw works. (sorry i only have psp and 3ds) procfw on psp, have ipl flashed (psp has one special section inside its battery) can auto-patch the cfw code into the system while booting. But have no news for how those men repair customer&#039;s device i definitely have no clubs about the existence of similiar mechism. Besides, patching is not that easy, well. i know you have full access to AES engine, and i just want to know have you ever tried or thought of using contents from CDN and decrypt them and disassemble to seek something interesting. --[[User:Syphurith|Syphurith]] 05:31, 28 June 2013 (CEST)&lt;br /&gt;
::::::Using the AES engine is basically the only way to obtain cleartext NCCH for updated titles, without finalizing the install for titles.  That&#039;s obviously where stuff like the new [[6.0.0-11|savegame]] keyY info came from. --[[User:Yellows8|Yellows8]] 07:16, 28 June 2013 (CEST)&lt;br /&gt;
:::::Okey, good. you can take use of that (however still not related to exefs..) have a good day.&lt;br /&gt;
::There is ClCertA on CDN. Important keys are stored in hardware key-scrambler right? A.ClCertA&#039;s private key stored in hardware and there is api called with write access in the package. B.ClCertA&#039;s key stored in NAND or somewhere else so we can eventually grab that and setup a proxy to remote while replacing the original ninty ones to our own self-sign ones (Then we would be able to decode the data transfers between proxy to 3ds and proxy to remote). C.ClCertA.. The workers think their private key can never be leaked so no CRL and just stored in hardware with a package cheating their boss. Which one you think would be the best answer? BTW i do really think there is ones with R/W access to the hardware.. Hope you find new apis.--[[User:Syphurith|Syphurith]] 02:35, 4 July 2013 (CEST)&lt;br /&gt;
:::ClCertA contains the SSL client RSA cert/private-key, when one has that one can only access their servers(like with a PC) with that, *nothing* more. I&#039;m not sure why they store that data in a CFA seperate from SSL module, those two files stored in the ClCertA RomFS use additional encryption to begin with. &amp;quot;BTW i do really think there is ones with R/W access to the hardware&amp;quot; I&#039;m not sure what you mean by that. --[[User:Yellows8|Yellows8]] 03:24, 4 July 2013 (CEST)&lt;br /&gt;
::::-snip-&lt;br /&gt;
:::::I don&#039;t think you understand what &amp;quot;SSL client certificate authentication&amp;quot; is, you should google it etc. A fake server would require the SSL server private-key from the real server, which you can&#039;t obtain of course. The AES engine has *nothing* to do with this besides being used to decrypt those two files in that CFA RomFS. This CFA is a system title so it&#039;s obviously stored in NAND, but of course you can&#039;t change any NCCH data due to RSA signing of course(modifying ClCertA is pointless anyway). There&#039;s not much point changing the SSL client cert/private-key, each 3DS prior to that update would be using the old ClCertA, and system updates require that SSL client auth for SOAP(besides SOAP that stuff isn&#039;t really interesting tbh). SSL module is the only process which uses ClCertA. &amp;quot;... write/read which section of memory&amp;quot; I have no use for that. --[[User:Yellows8|Yellows8]] 17:30, 4 July 2013 (CEST)&lt;br /&gt;
::::::oh well thanks. So only SSL module then. Without the ability to modify the original data, even a tunnel proxy would not work properly..(what annoying the rsa signature is - maybe as me to you. i means, 3ds with replaced, child cert and key of a self-signed, connects to a proxy with self-signed cert and key; the proxy takes the original cert and key that of 3ds client, to connects to ninty CDN. the two connections are all connecting with proper key and cert, that client signed by server; but 3ds&#039;s original cert and key must be replaced by one signed by our proxy&#039;s server cert and key, as what ninty does with 3ds. cause inability to change the content, it is nothing now.)(maybe better quick head to learning disasm and someday to have a try) BTW haven&#039;t seen Jl12 for long, seeing someone impeach him for just taking $ away lol. (even i don&#039;t think about that before. oh no this is your page and i should not be short to you) --[[User:Syphurith|Syphurith]] 02:16, 5 July 2013 (CEST)&lt;br /&gt;
::::::So please let me say that. &amp;quot;Sorry&amp;quot;. also hope you find something today.&lt;br /&gt;
&lt;br /&gt;
===Spam attack===&lt;br /&gt;
I guess the simple captcha isn&#039;t enough, do you have an idea what to do? (i&#039;m asking you because you are the most active admin here).&amp;lt;br/&amp;gt;&lt;br /&gt;
I think we should adopt a method of registration and waiting for an admin to approve it. the recent changes page is spammed hard and a lot of google pages, I guess, are being created linking to those pages. --[[User:Elisherer|Elisherer]] 09:40, 31 May 2013 (CEST)&lt;br /&gt;
:Mha is the only one that can do anything about anti-spam, I can&#039;t do much about it myself. Mha said that he would work on this tomorrow. --[[User:Yellows8|Yellows8]] 22:19, 31 May 2013 (CEST)&lt;br /&gt;
::A. Stop registeration for several weeks (NOT GOOD).&lt;br /&gt;
::B. Ajax to load captcha (maybe reCAPTCHA?). Not well-made bots will have trouble loading the javascript code or lose the speed (there is ones with javascript but can not act so quickly)(MAYBE USEFUL). This method is widely used &#039;&#039;it may be not so useful&#039;&#039; (against latest tools).&lt;br /&gt;
::C. Use auto filter to auto check those suspicious content and block those users, given an access for those by accident closed guys to talk about their opinion. (I do wonder if the wiki admin backdoor provide you such a tool)(Hey Regex~) &lt;br /&gt;
::D.find their IP and block the IP section for a while.(Similiar as A) &lt;br /&gt;
::E. Use man-made Email to validate (I means, instead of the system writing mail to user to validate, let user write mails to admin or other trusted -- use SPAM filter)(NOT WELL PRATICAL, Haven&#039;t tested, SO..) &lt;br /&gt;
::F. Calls for someone can trust and give him only those block and delete power (DIFFICULT). Well just a little tries.. &lt;br /&gt;
::G. Try to update your wiki version first, i mean the version of this website framework. (MAYBE USEFUL? DOUBT..)&lt;br /&gt;
::If you tried the actions of blocking and the spam still flow in you need to update or call wiki program&#039;s supporters (may be exploit..) But i do wonder why they tried to attack here, a (script) guy (with latest tool)?(if so he should try to improve his skill first).&lt;br /&gt;
::Oh well, Recent changes. Guys have a good day (International Children&#039;s Day).--[[User:Syphurith|Syphurith]] 09:39, 1 June 2013 (CEST)&lt;br /&gt;
:We are able to mark those pages as spam but however no effects in deed if no one comes to remove those spam accounts. Well.--[[User:Syphurith|Syphurith]] 10:17, 17 June 2013 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Fundraiser===&lt;br /&gt;
Hello Yellows8,&lt;br /&gt;
I know you&#039;re not the one that is responsible for the chip decapping fundraiser, but I didn&#039;t manage to contact Jl12 via E-Mail (He&#039;s not responding). So, have you guys noticed that the donations hit the 2000$ last week? Will the decapping start anytime soon or do you need some more money for buying the 3DS itself?&lt;br /&gt;
Best regards&lt;br /&gt;
:Jl12 has had a broken 3DS for decapping before the fundraiser even started. And of course we noticed that, however since Jl12 is usually very busy it might be a while before he sends his 3DS for decapping. --[[User:Yellows8|Yellows8]] 00:26, 5 June 2013 (CEST)&lt;br /&gt;
Hi again,&lt;br /&gt;
anything regarding the chip decapping happened in the past week? Will the images be released to the public?&lt;br /&gt;
Best regards&lt;br /&gt;
:We still haven&#039;t heard anything from Jl12. --[[User:Yellows8|Yellows8]] 19:34, 15 June 2013 (CEST)&lt;br /&gt;
So Still no news from Jl12? Seems not seeing him for long.--[[User:Syphurith|Syphurith]] 02:35, 4 July 2013 (CEST)&lt;br /&gt;
&lt;br /&gt;
Hi Yellows8,&lt;br /&gt;
sorry to bother you again, but I would like to know, if you heard something from Jl12 since July. As far as I know [http://gbatemp.net/members/mercluke.109574/ mercluke] donated the remaining 300$ months ago. Has this money never arrived or is this whole thing nothing but a scam after all and Jl12 ran off with the money? This would be really disappointing for all donaters and a very sad end for a very promising project.&lt;br /&gt;
:&amp;quot;if you heard something from Jl12 since July&amp;quot; Nope, he&#039;s very busy. When we do hear anything from him he would presumably update the donate page anyway, so no need to ask here. --[[User:Yellows8|Yellows8]] 17:14, 5 November 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
http://n-dev.net/donate.php is gone.&lt;br /&gt;
&lt;br /&gt;
== I have tried to send you an email ==&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know if it will go through though. It is about help with dumping a 3DS kiosk demo, which is an earlier build than the final game. --[[User:Hiccup|Hiccup]] 16:15, 31 May 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
Look, I&#039;m sorry to bother you, but I was wondering, how would I get in contact with you? --[[User:MassExplosion213|MassExplosion213]] 06:20, 9 September 2015 (CEST)&lt;br /&gt;
:EFNet IRC is preferred. --[[User:Yellows8|Yellows8]] 06:24, 9 September 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
== The [[Games]] page ==&lt;br /&gt;
&lt;br /&gt;
Could you explain its purpose. Also, I think it needs to be remade, because it seems to be based around the idea that there should only be one row per game, but it doesn&#039;t take into account the existence of revisions and region-free games. --[[User:Hiccup|Hiccup]] ([[User talk:Hiccup|talk]]) 21:57, 4 January 2016 (CET)&lt;br /&gt;
:Not sure why a homebrew wiki really needs an official-games-list tbh, there&#039;s more complete list(s) elsewhere anyway. --[[User:Yellows8|Yellows8]] ([[User talk:Yellows8|talk]]) 23:07, 4 January 2016 (CET)&lt;br /&gt;
::Do you think [[Title_list/eShop_Titles]] is needed? If you do, I will continue to add titles to it. --[[User:Hiccup|Hiccup]] ([[User talk:Hiccup|talk]]) 14:59, 6 January 2016 (CET)&lt;br /&gt;
:::Likewise for that page, there&#039;s much more complete list(s) elsewhere. --[[User:Yellows8|Yellows8]] ([[User talk:Yellows8|talk]]) 15:44, 6 January 2016 (CET)&lt;br /&gt;
::::Could you link me to these lists? The only thing I can think of is No-intro, but that probably doesn&#039;t cover some system titles and it doesn&#039;t list the &amp;quot;v&amp;quot; versions. --[[User:Hiccup|Hiccup]] ([[User talk:Hiccup|talk]]) 15:49, 6 January 2016 (CET)&lt;br /&gt;
&lt;br /&gt;
== Nintendo Channel demos ==&lt;br /&gt;
&lt;br /&gt;
Is it still possible to use [https://code.google.com/archive/p/wmb-asm/wikis/NintendoChannel.wiki these tools] to download Nintendo Channel demos? Or are the servers offline? Did you (or anyone else) ever download any ROMs? It&#039;d be a shame if they were lost. --[[User:Hiccup|Hiccup]] ([[User talk:Hiccup|talk]]) 15:02, 17 February 2017 (CET)&lt;br /&gt;
:Don&#039;t think so, likewise @ downloading &#039;&#039;all&#039;&#039; of those demos. --[[User:Yellows8|Yellows8]] ([[User talk:Yellows8|talk]]) 16:11, 17 February 2017 (CET)&lt;br /&gt;
::Do you still have any download(s) you made to test it? --[[User:Hiccup|Hiccup]] ([[User talk:Hiccup|talk]]) 14:46, 18 February 2017 (CET)&lt;br /&gt;
:Many of these were archived and are included in the No-Intro &amp;quot;Nintendo - Nintendo DS (Download Play)&amp;quot; DAT. [[User:Vague Rant|Vague Rant]] ([[User talk:Vague Rant|talk]]) 15:04, 18 February 2017 (CET)&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=18479</id>
		<title>Homebrew Exploits</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=18479"/>
		<updated>2016-10-25T15:23:20Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: /* Standalone Homebrew Launcher Exploits */ General edit spam. (-34 --&amp;gt; -35)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Payload==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Works on latest fw&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [https://smealum.github.io/3ds/ *hax payload]&lt;br /&gt;
| Booted by all of the below non-sysmodule exploits.&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-7&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.2.0-35&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the rest of this page, &amp;quot;Supported firmwares&amp;quot; refers to the exploit &#039;&#039;itself&#039;&#039;, not whether *hax payload supports it.&lt;br /&gt;
&lt;br /&gt;
==Standalone Homebrew Launcher Exploits==&lt;br /&gt;
The following homebrew exploits can be executed on a previously un-exploited system. &#039;&#039;Please&#039;&#039; see the above Payload section regarding what &amp;quot;Supported firmwares&amp;quot; indicates &#039;&#039;exactly&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Works on latest fw&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[ninjhax|Ninjhax 1.1b]]&lt;br /&gt;
| From &#039;&#039;&#039;4.0.0-7&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.2.0-20&#039;&#039;&#039;.&lt;br /&gt;
| A cartridge or eShop version (JPN-only) of &amp;quot;Cubic Ninja&amp;quot;.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.net/ninjhax/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [[ninjhax|Ninjhax 2.x]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-7&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.2.0-35&#039;&#039;&#039;.&lt;br /&gt;
|  A cartridge or eShop version (JPN-only, not available anymore for purchase) of &amp;quot;Cubic Ninja&amp;quot;.&lt;br /&gt;
| smea&lt;br /&gt;
| [https://smealum.github.io/ninjhax2/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [http://plutooo.github.io/freakyhax/ freakyhax]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-7&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.1.0-34&#039;&#039;&#039;.&lt;br /&gt;
|  A cartridge or eShop version (USA/EUR/JAP, not available anymore for purchase) of &amp;quot;Freakyform Deluxe&amp;quot;.&lt;br /&gt;
| plutoo&lt;br /&gt;
| [http://plutooo.github.io/freakyhax/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [http://plutooo.github.io/smilehax/ smilehax]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-7&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.0.0-33&#039;&#039;&#039;&lt;br /&gt;
| SmileBASIC (JPN all versions up to 3.32 excluded, USA 3.31 only)&lt;br /&gt;
| plutoo&lt;br /&gt;
| [http://plutooo.github.io/smilehax/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [http://mrnbayoh.github.io/basicsploit/ BASICSploit]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-7&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.0.0-33&#039;&#039;&#039;&lt;br /&gt;
| SmileBASIC (USA all versions)&lt;br /&gt;
| MrNbaYoh&lt;br /&gt;
| [http://mrnbayoh.github.io/basicsploit/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [[smashbroshax|smashbroshax]] (beaconhax)&lt;br /&gt;
| (New 3DS only) From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.1.0-34&#039;&#039;&#039;.&lt;br /&gt;
| Super Smash Bros 3DS (full-game) and a way to broadcast raw wifi beacons. The demo (prior to the updated November 2015 [https://github.com/yellows8/3ds_smashbroshax version]) isn&#039;t usable with the *hax payloads. Game-version v1.1.3 fixed the vuln used with this, see the repo for a workaround for that.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [https://github.com/yellows8/3ds_smashbroshax Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[browserhax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-2&#039;&#039;&#039; to &#039;&#039;&#039;11.0.0-33&#039;&#039;&#039;&lt;br /&gt;
Note that the browser-version-check bypass is only usable prior to [[10.7.0-32]].&lt;br /&gt;
| A USA, EUR, JPN, or KOR system.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [http://yls8.mtheall.com/3dsbrowserhax.php Install]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that ninjhax 1.x is still not obsolete. Even though ninjhax 2.x can be run on 9.3+, this was made possible (amongst other things) by sacrificing the memory remapping exploit used in ninjhax 1.x (rohax). Therefore, things like JIT engines for emulators can only be supported on ninjhax 1.x. Furthermore, ninjhax 2.x does not run on system versions below 9.0.0-X, while ninjhax 1.x does.&lt;br /&gt;
&lt;br /&gt;
==Secondary Exploits==&lt;br /&gt;
Installation of these exploits requires a previously exploited system to install. After installation, they can be used on their own. &#039;&#039;Please&#039;&#039; see the above Payload section regarding what &amp;quot;Supported firmwares&amp;quot; indicates &#039;&#039;exactly&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Works on latest fw&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[ironhax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.5.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.3.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 28.&lt;br /&gt;
| A copy of &amp;quot;Ironfall: Invasion&amp;quot; downloaded from eShop before August 11th, 2015. Note the updated version that was released on October 13th, 2015 is not supported.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No, exploit update required.&lt;br /&gt;
| [http://vegaroxas.github.io/ steelhax]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 34.&lt;br /&gt;
| A copy of Steel Diver: Sub wars&lt;br /&gt;
| Vegaroxas&lt;br /&gt;
| [https://github.com/VegaRoXas/vegaroxas.github.io/raw/master/files/steelhax-installer.zip Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [https://github.com/yellows8/oot3dhax oot3dhax]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 34.&lt;br /&gt;
| A gamecard or eShop-install of Legend of Zelda: Ocarina of Time 3D. Besides using the installer app, writing raw saveimages with a save dongle for example is another option. Before compression was introduced in the 2016-7-18 release, the size of the *hax payload meant the exploit can&#039;t coexist with regular saves on a physical version of the game.&lt;br /&gt;
| Yellows8 / smea et al.&lt;br /&gt;
| See [https://smealum.github.io/3ds/ here].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[menuhax]]&lt;br /&gt;
| JPN/USA/EUR: From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.0.0-X&#039;&#039;&#039;.&lt;br /&gt;
KOR: From &#039;&#039;&#039;9.6.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.0.0-X&#039;&#039;&#039;.&lt;br /&gt;
| JPN/USA/EUR: Having created [[Home_Menu#Home_Menu_Theme_SD_ExtData|theme extdata]] through opening the official theme selector at least once.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [https://github.com/yellows8/3ds_homemenuhax/releases Download]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [https://github.com/shinyquagsire23/supermysterychunkhax supermysterychunkhax]&lt;br /&gt;
| From &#039;&#039;&#039;9.9.0-X&#039;&#039;&#039; (USA/JPN) / &#039;&#039;&#039;10.2.0-X&#039;&#039;&#039; (EUR) up to and including &#039;&#039;&#039;11.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 34.&lt;br /&gt;
| A gamecard or eShop-install of Pokémon Super Mystery Dungeon.&lt;br /&gt;
| Shiny Quagsire / SALT team&lt;br /&gt;
| [https://smd.salthax.org/ Install].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [https://github.com/shinyquagsire23/v_hax (v*)hax]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.0.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 33.&lt;br /&gt;
Note that &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; is only required for the Homebrew Launcher - the game itself only requires &#039;&#039;&#039;2.1.0-X&#039;&#039;&#039; for primitive userland code execution.&lt;br /&gt;
| A copy of VVVVVV downloaded after March 2012 (v1). v1.1 patches out the overflow vulnerability used by (v*)hax.&lt;br /&gt;
| Shiny Quagsire / SALT team&lt;br /&gt;
| [https://vvvvvv.salthax.org/ Install].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No, exploit update required.&lt;br /&gt;
| [https://github.com/Dazzozo/humblehax humblehax]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; (USA/EUR) up to and including &#039;&#039;&#039;11.0.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 33.&lt;br /&gt;
| An eShop-install of Citizens of Earth (either v1 or v2), featured in the Humble &amp;quot;Friends of Nintendo&amp;quot; Bundle.&lt;br /&gt;
| Dazzozo / SALT team&lt;br /&gt;
| [https://citizens.salthax.org/ Install].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [http://mrnbayoh.github.io/basehaxx/ basehaxx]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 34.&lt;br /&gt;
| A gamecard or eShop-install of Pokémon Omega Ruby / Alpha Sapphire.&lt;br /&gt;
| MrNbaYoh&lt;br /&gt;
| [http://mrnbayoh.github.io/basehaxx/ install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [https://github.com/yellows8/stickerhax stickerhax]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.2.0-X&#039;&#039;&#039;(not including installation).&lt;br /&gt;
| A gamecard or eShop-install of Paper Mario: Sticker Star.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [https://github.com/yellows8/stickerhax Here]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exploits without Homebrew Launcher (Not recommended)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Warning:&#039;&#039;&#039;&amp;lt;/u&amp;gt; The following exploits can run code, but are missing a 3DSX launcher. They cannot launch any homebrew in the 3DSX format.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Works on latest fw&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[browserhax]] (Without the loader in the 3ds_browserhax_common repo)&lt;br /&gt;
| (Old3DS) From &#039;&#039;&#039;5.0.0-2&#039;&#039;&#039; to &#039;&#039;&#039;11.0.0-33&#039;&#039;&#039; (Pre-v5.0 is supported for some versions if you manually modify the source)&lt;br /&gt;
&lt;br /&gt;
(New3DS) From &#039;&#039;&#039;9.0.0-20&#039;&#039;&#039; to &#039;&#039;&#039;11.0.0-33&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that the browser-version-check bypass is only usable prior to [[10.7.0-32]].&lt;br /&gt;
| An USA, EUR, or JPN system.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [[browserhax|Install]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| Ninjhax (with specialized payloads)&lt;br /&gt;
| Up to &#039;&#039;&#039;9.2.0-20&#039;&#039;&#039;?&lt;br /&gt;
| &lt;br /&gt;
| smea + independent developers&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Previous Exploits==&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Warning:&#039;&#039;&#039;&amp;lt;/u&amp;gt; These exploits &#039;&#039;&#039;do not work&#039;&#039;&#039;. They are exploits which no longer function at all, regardless of software or firmware revision.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Works on latest fw&lt;br /&gt;
! Name&lt;br /&gt;
! Supported firmwares&lt;br /&gt;
! Requirements&lt;br /&gt;
! Author&lt;br /&gt;
! Install&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[tubehax|Tubehax]]&lt;br /&gt;
| None. &#039;&#039;&#039;Was&#039;&#039;&#039;: From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| The YouTube application and an Internet connection. As of October 15, 2015, this is no longer usable due to an update being released which fixes the vuln used by tubehax + app update being forced (see [[YouTube|here]]).&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Other Homebrew Loaders==&lt;br /&gt;
The [https://github.com/yellows8/hblauncher_loader hblauncher_loader] title can be used when running under modded-FIRM which allows running unsigned titles, to boot the *hax payloads.&lt;br /&gt;
&lt;br /&gt;
==Sysmodule Exploits==&lt;br /&gt;
This section is for system-module exploits, which can be run from the *hax payloads.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Works on latest fw&lt;br /&gt;
! Name&lt;br /&gt;
! Supported firmwares&lt;br /&gt;
! Requirements&lt;br /&gt;
! Author&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes, that&#039;s not the intended default use however.&lt;br /&gt;
| [https://github.com/yellows8/ctr-httpwn/releases ctr-httpwn]&lt;br /&gt;
| From &#039;&#039;&#039;9.6.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;11.1.0-X&#039;&#039;&#039;.&lt;br /&gt;
| None&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WebKit vuln testing==&lt;br /&gt;
See [https://github.com/yellows8/3ds_browserhax_common/issues/28 here].&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=FirmwareNews&amp;diff=18145</id>
		<title>FirmwareNews</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=FirmwareNews&amp;diff=18145"/>
		<updated>2016-09-13T04:25:36Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: New latest firmware.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As of this writing, the latest firmware is &#039;&#039;&#039; 11.1.0-34&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
There are ways to run homebrew on this version, see [[Homebrew Exploits]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Full system control exploits are only public for system versions up to and including &#039;&#039;&#039;9.2.0-X&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=EShop&amp;diff=17125</id>
		<title>EShop</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=EShop&amp;diff=17125"/>
		<updated>2016-04-23T13:19:53Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Purely cosmetic change, display lowercase &amp;quot;e&amp;quot; in article title with {{DISPLAYTITLE:eShop}}.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:eShop}}&lt;br /&gt;
The Nintendo 3DS eShop was added in the June 2011 update for JP/EUR/USA.&lt;br /&gt;
&lt;br /&gt;
From here, you can download Virtual Console games, 3D Classics, DSiware software, view screenshots, and 3D trailers for upcoming 3DS titles.&lt;br /&gt;
&lt;br /&gt;
While eShop is loading, eShop will use command [[NIMS:CheckSysupdateAvailableSOAP]]. If a system update is available where title installation for system titles still needs finalized (or when the updated titles were not downloaded at all), eShop will then display the &amp;quot;system update is available&amp;quot; message.&lt;br /&gt;
&lt;br /&gt;
The eShop application uses command [[AMNet:FinishInstallToMedia]] to finalize the SD title install (if the whole title is downloaded while eShop is still running), however, before using that command the eShop application also uses [[AMNet:FinishInstallToMedia]] to finalize installing all system titles (from system updates).&lt;br /&gt;
&lt;br /&gt;
== eShop QR Codes ==&lt;br /&gt;
eShop QR Codes can be scanned with the camera, allowing one to quickly navigate to the desired eShop title with just two clicks. The QR Codes themselves is a simple text/url QR, started with &amp;quot;ESHOP://&amp;quot; string followed by a decimal eShop content link id(same IDs used internally by eShop for all content) and then some special data, delimited by a dot symbol, which can be ommited.&lt;br /&gt;
&lt;br /&gt;
In order for the QR-code string data to be valid for eShop, it must begin with &amp;quot;ESHOP://5&amp;quot;, with the first ID being all decimal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! QR Code source&lt;br /&gt;
! Region&lt;br /&gt;
! Title&lt;br /&gt;
! Serial&lt;br /&gt;
! Title ID&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000000201.PEAALL000000 || EUR || Nintendogs &amp;amp; Cats Demo || ADA/B/C || 0004000200030c01&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000007870.PEAALL000000 || EUR || Crush 3D || A??P || 00040002&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008009.PEAALL000000 || EUR || Resident Evil Revelations Demo || ABRE || 000400020005ee01&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008123.J00101Z00095 || JPN || Rhythm Thief And The Emperor&#039;s Treasure Demo || ARTJ || 00040002&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008404.PEAALL000000 || EUR || Mario And Sonic At The London 2012 Olympic Games Demo || ACMP [http://mediacontent.nintendo-europe.com/NOE/images/game_content/ACMP-MarioAndSonicAtTheLondon2012OlympicGames-QRCode-EA_ALL_000_001.bmp] || 00040002&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008447.J00101Z00094 || JPN || Resident Evil Revelations Demo || ABRJ || 00040002&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008449.J00101Z00082 || JPN || Swapnote || JFRJ ||?&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008561 || USA || Swapnote || JFRE || 0004000000051700&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008647.J00101Z00096 || JPN || Metal Gear Solid Snake Eater 3D Demo || AMGJ || 0004000200048101&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008648.J00101Z00097 || JPN || Theatrythm Final Fantasy || ATHJ ||?&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008782.PEAALL000000 || EUR || Metal Gear Solid Snake Eater 3D Demo || AMGE || 0004000200082401&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000008842.PEAALL000000 || EUR || Rhythm Thief And The Emperor&#039;s Treasure Demo || ARTP [http://mediacontent.nintendo-europe.com/NOE/images/game_content/ARTP-RhythmThief_TheEmperorsTreasure-QRCode-EA_ALL_000_001.bmp] || 00040002&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000009084.J00101Z00121 || JPN || Hatsune Miku And Future Stars: Project Mirai Demo || AM9J || 00040002&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000009102.J00101Z00106 || JPN || Denpa Ningen RPG || JD8J ||?&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000009161.J00101Z00118 || JPN || Dillon&#039;s Rolling Western || JAMJ || 00040000&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000009261 || USA || Dillon&#039;s Rolling Western || JAME? || 00040000&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000009401.J00101Z00120 || JPN || Kingdom Hearts 3D Video Download || JZ8J ||?&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000009403.J00101Z00119 || JPN || DQM 3D Video Download || JZ7J ||?&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000009575.PEAALL000000 || EUR || Kid Icarus: Of Myths And Monsters (Virtual Console) ||? ||?&lt;br /&gt;
|-&lt;br /&gt;
| ESHOP://50010000009846 || USA || Ketzal&#039;s Corridors ||? ||?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* New QR Code for Japanese &amp;quot;Photos with Super Mario&amp;quot; has a different code string: ESHOP://50010000013120.J00108Z00001.CD588EAE95A3A68D15C647DA2AC0945FD88F70AB8A31149E51C4B05FB927B0B8&lt;br /&gt;
&lt;br /&gt;
* There is a link in the Japanese eShop &amp;lt;nowiki&amp;gt;[http://www.nintendo.co.jp/3ds/eshop/qrCode.html?####]&amp;lt;/nowiki&amp;gt; where you can replace the #### with the Japanese eShop title&#039;s serial and you will get it&#039;s QR code. (i.e. http://www.nintendo.co.jp/3ds/eshop/qrCode.html?jcaj will get you the pushmo QR code)&lt;br /&gt;
&lt;br /&gt;
* You could use Google&#039;s Chart API to create a QR code from the codes above: https://chart.googleapis.com/chart?chs=150x150&amp;amp;cht=qr&amp;amp;chl=ESHOP (replace the ESHOP text with the ESHOP:// link from one of the above)&lt;br /&gt;
&lt;br /&gt;
== NS eShop application parameters ==&lt;br /&gt;
This section describes the 0x1C-byte structure stored at the application parameters from [[APT:StartApplication]], under the 0x300-byte buffer listed there.&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;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, usually 0x3?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, usually 0x0?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| u64 binary eShop content ID, same ID from the first string in eShop QR-codes except in binary form.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| This is the last string from the QR-code(if any), no NUL-termination.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ExtData ==&lt;br /&gt;
The ExtData [[Extdata#Filesystem|File System]] for eShop is as follows:&lt;br /&gt;
&lt;br /&gt;
 root&lt;br /&gt;
 ├── icon&lt;br /&gt;
 ├── boss&lt;br /&gt;
 │   └── TIGER100.tmp&lt;br /&gt;
 └── user&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  File&lt;br /&gt;
!  Details&lt;br /&gt;
!  Size&lt;br /&gt;
!  Firmware Introduced&lt;br /&gt;
!  Plain text&lt;br /&gt;
|-&lt;br /&gt;
|  icon&lt;br /&gt;
|  Duplicate from application ExeFS. Always image 00000002&lt;br /&gt;
|  0x36C0 Bytes&lt;br /&gt;
|  [[2.0.0-2]]&lt;br /&gt;
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/eShopExtdata/icon Download_EUR]&lt;br /&gt;
|-&lt;br /&gt;
|  TIGER100.tmp&lt;br /&gt;
|  Always image 00000003.&lt;br /&gt;
|  0xCE47 bytes (varies?)&lt;br /&gt;
|  [[2.0.0-2]]&lt;br /&gt;
|  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
The eShop pulls its music from a static, region-specific link in a format similar to the following: &lt;br /&gt;
&lt;br /&gt;
https:// a248.e.akamai.net/f/248/103046/10m/npdl.c.app.nintendowifi.net/p01/nsa/CtfKXACbUPl8s7lk/BGM1/US_BGM1 ,&lt;br /&gt;
where region is one of the primary system regions (JP, US, EU, KR, etc.) Support also exists for &#039;BGM2&#039;, but this seems to be unused.&lt;br /&gt;
The music is held in a [[SpotPass|BOSS]] container. &lt;br /&gt;
&lt;br /&gt;
The format consists of a brief XML header describing the audio (including the date it was set as the main eShop theme, loop times, size, etc) followed by a raw AAC stream. Tools such as FFmpeg can handle rebuilding this stream with ADTS headers for proper time info and such.&lt;br /&gt;
&lt;br /&gt;
The [[Home_Menu|Home Menu]] uses nearly the same format for the Theme Shop&#039;s background music.&lt;br /&gt;
&lt;br /&gt;
== URLs ==&lt;br /&gt;
&lt;br /&gt;
eShop uses the following domains over HTTPS:&lt;br /&gt;
&lt;br /&gt;
* cp3s-auth.c.shop.nintendowifi.net&lt;br /&gt;
* a248.e.akamai.net&lt;br /&gt;
* ninja.ctr.shop.nintendo.net&lt;br /&gt;
* samurai.ctr.shop.nintendo.net&lt;br /&gt;
* ccif.ctr.shop.nintendo.net&lt;br /&gt;
* eou.c.shop.nintendowifi.net&lt;br /&gt;
&lt;br /&gt;
These domains are used by [[NIM_Services|NIM]]:&lt;br /&gt;
&lt;br /&gt;
* nus.c.shop.nintendowifi.net&lt;br /&gt;
* ecs.c.shop.nintendowifi.net&lt;br /&gt;
* cas.c.shop.nintendowifi.net&lt;br /&gt;
&lt;br /&gt;
ninja.ctr.shop.nintendo.net and samurai.ctr.shop.nintendo.net contain the bulk of the eShop information.&lt;br /&gt;
&lt;br /&gt;
=== Common Parameters to ninja and samurai ===&lt;br /&gt;
&lt;br /&gt;
For every request to the ninja and samurai servers, three parameters are always sent, though are not necessarily required:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Parameter&lt;br /&gt;
!  Required&lt;br /&gt;
!  Description&lt;br /&gt;
!  Type&lt;br /&gt;
!  Normal value&lt;br /&gt;
|-&lt;br /&gt;
|  shop_id&lt;br /&gt;
|  depends on the URL, usually no&lt;br /&gt;
|  Describes which eShop instance should be used. 1 indicates the 3DS eShop, 2 indicates the Wii U eShop. 3 seems to yield the same results as 2. Values greater than 3 or less than 1 are invalid. Defaults to 2 or 3 if not given.&lt;br /&gt;
|  unsigned integer&lt;br /&gt;
|  1&lt;br /&gt;
|-&lt;br /&gt;
|  lang&lt;br /&gt;
|  no&lt;br /&gt;
|  Describes the language. Seems to be an ISO 639-1 code in lower case. Every eShop region has a default language that is used if this parameter is not given. Some regions have multiple languages, such as CA (en and fr).&lt;br /&gt;
|  string (two characters)&lt;br /&gt;
|  depends on region and eShop settings; for US: en&lt;br /&gt;
|-&lt;br /&gt;
|  _type&lt;br /&gt;
|  no&lt;br /&gt;
|  Describes whether the client wants to receive JSON or XML. This parameter seems actually unused and the servers always return XML.&lt;br /&gt;
|  string&lt;br /&gt;
|  json&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== samurai ===&lt;br /&gt;
&lt;br /&gt;
samurai.ctr.shop.nintendo.net (samurai) provides metadata about titles. The samurai server provides the backend for the eShop title search.&lt;br /&gt;
&lt;br /&gt;
Common parameters described above can always be sent.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Path&lt;br /&gt;
!  Description&lt;br /&gt;
!  Parameters&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/titles&lt;br /&gt;
|  Fetches the title list, containing the content id (not the 3DS title id), the product code and the localized title name&lt;br /&gt;
|  All of these are optional.&lt;br /&gt;
* genre[]: genre ID (unsigned int)&lt;br /&gt;
* publisher[]: publisher ID (unsigned int)&lt;br /&gt;
* price_min: minimum price in region currency (signed int)&lt;br /&gt;
* price_max: maximum price in region currency (signed int)&lt;br /&gt;
* video_format: &amp;quot;moflex&amp;quot;&lt;br /&gt;
* freeword: keyword(s?) to look for (string)&lt;br /&gt;
* limit: maximum results&lt;br /&gt;
* offset: results to skip&lt;br /&gt;
* sort: one of &amp;quot;new&amp;quot;, &amp;quot;popular&amp;quot; or &amp;quot;score&amp;quot;&lt;br /&gt;
* release_date_before: date/time title must have been released before (UNIX timestamp prefixed by +)&lt;br /&gt;
* release_date_after: date/time title must have been released after (UNIX timestamp prefixed by -)&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/news&lt;br /&gt;
|  eShop news section&lt;br /&gt;
|  (none)&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/telops&lt;br /&gt;
|  Scrolling news on the top screen&lt;br /&gt;
|  shop_id is required&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/directory/&#039;&#039;&#039;(long long unsigned int)&#039;&#039;&#039; and /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/directory/~&#039;&#039;&#039;(string)&#039;&#039;&#039;&lt;br /&gt;
|  Collections, like sales&lt;br /&gt;
|  (none)&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/title/&#039;&#039;&#039;content id&#039;&#039;&#039;&lt;br /&gt;
|  Returns information about the title, more verbose than /titles.&lt;br /&gt;
|  (none)&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/demo/&#039;&#039;&#039;content id&#039;&#039;&#039;&lt;br /&gt;
|  Returns information about a demo. Content ID is available in the main game&#039;s /title entry.&lt;br /&gt;
|  (none)&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/contents&lt;br /&gt;
|  Seems identical to /titles.&lt;br /&gt;
|  see /titles&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/genres&lt;br /&gt;
|  Returns a list of human-readable genre names and their corresponding genre id.&lt;br /&gt;
|  (none)&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/publishers&lt;br /&gt;
|  Returns a list of human-readable publisher names and their corresponding publisher id.&lt;br /&gt;
|  (none)&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/platforms&lt;br /&gt;
|  Returns a list of human-readable platform names and their corresponding platform id.&lt;br /&gt;
|  (none)&lt;br /&gt;
|-&lt;br /&gt;
|  /samurai/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/title/&#039;&#039;&#039;content id&#039;&#039;&#039;/aocs&lt;br /&gt;
|  Returns a list of add-on contents/downloadable content and prices in eShop region currency.&lt;br /&gt;
|  (none)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ninja ===&lt;br /&gt;
&lt;br /&gt;
ninja.ctr.shop.nintendo.net (ninja) contains the seeds for the new 9.6 crypto, pricing information and handles actions that require authentication, such as purchases. Authentication information seems to be obtained from the [[ACT_Services|act:u sysmodule]] and works through OAuth2.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Path&lt;br /&gt;
!  Description&lt;br /&gt;
!  Parameters&lt;br /&gt;
|-&lt;br /&gt;
|  /ninja/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/title/&#039;&#039;&#039;content id&#039;&#039;&#039;/ec_info&lt;br /&gt;
|  Contains information about the title. Such as title id, content size, and if available, the 9.6 crypto seed&lt;br /&gt;
|  (none)&lt;br /&gt;
|-&lt;br /&gt;
|  /ninja/ws/titles/id_pair&lt;br /&gt;
|  Provides the content id for the given title id, or vice versa.&lt;br /&gt;
|  title_id[] or ns_uid[] is required.&lt;br /&gt;
|-&lt;br /&gt;
|  /ninja/ws/&#039;&#039;&#039;region&#039;&#039;&#039;/tax_locations&lt;br /&gt;
|  Provides the tax location ID&lt;br /&gt;
|  postal_code is required.&lt;br /&gt;
|-&lt;br /&gt;
|  /ninja/ws/service_hosts&lt;br /&gt;
|  Provides CCIF and Samurai servers&lt;br /&gt;
|  country and shop_id is required.&lt;br /&gt;
|-&lt;br /&gt;
|  /ninja/ws/country/&#039;&#039;&#039;region&#039;&#039;&#039;&lt;br /&gt;
|  Various eshop related information for a given region&lt;br /&gt;
|  (none)&lt;br /&gt;
|-&lt;br /&gt;
|  /ninja/ws/country/&#039;&#039;&#039;region&#039;&#039;&#039;/replenish_amounts&lt;br /&gt;
|  Provides the amounts of money you can replenish to your account.&lt;br /&gt;
|  (none)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Root CAs ===&lt;br /&gt;
The eShop application itself uses a [[HTTP_Services|RootCertChain]] for all HTTPS requests, all of the trusted root CAs are the following [[SSLC:RootCertChainAddDefaultCert|default]] ones:&lt;br /&gt;
* CertID 0x3&lt;br /&gt;
* CertID 0x6&lt;br /&gt;
* CertID 0x7&lt;br /&gt;
* CertID 0x8&lt;br /&gt;
* CertID 0x9&lt;br /&gt;
* CertID 0xA&lt;br /&gt;
&lt;br /&gt;
=== Server changes following the November 2, 2015, maintenance ===&lt;br /&gt;
Pre-v10.0 eShop used an URL like this: &amp;quot;%s/samurai/ws/%s/title/%llu/other_purchased?shop_id=1&amp;amp;lang=%s&amp;amp;_type=json&amp;quot;. That URL was removed with v10.0. That URL was requested when trying to load eShop app-pages. Following the maintenance mentioned above, this page was removed from the server, which broke pre-v10.0 eShop app whenever it tried to access that page.&lt;br /&gt;
&lt;br /&gt;
URL changes between [[9.7.0-25]] and [[10.0.0-27]] are (green = add, red = remove):&lt;br /&gt;
&lt;br /&gt;
%s/ninja/ws/%s/titles/online_prices?title%%5B%%5D=%s&amp;amp;lang=%s&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;&amp;amp;include_coupon=true&amp;lt;/span&amp;gt;&amp;amp;shop_id=1&amp;amp;_type=json&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;%s/ninja/ws/%s/coupon/!check?shop_id=1&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;%s/ninja/ws/my/owned_coupons?ns_uid=%llu&amp;amp;shop_id=1&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;%s/ninja/ws/my/owned_coupons?shop_id=1&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;%s/ninja/ws/my/parental_control/!put?shop_id=1&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;%s/ninja/ws/%s/title/%llu/prepurchase_info?%s=%s&amp;amp;shop_id=1&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;%s/samurai/ws/%s/coupon/%llu/titles?lang=%s&amp;amp;limit=%u&amp;amp;offset=%u&amp;amp;shop_id=1&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;%s/ninja/ws/my/auto_billing/plans?limit=%u&amp;amp;offset=%u&amp;amp;shop_id=1&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;%s/ninja/ws/%s/titles/online_prices?title%%5B%%5D=%s&amp;amp;lang=%s&amp;amp;include_coupon=true&amp;amp;coupon_id=%llu&amp;amp;shop_id=1&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#00FF00&amp;quot;&amp;gt;%s/ninja/ws/my/auto_billing/%014llu/!cancel?shop_id=1&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;%s/samurai/ws/%s/title/%llu/other_purchased?shop_id=1&amp;amp;lang=%s&amp;amp;_type=json&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;%s/samurai/movie/%s/%s/%014llu/moflex&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==New3DS==&lt;br /&gt;
CheckNew3DS is called in two functions. This is only used for disabling UI button(s) for downloading New3DS titles when running on Old3DS. For example, on a New3DS patching a CheckNew3DS func-call with &amp;lt;retval=0&amp;gt;, results in the download button on the app page being grayed-out for a New3DS-only title.&lt;br /&gt;
&lt;br /&gt;
==TitleID checks==&lt;br /&gt;
There&#039;s titleID checks in the system eShop application code for &amp;quot;Pokémon Omega Ruby&amp;quot;. This appears to be used with UI-related code, unknown why.&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=News&amp;diff=15736</id>
		<title>News</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=News&amp;diff=15736"/>
		<updated>2016-02-02T14:38:55Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Current firmware checked before letting users online.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Adding an item==&lt;br /&gt;
* Log in to the wiki. Editing is disabled if you don&#039;t have an account.&lt;br /&gt;
* Add the news event to the top of the list, using this format for the date: &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;{{#time: d F y}}&amp;lt;nowiki&amp;gt;&#039;&#039;&#039; &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;. Please include the application&#039;s creator, version number, and a link to a page on 3DBrew about the application. No external links please.&lt;br /&gt;
* &#039;&#039;&#039;Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entrees in the list.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Archives==&lt;br /&gt;
For older news, see the [[:News/Archive|news archive]].&lt;br /&gt;
&lt;br /&gt;
=== News ===&lt;br /&gt;
&amp;lt;!-- Add news below --&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;2 February 16&#039;&#039;&#039; As of this date (time zones notwithstanding) Nintendo now checks that users are on current firmware before allowing access to online functionality in games.&lt;br /&gt;
*&#039;&#039;&#039;25 January 16&#039;&#039;&#039; Nintendo released system update [[10.5.0-30]].&lt;br /&gt;
*&#039;&#039;&#039;25 January 16&#039;&#039;&#039; [[User:Yellows8|Yellows8]] updated [http://yls8.mtheall.com/3dsbrowserhax.php browserhax], [https://github.com/yellows8/3ds_homemenuhax/releases menuhax], and the oot3dhax [https://github.com/yellows8/oot3dhax/releases saveimages] for v10.4.&lt;br /&gt;
*&#039;&#039;&#039;18 January 16&#039;&#039;&#039; Nintendo released system update [[10.4.0-29]].&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=News/Archive&amp;diff=15735</id>
		<title>News/Archive</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=News/Archive&amp;diff=15735"/>
		<updated>2016-02-02T14:38:09Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Adding to archive.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*&#039;&#039;&#039;7 January 16&#039;&#039;&#039; (roughly, not automatically detected) Ironfall v1.0 is no longer downloadable due to the main-CXI content files on CDN being removed (TMD wasn&#039;t removed).&lt;br /&gt;
*&#039;&#039;&#039;27 December 15&#039;&#039;&#039; A 3DS console hacking [https://events.ccc.de/congress/2015/Fahrplan/events/7240.html talk] was at 32C3. A recording can be found [https://www.youtube.com/watch?v=UutYOidFx3c here]. Around the end of the talk, [[User:Yellows8|Yellows8]] released [[browserhax]] and [[menuhax]] compatible with the latest system-version at the time of release ([[10.3.0-28]]). The homebrew [https://smealum.github.io/3ds/ starter-kit] was updated for latest menuhax, and for an option for downloading the old vulnerable version of Ironfall from eShop.&lt;br /&gt;
*&#039;&#039;&#039;15 December 15&#039;&#039;&#039; Nintendo released Smash Bros update v1.1.3 which fixed [[smashbroshax]], see [https://github.com/yellows8/3ds_smashbroshax here] for details. However, [[smashbroshax]] is still possible on latest firmware: simply remove the update from SD card before attempting the exploit.&lt;br /&gt;
*&#039;&#039;&#039;13 December 15&#039;&#039;&#039; WinterMute released [http://devkitpro.org/viewtopic.php?f=13&amp;amp;t=8542 devkitARM release 45].&lt;br /&gt;
*&#039;&#039;&#039;25 November 15&#039;&#039;&#039; [[User:Yellows8|Yellows8]]  released [https://github.com/yellows8/hblauncher_loader/releases hblauncher_loader].&lt;br /&gt;
*&#039;&#039;&#039;17-20 November 15&#039;&#039;&#039; Nintendo released an update for the normal (non-invite-code) Super Smash Bros demos in USA, EUR and JPN, fixing [[smashbroshax]]. Only the demos were updated, the cartridge and eShop version of the full game are still vulnerable.&lt;br /&gt;
*&#039;&#039;&#039;12 November 15&#039;&#039;&#039; [[User:Yellows8|Yellows8]]  released [https://github.com/yellows8/oot3dhax/releases oot3dhax] raw savedata images for gamecards with the latest *hax payloads. The official [https://github.com/smealum/sploit_installer installer] is now [https://smealum.github.io/3ds/ included] in the homebrew starter kit.&lt;br /&gt;
*&#039;&#039;&#039;9 November 15&#039;&#039;&#039; Nintendo released system update [[10.3.0-28]].&lt;br /&gt;
*&#039;&#039;&#039;2 November 15&#039;&#039;&#039; Following an eShop servers maintenance, changes to the [[eShop]] system application require an update of the Homebrew starter kit for eShop access on system versions older than [[10.0.0-27]]. See [[EShop|here]] for details.&lt;br /&gt;
*&#039;&#039;&#039;30 October 15&#039;&#039;&#039; [[User:Yellows8|Yellows8]]  released [https://github.com/yellows8/3ds_homemenuhax/releases menuhax] v2.0.&lt;br /&gt;
*&#039;&#039;&#039;29 October 15&#039;&#039;&#039; [[User:Yellows8|Yellows8]] released [https://github.com/yellows8/3ds_smashbroshax/releases 3ds_smashbroshax] v1.2.&lt;br /&gt;
*&#039;&#039;&#039;26 October 15&#039;&#039;&#039; A [[Internet_Browser#v9.9_dummy_web-browser|dummy web browser]] is now being included in CUPs (cart updates) on Old3DS/New3DS likely starting with games shipping [[9.9.0-26|9.9.0-X]]. NVer is not updated by this.&lt;br /&gt;
*&#039;&#039;&#039;26 October 15&#039;&#039;&#039; The system web-browser on Old3DS/New3DS now displays a &amp;quot;sysupdate required&amp;quot; message on systems with [[9.9.0-26]] or above installed, if the installed browser(?) is not the latest version. See [[Internet_Browser#Forced_system-update|here]] for details.&lt;br /&gt;
*&#039;&#039;&#039;25 October 15&#039;&#039;&#039; [[User:Smea|smea]] released *hax 2.5 payloads, which fixes a number of bugs and adds new features such as screenshot-taking, romhacking and eshop access.&lt;br /&gt;
*&#039;&#039;&#039;20 October 15&#039;&#039;&#039; Nintendo released system update [[10.2.0-28]]. The publicly available versions of [[menuhax]] and [[browserhax]] at the time of sysupdate release, were blocked.&lt;br /&gt;
*&#039;&#039;&#039;15 October 15&#039;&#039;&#039; The [[YouTube]] application was updated with a fix for [[tubehax]]. This update is forced: the app itself checks whether a newer version of the title is available.&lt;br /&gt;
*&#039;&#039;&#039;13 October 15&#039;&#039;&#039; &amp;quot;Ironfall: Invasion&amp;quot; was made available on the eShop again (originally pulled on August 11th). The updated version blocks [[ironhax]].&lt;br /&gt;
*&#039;&#039;&#039;25 September 15&#039;&#039;&#039; [[User:Yellows8|Yellows8]] released [[browserhax]] and [[menuhax]]. On the 26th menuhax v1.2 was [https://github.com/yellows8/3ds_homemenuhax/releases released].&lt;br /&gt;
*&#039;&#039;&#039;14 September 15&#039;&#039;&#039; Nintendo released system update [[10.1.0-27]].&lt;br /&gt;
*&#039;&#039;&#039;11 September 15&#039;&#039;&#039;(11:30 EDT) [[User:Yellows8|Yellows8]] released [[smashbroshax]]. On the 30th v1.1 was [https://github.com/yellows8/3ds_smashbroshax/releases released] for supporting Super Smash Bros v1.1.1.&lt;br /&gt;
*&#039;&#039;&#039;8 September 15&#039;&#039;&#039; Nintendo released system update [[10.0.0-27]].&lt;br /&gt;
*&#039;&#039;&#039;18 July 15&#039;&#039;&#039; smea released [[ninjhax]] 2 beta [http://smealum.github.io/ninjhax2/], enabling ARM11 homebrew execution on Old/New 3DS up to firmware 9.9.0-26.&lt;br /&gt;
*&#039;&#039;&#039;13 July 15&#039;&#039;&#039; Nintendo released system update [[9.9.0-26]].&lt;br /&gt;
*&#039;&#039;&#039;1 June 15&#039;&#039;&#039; Nintendo released system update [[9.8.0-25]].&lt;br /&gt;
*&#039;&#039;&#039;03 May 15&#039;&#039;&#039; smea released regionFOUR [https://github.com/smealum/regionFOUR/blob/master/README.md], enabling region free gaming on latest firmware. (again)&lt;br /&gt;
*&#039;&#039;&#039;20 April 15&#039;&#039;&#039; Nintendo released system update [[9.7.0-25]].&lt;br /&gt;
*&#039;&#039;&#039;23 March 15&#039;&#039;&#039; Nintendo released system update [[9.6.0-24]].&lt;br /&gt;
*&#039;&#039;&#039;2 March 15&#039;&#039;&#039; Nintendo released system update [[9.5.0-23]].&lt;br /&gt;
*&#039;&#039;&#039;15 February 15&#039;&#039;&#039; WinterMute released [http://devkitpro.org/viewtopic.php?f=13&amp;amp;t=8409 devkitARM release 44].&lt;br /&gt;
*&#039;&#039;&#039;2 February 15&#039;&#039;&#039; Nintendo released system update [[9.5.0-22]], which fixes [[3DS System Flaws|firmlaunch-hax]].&lt;br /&gt;
*&#039;&#039;&#039;16 January 15&#039;&#039;&#039; smea released regionthree [https://github.com/smealum/regionthree/blob/master/README.md], enabling region free gaming on latest firmware.&lt;br /&gt;
*&#039;&#039;&#039;24 December 14&#039;&#039;&#039; smea released [[Ninjhax]] 1.1 (&#039;&#039;&#039;NOT&#039;&#039;&#039; a fix for firmware [[9.3.0-21]] or [[9.4.0-21]]).&lt;br /&gt;
*&#039;&#039;&#039;11 December 14&#039;&#039;&#039; Nintendo released system update [[9.4.0-21]].&lt;br /&gt;
*&#039;&#039;&#039;8 December 14&#039;&#039;&#039; Nintendo released system update [[9.3.0-21]], which fixes [[3DS System Flaws|rohax]].&lt;br /&gt;
*&#039;&#039;&#039;20 November 14&#039;&#039;&#039; smea released [[Ninjhax]], the first public [[Homebrew Exploits|homebrew exploit]] compatible with system-versions [[4.0.0-7]]-[[9.2.0-20]].&lt;br /&gt;
*&#039;&#039;&#039;29 October 14&#039;&#039;&#039; Nintendo released system update [[9.2.0-20]].&lt;br /&gt;
*&#039;&#039;&#039;10 October 14&#039;&#039;&#039; Nintendo released system update [[9.1.0-20J]].&lt;br /&gt;
*&#039;&#039;&#039;6 October 14&#039;&#039;&#039; Nintendo released system update [[9.0.0-20]].&lt;br /&gt;
*&#039;&#039;&#039;29 August 14&#039;&#039;&#039; Nintendo announced [[New 3DS]].&lt;br /&gt;
*&#039;&#039;&#039;7 August 14&#039;&#039;&#039; Nintendo released system update [[8.1.0-19]].&lt;br /&gt;
*&#039;&#039;&#039;24 July 14&#039;&#039;&#039; Nintendo released system update [[8.1.0-18]].&lt;br /&gt;
*&#039;&#039;&#039;7 July 14&#039;&#039;&#039; Nintendo released system update [[8.0.0-18]].&lt;br /&gt;
*&#039;&#039;&#039;12 May 14&#039;&#039;&#039; Nintendo released system update [[7.2.0-17]].&lt;br /&gt;
*&#039;&#039;&#039;26 February 14&#039;&#039;&#039; Nintendo released system update [[7.1.0-16]].&lt;br /&gt;
*&#039;&#039;&#039;22 January 14&#039;&#039;&#039; Nintendo released system update [[7.1.0-15]].&lt;br /&gt;
*&#039;&#039;&#039;19 December 13&#039;&#039;&#039; Nintendo released system update [[7.1.0-14]].&lt;br /&gt;
*&#039;&#039;&#039;9 December 13&#039;&#039;&#039; Nintendo released system update [[7.0.0-13]].&lt;br /&gt;
*&#039;&#039;&#039;13 September 13&#039;&#039;&#039; Nintendo released system update [[6.3.0-12]].&lt;br /&gt;
*&#039;&#039;&#039;20 August 13&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.5.3]] updated by [[User:Elisherer|Elisherer]] (Enable trimming NCSD)&lt;br /&gt;
*&#039;&#039;&#039;6 August 13&#039;&#039;&#039; Nintendo released system update [[6.2.0-12]].&lt;br /&gt;
*&#039;&#039;&#039;11 July 13&#039;&#039;&#039; Nintendo released system update [[6.1.0-12U]] for only USA.&lt;br /&gt;
*&#039;&#039;&#039;27 June 13&#039;&#039;&#039; Nintendo released system update [[6.1.0-11]] (6.1.0-12 for all regions except USA).&lt;br /&gt;
*&#039;&#039;&#039;17 June 13&#039;&#039;&#039; Nintendo released system update [[6.0.0-11]] (6.0.0-12 for all regions except USA).&lt;br /&gt;
*&#039;&#039;&#039;4 April 13&#039;&#039;&#039; Nintendo released system update [[5.1.0-11]].&lt;br /&gt;
*&#039;&#039;&#039;25 March 13&#039;&#039;&#039; Nintendo released system update [[5.0.0-11]].&lt;br /&gt;
*&#039;&#039;&#039;14 January 13&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.5.1]] updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;4 December 12&#039;&#039;&#039; Nintendo released system update [[4.5.0-10]].&lt;br /&gt;
*&#039;&#039;&#039;1 December 12&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.4]] updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;2 November 12&#039;&#039;&#039; Added page for [[Fundraiser|Chip decapping fundraiser]]&lt;br /&gt;
*&#039;&#039;&#039;8 January 13&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.5]] updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;23 September 12&#039;&#039;&#039; [[005tools|005tools v0.1b]] by [[User:McHaggis|McHaggis]]&lt;br /&gt;
*&#039;&#039;&#039;19 September 12&#039;&#039;&#039; Nintendo released system update [[4.4.0-10]].&lt;br /&gt;
*&#039;&#039;&#039;17 August 12&#039;&#039;&#039; Nintendo released New Super Mario Bros. 2, the first 3DS title released simultaneously in stores and as an [[eShop]] download.&lt;br /&gt;
*&#039;&#039;&#039;28 July 12&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.3]] (modified by 3DSGuy) updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;24 July 12&#039;&#039;&#039; Nintendo released system update [[4.3.0-10]].&lt;br /&gt;
*&#039;&#039;&#039;26 June 12&#039;&#039;&#039; Nintendo released system update [[4.2.0-9]].&lt;br /&gt;
*&#039;&#039;&#039;19 May 12&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.2.1]] updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;15 May 12&#039;&#039;&#039; Nintendo released its first implementation of 3DS &#039;[[Title list#0004000E - Add-on Content|Add-on Content]]&#039; with the Mario Kart 1.1 update.&lt;br /&gt;
*&#039;&#039;&#039;14 May 12&#039;&#039;&#039; Nintendo released system update [[4.1.0-8]].&lt;br /&gt;
*&#039;&#039;&#039;24 April 12&#039;&#039;&#039; Nintendo released system update [[4.0.0-7]].&lt;br /&gt;
*&#039;&#039;&#039;08 February 12&#039;&#039;&#039; [[CiTRUS|CiTRUS v0.2]] updated by [[User:Xcution|Xcution]]&lt;br /&gt;
*&#039;&#039;&#039;04 February 12&#039;&#039;&#039; [[CiTRUS|CiTRUS v0.1]] released by [[User:Xcution|Xcution]]&lt;br /&gt;
*&#039;&#039;&#039;02 February 12&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.2]] updated by [[User:Elisherer|elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;26 January 12&#039;&#039;&#039; [[Crappy Tiny Reader|CTR - Crappy Tiny Reader v0.07]] updated by [[User:PsyKopaT|PsyKo]]&lt;br /&gt;
*&#039;&#039;&#039;05 January 12&#039;&#039;&#039; [[Crappy Tiny Reader|CTR - Crappy Tiny Reader v0.06]] updated by [[User:PsyKopaT|PsyKo]]&lt;br /&gt;
*&#039;&#039;&#039;21 December 11&#039;&#039;&#039; Nintendo released system update [[3.0.0-6]]&lt;br /&gt;
*&#039;&#039;&#039;21 December 11&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.1.1]] updated by [[User:Elisherer|elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;7 December 11&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v0.96]] updated by [[User:Elisherer|elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;4 September 11&#039;&#039;&#039; [[3DSViewer|3DSViewer v0.1]] released by [[User:Elisherer|elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;1 August 11&#039;&#039;&#039; [[3DS Save DeEncrypter3DS|Save DeEncrypter v1.0]] released by [[User:Blite|Blite]]&lt;br /&gt;
*&#039;&#039;&#039;25 July 11&#039;&#039;&#039; Nintendo released system update [[2.1.0-4]].&lt;br /&gt;
*&#039;&#039;&#039;15 June 11&#039;&#039;&#039; Nintendo released system update [[2.1.0-3]].&lt;br /&gt;
*&#039;&#039;&#039;6 June 11&#039;&#039;&#039; Nintendo released system update [[2.0.0-2]].&lt;br /&gt;
*&#039;&#039;&#039;6 April 11&#039;&#039;&#039; [[DSaveManager|DSaveManager v0.1]] released by [[User:Crediar|crediar]]&lt;br /&gt;
*&#039;&#039;&#039;4 April 11&#039;&#039;&#039; [[3DSaveTool|3DSaveTool v0.2b]] released by [[User:Crediar|crediar]]&lt;br /&gt;
*&#039;&#039;&#039;2 April 11&#039;&#039;&#039; [[3DSaveTool|3DSaveTool v0.1]] released by [[User:Crediar|crediar]]&lt;br /&gt;
*&#039;&#039;&#039;28 March 11&#039;&#039;&#039; Fixed 3DBrew wiki issues, now fully operational!&lt;br /&gt;
*&#039;&#039;&#039;18 March 11&#039;&#039;&#039; 3DBrew launched.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 3DBrew International ==&lt;br /&gt;
Our community is an international community.&lt;br /&gt;
&lt;br /&gt;
We have freedom, and we will express it in our language (but you have to write it in English before ;)!&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=15040</id>
		<title>Homebrew Exploits</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=15040"/>
		<updated>2015-12-24T04:19:08Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Web colors black on red/green aren&amp;#039;t really conducive to reading.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Standalone Homebrew Launcher Exploits==&lt;br /&gt;
The following homebrew exploits can be executed on a previously un-exploited system.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Works on latest fw&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[ninjhax|Ninjhax 1.1b]]&lt;br /&gt;
| From &#039;&#039;&#039;4.0.0-7&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.2.0-20&#039;&#039;&#039;.&lt;br /&gt;
| A cartridge or eShop version (JPN-only) of &amp;quot;Cubic Ninja&amp;quot;.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.net/ninjhax/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [[ninjhax|Ninjhax 2.5]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-7&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.3.0-28&#039;&#039;&#039;.&lt;br /&gt;
|  A cartridge or eShop version (JPN-only) of &amp;quot;Cubic Ninja&amp;quot;.&lt;br /&gt;
| smea&lt;br /&gt;
| [https://smealum.github.io/ninjhax2/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [[smashbroshax|smashbroshax]] (beaconhax)&lt;br /&gt;
| (New 3DS only) From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.3.0-28&#039;&#039;&#039;.&lt;br /&gt;
| Super Smash Bros 3DS (full-game) and a way to broadcast raw wifi beacons. The demo(prior to the updated November 2015 [https://github.com/yellows8/3ds_smashbroshax version]) isn&#039;t usable with the release-archives since the demo doesn&#039;t have SD access(you must build it yourself with the PAYLOADURL option).&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [https://github.com/yellows8/3ds_smashbroshax Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[browserhax]]&lt;br /&gt;
| (Old 3DS) From &#039;&#039;&#039;9.0.0-16&#039;&#039;&#039; to &#039;&#039;&#039;9.5.0-22&#039;&#039;&#039;, &#039;&#039;&#039;9.5.0-23&#039;&#039;&#039; to &#039;&#039;&#039;9.8.0-25&#039;&#039;&#039;, &#039;&#039;&#039;9.9.0-26&#039;&#039;&#039; to &#039;&#039;&#039;10.1.0-27&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(New 3DS) From &#039;&#039;&#039;9.0.0-20&#039;&#039;&#039; to &#039;&#039;&#039;9.2.0-20&#039;&#039;&#039;, &#039;&#039;&#039;9.3.0-21&#039;&#039;&#039; to &#039;&#039;&#039;9.5.0-23&#039;&#039;&#039;, &#039;&#039;&#039;9.6.0-24&#039;&#039;&#039; to &#039;&#039;&#039;9.8.0-25&#039;&#039;&#039;, &#039;&#039;&#039;9.9.0-26&#039;&#039;&#039; to &#039;&#039;&#039;10.1.0-27&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
| An USA, EUR, or JPN system.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [http://yls8.mtheall.com/3dsbrowserhax.php Install]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that ninjhax 1.x is still not obsolete. Even though ninjhax 2.x can be run on 9.3+, this was made possible (amongst other things) by sacrificing the memory remapping exploit used in ninjhax 1.x (rohax). Therefore, things like JIT engines for emulators can only be supported on ninjhax 1.x. Furthermore, ninjhax 2.x does not run on system versions below 9.0.0-X, while ninjhax 1.x does.&lt;br /&gt;
&lt;br /&gt;
==Secondary Exploits==&lt;br /&gt;
Installation of these exploits requires a previously exploited system to install. After installation, they can be used on their own.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Works on latest fw&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [[ironhax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.5.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.3.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 28.&lt;br /&gt;
| A copy of &amp;quot;Ironfall: Invasion&amp;quot; downloaded from eShop before August 11th, 2015. Note the updated version that was released on October 13th, 2015 is not supported.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | Yes&lt;br /&gt;
| [https://github.com/yellows8/oot3dhax oot3dhax]&lt;br /&gt;
| From &#039;&#039;&#039;9.5.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.3.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 28.&lt;br /&gt;
| A gamecard or eShop-install of Legend of Zelda: Ocarina of Time 3D. Besides using the installer app, writing raw saveimages with a save dongle for example is another option. Due to lack of free space with the size of the *hax payload, the only save-slot that can exist in the *gamecard* savedata is the oot3dhax save-slot.&lt;br /&gt;
| Yellows8 / smea et all.&lt;br /&gt;
| See [https://smealum.github.io/3ds/ here].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[menuhax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
|&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [https://github.com/yellows8/3ds_homemenuhax/releases Download]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exploits without Homebrew Launcher (Not recommended)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Warning:&#039;&#039;&#039;&amp;lt;/u&amp;gt; The following exploits can run code, but are missing a 3DSX launcher. They cannot launch any homebrew in the 3DSX format.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Works on latest fw&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[browserhax]] (Without the loader in the 3ds_browserhax_common repo)&lt;br /&gt;
| (Old3DS) From &#039;&#039;&#039;2.1.0-4&#039;&#039;&#039; to &#039;&#039;&#039;3.0.0-6&#039;&#039;&#039;, &#039;&#039;&#039;4.0.0-7&#039;&#039;&#039; to &#039;&#039;&#039;4.5.0-10&#039;&#039;&#039;, &#039;&#039;&#039;5.0.0-11&#039;&#039;&#039; to &#039;&#039;&#039;7.0.0-13&#039;&#039;&#039;, &#039;&#039;&#039;7.1.0-16&#039;&#039;&#039; to &#039;&#039;&#039;9.5.0-22&#039;&#039;&#039;, &#039;&#039;&#039;9.5.0-23&#039;&#039;&#039; to &#039;&#039;&#039;9.8.0-25&#039;&#039;&#039;, &#039;&#039;&#039;9.9.0-26&#039;&#039;&#039; to &#039;&#039;&#039;10.1.0-27&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(New3DS) From &#039;&#039;&#039;9.0.0-20&#039;&#039;&#039; to &#039;&#039;&#039;9.2.0-20&#039;&#039;&#039;, &#039;&#039;&#039;9.3.0-21&#039;&#039;&#039; to &#039;&#039;&#039;9.5.0-23&#039;&#039;&#039;, &#039;&#039;&#039;9.6.0-24&#039;&#039;&#039; to &#039;&#039;&#039;9.8.0-25&#039;&#039;&#039;, &#039;&#039;&#039;9.9.0-26&#039;&#039;&#039; to &#039;&#039;&#039;10.1.0-27&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
See above section regarding [[10.2.0-28|10.2.0-X]].&lt;br /&gt;
| An USA, EUR, or JPN system.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [[browserhax|Install]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Previous Exploits==&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Warning:&#039;&#039;&#039;&amp;lt;/u&amp;gt; These exploits &#039;&#039;&#039;do not work&#039;&#039;&#039;. They are exploits which no longer function at all, regardless of software or firmware revision.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Works on latest fw&lt;br /&gt;
! Name&lt;br /&gt;
! Supported firmwares&lt;br /&gt;
! Requirements&lt;br /&gt;
! Author&lt;br /&gt;
! Install&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: salmon&amp;quot; | No&lt;br /&gt;
| [[tubehax|Tubehax]]&lt;br /&gt;
| None. &#039;&#039;&#039;Was&#039;&#039;&#039;: From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| The YouTube application and an Internet connection. As of October 15, 2015, this is no longer usable due to an update being released which fixes the vuln used by tubehax + app update being forced(see [[YouTube|here]]).&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Internet_Browser&amp;diff=14554</id>
		<title>Internet Browser</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Internet_Browser&amp;diff=14554"/>
		<updated>2015-11-18T12:19:20Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: /* 0x000200BB savedata */ Typo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The 3DS Internet Browser was added in the June 2011 Update for JPN/EUR/USA.&lt;br /&gt;
&lt;br /&gt;
From the Internet Browser help section:&lt;br /&gt;
In compliance with the LGPL, the source code of the OSS is available via the Nintendo website.&lt;br /&gt;
This source code can be downloaded here:&lt;br /&gt;
[http://mediacontent.nintendo-europe.com/NOE/images/service/OpenSources.zip] [http://www.nintendo.co.jp/support/oss/index.html]&lt;br /&gt;
&lt;br /&gt;
The 3DS Internet Browser is [http://en.wikipedia.org/wiki/Netfront Netfront] Browser NX v1.0 based on [http://en.wikipedia.org/wiki/WebKit WebKit] engine.&lt;br /&gt;
&lt;br /&gt;
The browser supports up to 64 bookmarks.&lt;br /&gt;
&lt;br /&gt;
The exheader name of this title is &amp;quot;spider&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The only difference between the ExeFS .code for each region of the Old3DS/New3DS browser, is byte values for the title uniqueID/region, otherwise the binaries are identical.&lt;br /&gt;
&lt;br /&gt;
A [[#v9.9_dummy_web-browser|&amp;quot;dummy&amp;quot; browser]] (which replaces the actual browser) is now being included beginning with games shipping the [[9.9.0-26|9.9.0-X]] system update. In addition, versions of the real browser since 9.9.0-26X now attempt to [[#Forced_system-update|check-in with a Nintendo server]] to determine if the existing browser version is out of date.&lt;br /&gt;
&lt;br /&gt;
==[[New 3DS]] Internet Browser==&lt;br /&gt;
New3DS has a separate browser title, the exheader name is &amp;quot;SKATER&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Unlike the Old3DS browser, this New3DS browser has videos+HTML5 support. This browser also has a filter enabled by default(ExeFS codebin is same for all regions, this filter only applies for JPN region). Disabling it requires paying money with a credit-card, for [[NIM_Services|purchasing]] web-browser [[Title_list/DLC|DLC]].&lt;br /&gt;
&lt;br /&gt;
During startup the browser does various HTTPS comms. When visting an URL, the browser sends a plaintext HTTP POST to here: [http://ars.ifuser.jp:20080/ars2/rating]. The raw POST data begins with &amp;quot;ARS/2.0\r\n\x00&amp;quot;, the rest appears to be encrypted. The server reply content also has this ARS header + encrypted data. This appears to use a fixed xorpad, likely from a fixed encryption CTR/IV. The server content responses for allowed sites, and blocked sites, are fixed. When the server returns that the site is blocked, the browser goes to this page: [http://ars.ifuser.jp/filter/44.html](the Referrer header value is set to the same URL it&#039;s actually requesting).&lt;br /&gt;
&lt;br /&gt;
The WebKit source was updated since the Old3DS browser.&lt;br /&gt;
&lt;br /&gt;
Unlike the Old3DS browser, the New3DS browser uses the following services: [[MVD_Services|mvd:STD]] and [[IR_Services|ir:rst]](DLC-related services are used too but those aren&#039;t New3DS specific).&lt;br /&gt;
&lt;br /&gt;
Video decoding is done with [[MVD_Services|mvd:STD]]. Audio decoding/playback is done with a browser-specific DSP binary. The Old3DS browser used CSND for audio playback, the New3DS browser doesn&#039;t have access to that at all since it uses DSP instead.&lt;br /&gt;
&lt;br /&gt;
The browser manual includes licenses for Android and PacketVideo. The browser uses libstagefright from Android.&lt;br /&gt;
&lt;br /&gt;
===User-Agent and Browser Versions===&lt;br /&gt;
Normal user-agent format: &amp;lt;code style=&amp;quot;font-size:larger;&amp;quot;&amp;gt;Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/&amp;lt;WebKit version&amp;gt; (KHTML, like Gecko) NX/&amp;lt;Netfront version&amp;gt; Mobile NintendoBrowser/&amp;lt;Mobile NintendoBrowser version&amp;gt;.&amp;lt;region&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;region&amp;gt; can be one of the following: &amp;quot;JP&amp;quot;, &amp;quot;US&amp;quot;, or &amp;quot;EU&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mobile NintendoBrowser version(displayed in browser settings)&lt;br /&gt;
! Normal UA&lt;br /&gt;
! Mobile UA&lt;br /&gt;
! CDN Title-version&lt;br /&gt;
! Network-only system-update version&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.9934&lt;br /&gt;
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.8 Mobile NintendoBrowser/1.0.9934.&amp;lt;region&amp;gt;&lt;br /&gt;
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25&lt;br /&gt;
| v10&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| Initial version.&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.9996&lt;br /&gt;
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.10 Mobile NintendoBrowser/1.1.9996.&amp;lt;region&amp;gt;&lt;br /&gt;
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25&lt;br /&gt;
| v1027&lt;br /&gt;
| [[9.3.0-21]]&lt;br /&gt;
| See below regarding OSS changes.&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.10085&lt;br /&gt;
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.13 Mobile NintendoBrowser/1.2.10085.&amp;lt;region&amp;gt;&lt;br /&gt;
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25&lt;br /&gt;
| v2051&lt;br /&gt;
| [[9.6.0-24]]&lt;br /&gt;
| See below.&lt;br /&gt;
|-&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
| v3075&lt;br /&gt;
| v9.9 CUP&lt;br /&gt;
| v9.9 CUP dummy web-browser, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.10126&lt;br /&gt;
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.15 Mobile NintendoBrowser/1.3.10126.US&lt;br /&gt;
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25&lt;br /&gt;
| v3077&lt;br /&gt;
| [[9.9.0-26]]&lt;br /&gt;
| See below.&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.10138&lt;br /&gt;
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.17 Mobile NintendoBrowser/1.4.10138.US&lt;br /&gt;
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25&lt;br /&gt;
| v4096&lt;br /&gt;
| [[10.2.0-28]]&lt;br /&gt;
| See below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the latest Old3DS browser WebKit version at the time the initial New3DS browser was released, was the following: 532.8.&lt;br /&gt;
&lt;br /&gt;
==== OSS 9.0 and 9.3 diff ====&lt;br /&gt;
The following is a diff of the OSS archives from [http://www.nintendo.co.jp/support/oss/index.html here], for v9.0 and v9.3.&lt;br /&gt;
&lt;br /&gt;
 Files NewNintendo3DS_OpenSources9.0.0-/WKC/WebCore/platform/network/WKC/ResourceHandleManagerWKC.cpp and NewNintendo3DS_OpenSources9.3.0-/WKC/WebCore/platform/network/WKC/ResourceHandleManagerWKC.cpp differ&lt;br /&gt;
 Files NewNintendo3DS_OpenSources9.0.0-/WKC/WebKit/WKC/webkit/WKCVersion.h and NewNintendo3DS_OpenSources9.3.0-/WKC/WebKit/WKC/webkit/WKCVersion.h differ&lt;br /&gt;
&lt;br /&gt;
WKC_CUSTOMER_RELEASE_VERSION was changed from &amp;quot;0.5.8&amp;quot; to &amp;quot;0.5.10&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The following code was added to ResourceHandleManager::doRedirect(): curl_easy_setopt(d-&amp;gt;m_handle, CURLOPT_SHARE, 0);&lt;br /&gt;
&lt;br /&gt;
==== v9.6 ====&lt;br /&gt;
WebKit/OSS code was actually updated.&lt;br /&gt;
ExeFS .code was updated. The following files in RomFS were updated:&lt;br /&gt;
* &amp;quot;/banner/CN/Skater.icn&amp;quot; and &amp;quot;/banner/KR/Skater.icn&amp;quot;.&lt;br /&gt;
* &amp;quot;/browser/rootca.pem&amp;quot;&lt;br /&gt;
* &amp;quot;/build/buildinfo.dat&amp;quot;&lt;br /&gt;
* &amp;quot;/cairo.cro.lex&amp;quot; and &amp;quot;/.crr/static.crr&amp;quot;&lt;br /&gt;
* &amp;quot;/lyt/Button/ButtonSelectHSearch.arc&amp;quot;&lt;br /&gt;
* &amp;quot;/lyt/Kbd/Swkbd.arc&amp;quot;&lt;br /&gt;
* &amp;quot;lyt/Kbd.arc&amp;quot;&lt;br /&gt;
* &amp;quot;skater.msbt&amp;quot; under all of the &amp;quot;/message/&amp;lt;region&amp;gt;_&amp;lt;language&amp;gt;/&amp;quot; directories.&lt;br /&gt;
* &amp;quot;/oss.cro.lex&amp;quot;, &amp;quot;/peer.cro.lex&amp;quot;, &amp;quot;/static.crs&amp;quot;, and &amp;quot;/webkit.cro.lex&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The following was added to RomFS:&lt;br /&gt;
* &amp;quot;/favicon/naver.dat&amp;quot;&lt;br /&gt;
* A &amp;quot;KO&amp;quot; directory under &amp;quot;/iwnn&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== v9.9 ====&lt;br /&gt;
ExeFS:/.code was updated.&lt;br /&gt;
&lt;br /&gt;
The only RomFS changes is file-updating, all of the following files were updated:&lt;br /&gt;
 /browser/rootca.pem&lt;br /&gt;
 /build/buildinfo.dat&lt;br /&gt;
 /cairo.cro.lex&lt;br /&gt;
 /.crr/static.crr&lt;br /&gt;
 /message/CN_Simp_Chinese/skater.msbt&lt;br /&gt;
 /message/EU_Dutch/skater.msbt&lt;br /&gt;
 /message/EU_English/skater.msbt&lt;br /&gt;
 /message/EU_French/skater.msbt&lt;br /&gt;
 /message/EU_German/skater.msbt&lt;br /&gt;
 /message/EU_Italian/skater.msbt&lt;br /&gt;
 /message/EU_Portuguese/skater.msbt&lt;br /&gt;
 /message/EU_Russian/skater.msbt&lt;br /&gt;
 /message/EU_Spanish/skater.msbt&lt;br /&gt;
 /message/JP_Japanese/skater.msbt&lt;br /&gt;
 /message/KR_Hangeul/skater.msbt&lt;br /&gt;
 /message/TW_English/skater.msbt&lt;br /&gt;
 /message/TW_Trad_Chinese/skater.msbt&lt;br /&gt;
 /message/US_English/skater.msbt&lt;br /&gt;
 /message/US_French/skater.msbt&lt;br /&gt;
 /message/US_Portuguese/skater.msbt&lt;br /&gt;
 /message/US_Spanish/skater.msbt&lt;br /&gt;
 /oss.cro.lex&lt;br /&gt;
 /peer.cro.lex&lt;br /&gt;
 /static.crs&lt;br /&gt;
 /webkit.cro.lex&lt;br /&gt;
&lt;br /&gt;
See [https://gist.github.com/yellows8/9fb509fde4112339f342 here] for a diff of the OSS(WebKitLibraries/ is not included due to the massive cairo library diff). An exploitable security vuln(which was already known in the context of 3DS webkit) was fixed. [[User:Yellows8|Yellows8]]&#039; private(at the time of writing) exploit for it is based on the PoC from [http://pastebin.com/ufBCQKda here](see the pastebin for the actual pastebin author).&lt;br /&gt;
&lt;br /&gt;
==== v10.2 ====&lt;br /&gt;
The libstagefright build in the main SKATER codebin was updated to a version which fixed libstagefright vuln(s): the vuln used in [[browserhax|browserhax_fright]] at the time of sysupdate release was fixed. The *only* code changed in the main codebin, was code related to libstagefright.&lt;br /&gt;
&lt;br /&gt;
The only RomFS changes is file-updating, all of the following files were updated:&lt;br /&gt;
 /browser/rootca.pem differ&lt;br /&gt;
 /build/buildinfo.dat differ&lt;br /&gt;
 /.crr/static.crr differ&lt;br /&gt;
 /message/CN_Simp_Chinese/skater.msbt differ&lt;br /&gt;
 /message/EU_Dutch/skater.msbt differ&lt;br /&gt;
 /message/EU_English/skater.msbt differ&lt;br /&gt;
 /message/EU_French/skater.msbt differ&lt;br /&gt;
 /message/EU_German/skater.msbt differ&lt;br /&gt;
 /message/EU_Italian/skater.msbt differ&lt;br /&gt;
 /message/EU_Portuguese/skater.msbt differ&lt;br /&gt;
 /message/EU_Russian/skater.msbt differ&lt;br /&gt;
 /message/EU_Spanish/skater.msbt differ&lt;br /&gt;
 /message/JP_Japanese/skater.msbt differ&lt;br /&gt;
 /message/KR_Hangeul/skater.msbt differ&lt;br /&gt;
 /message/TW_English/skater.msbt differ&lt;br /&gt;
 /message/TW_Trad_Chinese/skater.msbt differ&lt;br /&gt;
 /message/US_English/skater.msbt differ&lt;br /&gt;
 /message/US_French/skater.msbt differ&lt;br /&gt;
 /message/US_Portuguese/skater.msbt differ&lt;br /&gt;
 /message/US_Spanish/skater.msbt differ&lt;br /&gt;
 /oss.cro.lex differ&lt;br /&gt;
 /static.crs differ&lt;br /&gt;
 /webkit.cro.lex differ&lt;br /&gt;
&lt;br /&gt;
OSS diff:&lt;br /&gt;
 diff --git a/NewNintendo3DS_OpenSources9.9.0-/WKC/WebKit/WKC/webkit/WKCVersion.h b/NewNintendo3DS_OpenSources10.2.0-/WKC/WebKit/WKC/webkit/WKCVersion.h&lt;br /&gt;
 index 4543297..0860336 100644&lt;br /&gt;
 --- a/NewNintendo3DS_OpenSources9.9.0-/WKC/WebKit/WKC/webkit/WKCVersion.h&lt;br /&gt;
 +++ b/NewNintendo3DS_OpenSources10.2.0-/WKC/WebKit/WKC/webkit/WKCVersion.h&lt;br /&gt;
 @@ -29,7 +29,7 @@&lt;br /&gt;
  #define WKC_VERSION_CHECK(major, minor, micro) \&lt;br /&gt;
      (((major)*10000) + ((minor)*100) + (micro)) &amp;gt;= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))&lt;br /&gt;
  &lt;br /&gt;
 -#define WKC_CUSTOMER_RELEASE_VERSION &amp;quot;0.5.15&amp;quot;&lt;br /&gt;
 +#define WKC_CUSTOMER_RELEASE_VERSION &amp;quot;0.5.17&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  #define WKC_WEBKIT_VERSION &amp;quot;536.30&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 diff --git a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/ChangeLog b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/ChangeLog&lt;br /&gt;
 index a5abb35..cf5a9fa 100644&lt;br /&gt;
 --- a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/ChangeLog&lt;br /&gt;
 +++ b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/ChangeLog&lt;br /&gt;
 @@ -1,3 +1,12 @@&lt;br /&gt;
 +2013-11-05  Ryosuke Niwa  &amp;lt;rniwa@webkit.org&amp;gt;&lt;br /&gt;
 +&lt;br /&gt;
 +        Use-after-free in SliderThumbElement::dragFrom&lt;br /&gt;
 +        https://bugs.webkit.org/show_bug.cgi?id=123873&lt;br /&gt;
 +&lt;br /&gt;
 +        Reviewed by Andreas Kling.&lt;br /&gt;
 +&lt;br /&gt;
 +        Merge https://chromium.googlesource.com/chromium/blink/+/04a23bfca2d04101a1828d36ff36c29f3a24f34b&lt;br /&gt;
 +&lt;br /&gt;
  2015-02-06  Maciej Stachowiak  &amp;lt;mjs@apple.com&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
          REGRESSION(r179706): Caused memory corruption on some tests (Requested by _ap_ on #webkit).&lt;br /&gt;
 @@ -879,7 +888,7 @@&lt;br /&gt;
          * rendering/RenderLineBoxList.cpp:&lt;br /&gt;
          (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):&lt;br /&gt;
  &lt;br /&gt;
 -2014-01-21  LÃ¡szlÃ³ LangÃ³  &amp;lt;llango.u-szeged@partner.samsung.com&amp;gt;&lt;br /&gt;
 +2014-01-21  Laszlo Lango  &amp;lt;llango.u-szeged@partner.samsung.com&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
          Assertion failure in Range::nodeWillBeRemoved&lt;br /&gt;
          https://bugs.webkit.org/show_bug.cgi?id=121694&lt;br /&gt;
 @@ -1879,7 +1888,7 @@&lt;br /&gt;
  &lt;br /&gt;
  2012-09-14  Simon Fraser  &amp;lt;simon.fraser@apple.com&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 -        REGRESSION: transition doesnât always override transition-property&lt;br /&gt;
 +        REGRESSION: transition doesnft always override transition-property&lt;br /&gt;
          https://bugs.webkit.org/show_bug.cgi?id=96658&lt;br /&gt;
  &lt;br /&gt;
          Reviewed by Dean Jackson.&lt;br /&gt;
 @@ -3691,8 +3700,8 @@&lt;br /&gt;
              glyph with font data for the primary font, presumably to meet the SVG&lt;br /&gt;
              spec requirement: &amp;quot;If the references to alternate glyphs do not result&lt;br /&gt;
              in successful identification of alternate glyphs to use, then the&lt;br /&gt;
 -            character(s) that are inside of the çª¶åltGlyphçª¶?element are rendered as&lt;br /&gt;
 -            if the çª¶åltGlyphçª¶?element were a çª¶?spançª¶?element instead.&amp;quot;&lt;br /&gt;
 +            character(s) that are inside of the âaltGlyphâ?element are rendered as&lt;br /&gt;
 +            if the âaltGlyphâ?element were a â?spanâ?element instead.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
              If the alt glyph is not then found we are in the case from the spec&lt;br /&gt;
              and indeed we should use the primary font. However, we end up replacing the GlyphPage&lt;br /&gt;
 diff --git a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/html/RangeInputType.cpp b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/html/RangeInputType.cpp&lt;br /&gt;
 index 484adec..d7e9e8d 100644&lt;br /&gt;
 --- a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/html/RangeInputType.cpp&lt;br /&gt;
 +++ b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/html/RangeInputType.cpp&lt;br /&gt;
 @@ -164,7 +164,7 @@ void RangeInputType::handleMouseDownEvent(MouseEvent* event)&lt;br /&gt;
      ASSERT(element()-&amp;gt;hasShadowRoot());&lt;br /&gt;
      if (targetNode != element() &amp;amp;&amp;amp; !targetNode-&amp;gt;isDescendantOf(element()-&amp;gt;shadowTree()-&amp;gt;oldestShadowRoot()))&lt;br /&gt;
          return;&lt;br /&gt;
 -    SliderThumbElement* thumb = sliderThumbElementOf(element());&lt;br /&gt;
 +    RefPtr&amp;lt;SliderThumbElement&amp;gt; thumb = sliderThumbElementOf(element());&lt;br /&gt;
      if (targetNode == thumb)&lt;br /&gt;
          return;&lt;br /&gt;
      thumb-&amp;gt;dragFrom(event-&amp;gt;absoluteLocation());&lt;br /&gt;
&lt;br /&gt;
=== New3DS Browser Specifications ===&lt;br /&gt;
[http://www.nintendo.co.jp/3ds/new/features/modal_net.html]&lt;br /&gt;
&lt;br /&gt;
English version(Google translate):&lt;br /&gt;
* &amp;quot;Browser engine: NetFront® Browser NX v3.0&amp;quot;&lt;br /&gt;
* &amp;quot;User agent: Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.*.*.* Mobile NintendoBrowser/1.0.****.JP&lt;br /&gt;
** The *** is described version information.&lt;br /&gt;
** When you use the &amp;quot;mobile version of the request&amp;quot; function, which is different from those described above string.&amp;quot;&lt;br /&gt;
* &amp;quot;Supported protocols: HTTP1.0/HTTP1.1/SSL3.0/TLS1.0/TLS1.1/TLS1.2&amp;quot;&lt;br /&gt;
* &amp;quot;Web standard: HTML4.01 / HTML5 / XHTML1.1 / Fullscreen / Gamepad / SVG / WebSocket / Video Subtitle / WOFF / Web Messaging / Server-Sent / Web Storage of part / XMLHttpRequest / canvas / Video / DOM1-3 / ECMAScript / CSS1 / CSS2.1 / CSS3 part of&amp;quot;&lt;br /&gt;
* &amp;quot;Image format: bmp / ​​gif / ico / jpeg / png / svg (There are, however, it is not possible to display some image.)&amp;quot;&lt;br /&gt;
* &amp;quot;Image preview: mpo / jpeg (There are, however, it is not possible to display some image.)&amp;quot;&lt;br /&gt;
* &amp;quot;Video format: MP4, M3U8 + TS (HTTPLiveStreaming) (However, there are some you can not play the video.)&amp;quot;&lt;br /&gt;
* &amp;quot;Video codec: H.264 - MPEG-4 AVC Video (max 854x480 level 3.2, 3D compatible) (However, there are some you can not play the video.)&amp;quot;&lt;br /&gt;
* &amp;quot;Audio codec: AAC - ISO / IEC 14496-3 MPEG-4AAC, MP3 &amp;lt;br /&amp;gt; (However, there are some you can not play the video.)&amp;quot;&lt;br /&gt;
* &amp;quot;Of 3D video at the time of upload format: .mkv (However, in order to play the video, you must format is converted in the upload to the site. In addition, even if it is converted you might not be able to play.)&amp;quot;&lt;br /&gt;
* &amp;quot;It does not correspond to the plug-ins such as plug-in Adobe Flash.&amp;quot;&lt;br /&gt;
* &amp;quot;Use the Active Rating System of filtering function: Digital Arts, Inc. provides. At the time of access to Web content, and implementing the decision of whether access is permitted based on the category information. Feature that can limit access to Web content that may be inappropriate for viewing by the determination result.&amp;quot;&lt;br /&gt;
* &amp;quot;I will request the display of the mobile version page of the web page you are viewing request function the mobile version. (However, if the web page does not correspond to the mobile version of the page does not change the display.)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MJPEG + .avi is also supported.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Old3DS browser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User-Agent and Browser Versions ===&lt;br /&gt;
User-agent format: &amp;lt;code style=&amp;quot;font-size:larger;&amp;quot;&amp;gt;Mozilla/5.0 (Nintendo 3DS; U; ; &amp;lt;lang&amp;gt;) Version/&amp;lt;version&amp;gt;.&amp;lt;region&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lang&amp;gt; is &amp;quot;en&amp;quot;, &amp;quot;fr&amp;quot;, etc. &amp;lt;region&amp;gt; is &amp;quot;US&amp;quot;, &amp;quot;EU&amp;quot;, etc. See below for &amp;lt;version&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser version&lt;br /&gt;
! CDN Title-version&lt;br /&gt;
! Network-only system-update version&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.7412&lt;br /&gt;
| v6&lt;br /&gt;
| [[2.0.0-2|2.0.0-2]]&lt;br /&gt;
| This was the initial version.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7455&lt;br /&gt;
| v1024&lt;br /&gt;
| [[2.1.0-4]]&lt;br /&gt;
| ExeFS .code was updated, both of the CROs(webkit/OSS) were updated too.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7498&lt;br /&gt;
| v2050&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| ExeFS .code was updated, both of the CROs(webkit/OSS) were updated too. The manual CFA was updated as well.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7552&lt;br /&gt;
| v3075&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| ExeFS .code and icon were updated, both of the CROs(webkit/OSS) were updated too. The manual CFA was updated as well.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7552&lt;br /&gt;
| v3088&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| The main NCCH wasn&#039;t updated at all(same TMD contentID/content-hash as the previous version), only the manual CFA for this title was updated.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7567&lt;br /&gt;
| v4096&lt;br /&gt;
| [[7.1.0-16]]&lt;br /&gt;
| The CXI .code was updated, some data in the RomFS was updated(none of the CROs such as webkit.cro were updated). The manual CFA was updated too.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7585&lt;br /&gt;
| v5121&lt;br /&gt;
| [[9.5.0-23]]&lt;br /&gt;
| The CXI .code was updated, and the manual CFA was updated. RomFS changes:&lt;br /&gt;
* &amp;quot;/browser/rootca.pem&amp;quot; updated&lt;br /&gt;
* &amp;quot;/cro/oss.cro&amp;quot; updated&lt;br /&gt;
* &amp;quot;/cro/static.crs&amp;quot; updated&lt;br /&gt;
* &amp;quot;/cro/webkit.cro&amp;quot; updated&lt;br /&gt;
* &amp;quot;/.crr/static.crr&amp;quot; updated&lt;br /&gt;
* &amp;quot;/layout/dialogheader/WirelessSwitchOff.arc&amp;quot; was removed&lt;br /&gt;
* &amp;quot;/layout/favorite/favicondata/KOR.arc&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
A vuln used in a public(at the time of this sysupdate) webkit exploit for spider was fixed, which also fixed the removewinframe exploit from [https://github.com/yellows8/3ds_webkithax here].&lt;br /&gt;
|-&lt;br /&gt;
| None&lt;br /&gt;
| v6147&lt;br /&gt;
| v9.9 CUP&lt;br /&gt;
| v9.9 CUP dummy web-browser, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7610&lt;br /&gt;
| v6149&lt;br /&gt;
| [[9.9.0-26]]&lt;br /&gt;
| See below.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7616&lt;br /&gt;
| v7168&lt;br /&gt;
| [[10.2.0-28]]&lt;br /&gt;
| See below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Old3DS v9.9 ===&lt;br /&gt;
ExeFS:/.code was updated.&lt;br /&gt;
&lt;br /&gt;
The only changes in RomFS were file-updating, the following files were updated:&lt;br /&gt;
 /browser/rootca.pem&lt;br /&gt;
 /cro/oss.cro&lt;br /&gt;
 /cro/static.crs&lt;br /&gt;
 /cro/webkit.cro&lt;br /&gt;
 /.crr/static.crr&lt;br /&gt;
 /message/CN_Simp_Chinese/spider.msbt&lt;br /&gt;
 /message/EU_Dutch/spider.msbt&lt;br /&gt;
 /message/EU_English/spider.msbt&lt;br /&gt;
 /message/EU_French/spider.msbt&lt;br /&gt;
 /message/EU_German/spider.msbt&lt;br /&gt;
 /message/EU_Italian/spider.msbt&lt;br /&gt;
 /message/EU_Portuguese/spider.msbt&lt;br /&gt;
 /message/EU_Russian/spider.msbt&lt;br /&gt;
 /message/EU_Spanish/spider.msbt&lt;br /&gt;
 /message/JP_Japanese/spider.msbt&lt;br /&gt;
 /message/KR_Hangeul/spider.msbt&lt;br /&gt;
 /message/TW_English/spider.msbt&lt;br /&gt;
 /message/TW_Trad_Chinese/spider.msbt&lt;br /&gt;
 /message/US_English/spider.msbt&lt;br /&gt;
 /message/US_French/spider.msbt&lt;br /&gt;
 /message/US_Portuguese/spider.msbt&lt;br /&gt;
 /message/US_Spanish/spider.msbt&lt;br /&gt;
&lt;br /&gt;
OSS diff for v9.5 and v9.9, without the .dox changes:&lt;br /&gt;
&lt;br /&gt;
 diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/WKC/WebKit/WKC/webkit/WKCVersion.h b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h&lt;br /&gt;
 index be5ff09..55a7274 100644&lt;br /&gt;
 --- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/WKC/WebKit/WKC/webkit/WKCVersion.h&lt;br /&gt;
 +++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h&lt;br /&gt;
 @@ -29,7 +29,7 @@&lt;br /&gt;
  #define WKC_VERSION_CHECK(major, minor, micro) \&lt;br /&gt;
      (((major)*10000) + ((minor)*100) + (micro)) &amp;gt;= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))&lt;br /&gt;
  &lt;br /&gt;
 -#define WKC_CUSTOMER_RELEASE_VERSION &amp;quot;1.8.14&amp;quot;&lt;br /&gt;
 +#define WKC_CUSTOMER_RELEASE_VERSION &amp;quot;1.8.16&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  #define WKC_WEBKIT_VERSION &amp;quot;532.7&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/webkit/WebCore/rendering/RenderBox.cpp b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderBox.cpp&lt;br /&gt;
 index da4127e..d03403e 100644&lt;br /&gt;
 --- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/webkit/WebCore/rendering/RenderBox.cpp&lt;br /&gt;
 +++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderBox.cpp&lt;br /&gt;
 @@ -305,23 +305,23 @@ int RenderBox::scrollHeight() const&lt;br /&gt;
  &lt;br /&gt;
  int RenderBox::scrollLeft() const&lt;br /&gt;
  {&lt;br /&gt;
 -    return hasOverflowClip() ? layer()-&amp;gt;scrollXOffset() : 0;&lt;br /&gt;
 +    return layer() &amp;amp;&amp;amp; hasOverflowClip() ? layer()-&amp;gt;scrollXOffset() : 0;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  int RenderBox::scrollTop() const&lt;br /&gt;
  {&lt;br /&gt;
 -    return hasOverflowClip() ? layer()-&amp;gt;scrollYOffset() : 0;&lt;br /&gt;
 +    return layer() &amp;amp;&amp;amp; hasOverflowClip() ? layer()-&amp;gt;scrollYOffset() : 0;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  void RenderBox::setScrollLeft(int newLeft)&lt;br /&gt;
  {&lt;br /&gt;
 -    if (hasOverflowClip())&lt;br /&gt;
 +    if (hasOverflowClip() &amp;amp;&amp;amp; layer())&lt;br /&gt;
          layer()-&amp;gt;scrollToXOffset(newLeft);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void RenderBox::setScrollTop(int newTop)&lt;br /&gt;
  {&lt;br /&gt;
 -    if (hasOverflowClip())&lt;br /&gt;
 +    if (hasOverflowClip() &amp;amp;&amp;amp; layer())&lt;br /&gt;
          layer()-&amp;gt;scrollToYOffset(newTop);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== Old3DS v10.2 ===&lt;br /&gt;
The slider vuln from [https://github.com/yellows8/3ds_webkithax here] was fixed in the Old3DS browser it seems.&lt;br /&gt;
&lt;br /&gt;
The main codebin .text only increased by 0x10-bytes.&lt;br /&gt;
&lt;br /&gt;
The only changes in RomFS was that the following files were updated:&lt;br /&gt;
 /cro/oss.cro&lt;br /&gt;
 /cro/static.crs&lt;br /&gt;
 /cro/webkit.cro&lt;br /&gt;
 /.crr/static.crr&lt;br /&gt;
&lt;br /&gt;
OSS diff:&lt;br /&gt;
 diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/WKC/WebKit/WKC/webkit/WKCVersion.h&lt;br /&gt;
 index 55a7274..fc153c4 100644&lt;br /&gt;
 --- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h&lt;br /&gt;
 +++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/WKC/WebKit/WKC/webkit/WKCVersion.h&lt;br /&gt;
 @@ -29,7 +29,7 @@&lt;br /&gt;
  #define WKC_VERSION_CHECK(major, minor, micro) \&lt;br /&gt;
      (((major)*10000) + ((minor)*100) + (micro)) &amp;gt;= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))&lt;br /&gt;
  &lt;br /&gt;
 -#define WKC_CUSTOMER_RELEASE_VERSION &amp;quot;1.8.16&amp;quot;&lt;br /&gt;
 +#define WKC_CUSTOMER_RELEASE_VERSION &amp;quot;1.8.17&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  #define WKC_WEBKIT_VERSION &amp;quot;532.7&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderSlider.cpp b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/webkit/WebCore/rendering/RenderSlider.cpp&lt;br /&gt;
 index b2f5cef..1dd3dbd 100644&lt;br /&gt;
 --- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderSlider.cpp&lt;br /&gt;
 +++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/webkit/WebCore/rendering/RenderSlider.cpp&lt;br /&gt;
 @@ -221,6 +221,7 @@ RenderSlider::~RenderSlider()&lt;br /&gt;
  {&lt;br /&gt;
      if (m_thumb)&lt;br /&gt;
          m_thumb-&amp;gt;detach();&lt;br /&gt;
 +    m_thumb = 0;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  int RenderSlider::baselinePosition(bool, bool) const&lt;br /&gt;
 @@ -493,7 +494,8 @@ void RenderSlider::forwardEvent(Event* event)&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
 -    m_thumb-&amp;gt;defaultEventHandler(event);&lt;br /&gt;
 +    if (m_thumb)&lt;br /&gt;
 +        m_thumb-&amp;gt;defaultEventHandler(event);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  bool RenderSlider::inDragMode() const&lt;br /&gt;
&lt;br /&gt;
== Forced system-update ==&lt;br /&gt;
The Old3DS/New3DS Internet Browser updated with [[9.9.0-26]] now includes the following message string:&lt;br /&gt;
 In order to use the Internet &lt;br /&gt;
 browser, a system update &lt;br /&gt;
 is required.&lt;br /&gt;
 To perform a system update, &lt;br /&gt;
 select System Update from Other&lt;br /&gt;
 Settings in System Settings.&lt;br /&gt;
&lt;br /&gt;
This wasn&#039;t enforced(web-browser displaying the above message when the installed browser isn&#039;t the latest version) until October 26, 2015.&lt;br /&gt;
&lt;br /&gt;
This message only triggers when attempting to load a web-page. This is only handled the first time the browser accesses a web-page, during this browser session.&lt;br /&gt;
&lt;br /&gt;
The browser codebins starting with v9.9 now contain the following URL strings:&lt;br /&gt;
* Old3DS: &amp;lt;nowiki&amp;gt;&amp;quot;https://cbvc.cdn.nintendo.net/CTR/1/&amp;lt;region&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* New3DS: &amp;lt;nowiki&amp;gt;&amp;quot;https://cbvc.cdn.nintendo.net/SNAKE/1/&amp;lt;region&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;region&amp;gt; string is one of the following:&lt;br /&gt;
* &amp;quot;JPN&amp;quot;&lt;br /&gt;
* &amp;quot;USA&amp;quot;&lt;br /&gt;
* &amp;quot;EUR&amp;quot;&lt;br /&gt;
* &amp;quot;KOR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Starting with the browser from [[10.2.0-28]], the &amp;quot;1&amp;quot; in the above URLs were changed to &amp;quot;2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
As of October 26, 2015, the &amp;quot;1&amp;quot; URLs return the browser-version for v9.9(decimal number as a string without any &amp;quot;.&amp;quot;), while the &amp;quot;2&amp;quot; URLs returns 0.&lt;br /&gt;
&lt;br /&gt;
 if(internal_browserver &amp;gt; server_browserver)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;lt;safe&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
     &amp;lt;update message&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Hence, internal_browserver == server_browserver will trigger the sysupdate message, which appears to be the normal way to indicate that the current browser is outdated(see above).&lt;br /&gt;
&lt;br /&gt;
There is a cache for this in savedata. The request is only done when at least 24-hours have passed since the last time the request was done(see the below savedata section).&lt;br /&gt;
&lt;br /&gt;
It is still possible to guard against this update by blocking the previous URLs using a proxy. &lt;br /&gt;
It is not possible to remove the update message by entering the [[Recovery Mode]].&lt;br /&gt;
&lt;br /&gt;
=== Page request ===&lt;br /&gt;
The browser(with New3DS at least) does the following with [[HTTP_Services|HTTPC]] for requesting the above page:&lt;br /&gt;
* Initializes the HTTP context and uses [[HTTPC:InitializeConnectionSession]] + [[HTTPC:SetProxyDefault]].&lt;br /&gt;
* Uses [[HTTP_Services|HTTPC]] command 0x250080 twice with cmd[1]=contexthandle: first time cmd[2]=0x3, second time cmd[2]=0x6.&lt;br /&gt;
* Then [[HTTPC:AddTrustedRootCA]] is used 48 times to setup 48 trusted root CAs. This appears to be every cert in the browser &amp;quot;romfs:/browser/rootca.pem&amp;quot; file converted to DER, in the same order from there(in other words, every single root CA the browser trusts by default for normal web-browsing). It&#039;s unknown whether any of these actually gets used at all.&lt;br /&gt;
* Then [[HTTPC:BeginRequest]] is used.&lt;br /&gt;
* Then [[HTTPC:ReceiveDataTimeout]] is used, the recv-size seems to be fixed to 0x20.&lt;br /&gt;
* Then [[HTTPC:GetResponseStatusCodeTimeout]] is used.&lt;br /&gt;
* Then [[HTTPC:GetDownloadSizeState]] is used.&lt;br /&gt;
* Then the HTTP context is closed.&lt;br /&gt;
&lt;br /&gt;
Raw request data(New3DS USA v10.2 browser):&lt;br /&gt;
 000000: 47 45 54 20 2f 53 4e 41 4b 45 2f 32 2f 55 53 41  GET /SNAKE/2/USA&lt;br /&gt;
 000010: 20 48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a   HTTP/1.1..Host:&lt;br /&gt;
 000020: 20 63 62 76 63 2e 63 64 6e 2e 6e 69 6e 74 65 6e   cbvc.cdn.ninten&lt;br /&gt;
 000030: 64 6f 2e 6e 65 74 0d 0a 0d 0a                    do.net....&lt;br /&gt;
&lt;br /&gt;
== v9.9 dummy web-browser ==&lt;br /&gt;
The gamecard v9.9 sysupdate included with some games contains a dummy Old3DS/New3DS web-browser. The *only* thing this title does is display the same message listed in the above forced-update section. The message files in RomFS *only* contain that message string above. There are no &amp;quot;http&amp;quot; strings in the main codebin, and [[RO_Services|RO]] isn&#039;t used either(no CRO data in RomFS at all). Both browsers are internally called &amp;quot;dummySpider&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hence, if you update your system from pre-v9.9 using a gamecard with v9.9, the system web-browser will be rendered *completely* useless until you install a system-update from CDN(no network requests involved here).&lt;br /&gt;
&lt;br /&gt;
== Savedata ==&lt;br /&gt;
=== New3DS ===&lt;br /&gt;
On newer SKATER versions, it appears *all* NAND savedata is stored under the [[System_SaveData|0x000200BB]] savedata.&lt;br /&gt;
&lt;br /&gt;
==== 0x000200BB savedata ====&lt;br /&gt;
This only contains &amp;quot;t.bin&amp;quot; with filesize 0xadf80, the format is below.&lt;br /&gt;
&lt;br /&gt;
The timestamp format used here is the number of milliseconds since January 1, 2000(local-time).&lt;br /&gt;
&lt;br /&gt;
When using the &amp;quot;Initialize savedata&amp;quot; option in the browser, that deletes this savedata file/image then exits the browser. This file is then re-created when the browser gets started again.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4?&lt;br /&gt;
| This counter is incremented each time the savedata is written.&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp for when the savedata was last written.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x15?&lt;br /&gt;
| This is all-zeros on non-JPN systems. On JPN systems where the browser filter is disabled, this is a string in the following format: &amp;quot;4110-%016llX&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x8&lt;br /&gt;
| s64 timestamp, can be either a normal positive timestamp or a relative negative one. Used with the forced-update described above. When an update is detected this timestamp is negative, otherwise this is a normal positive timestamp(it&#039;s unknown how exactly this timestamp is checked). When positive, this seems to be the last time the forced-update HTTPS request was done where no update was needed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Web Standards==&lt;br /&gt;
*HTML 4.01&lt;br /&gt;
*HTML 5 (120/400 score on [http://www.html5test.com HTML5Test.com])&lt;br /&gt;
*XHTML 1.1&lt;br /&gt;
*CSS 1&lt;br /&gt;
*CSS 2.1&lt;br /&gt;
*CSS 3 (some functionality is unavailable)&lt;br /&gt;
*DOM Levels 1-3&lt;br /&gt;
*ECMAScript (partial support for ECMA-262 5th Edition)&lt;br /&gt;
*XMLHttpRequest Level 2&lt;br /&gt;
*Canvas Element (some functionality is unavailable)&lt;br /&gt;
&lt;br /&gt;
==Protocols==&lt;br /&gt;
*HTTP 1.0&lt;br /&gt;
*HTTP 1.1&lt;br /&gt;
*SSLv3&lt;br /&gt;
*TLS 1.0&lt;br /&gt;
&lt;br /&gt;
==Image Formats==&lt;br /&gt;
*[[File_Formats|MPO]]&lt;br /&gt;
*GIF&lt;br /&gt;
*JPEG&lt;br /&gt;
*PNG&lt;br /&gt;
*BMP&lt;br /&gt;
*ICO (some files cannot be displayed)&lt;br /&gt;
&lt;br /&gt;
==Plug-Ins==&lt;br /&gt;
&lt;br /&gt;
Plug-ins (such as Adobe Flash) are not supported.&lt;br /&gt;
&lt;br /&gt;
==Other details==&lt;br /&gt;
&lt;br /&gt;
*It scored 90/100 on [http://acid3.acidtests.org/ Acid3] test&lt;br /&gt;
*Images from the Internet can be saved to the [[SD Filesystem|SD Card]] and viewed using the [[Nintendo 3DS Camera]] application.&lt;br /&gt;
*Images saved to an [[SD Filesystem|SD Card]] or to the Nintendo 3DS system memory can be uploaded to blogs or other sites that allow the uploading of photos using :&lt;br /&gt;
 &amp;lt;input type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
* HTML5Test.com say that Drag and drop is supported but it&#039;s not (code on WebKit is ready, but it&#039;s not implemented on interface of browser)&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
&lt;br /&gt;
=== Detect User Agent ===&lt;br /&gt;
&lt;br /&gt;
To detect if the user agent is Nintendo 3DS Browser :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
     if (navigator.userAgent.indexOf(&#039;Nintendo 3DS&#039;) == -1) { //If the UserAgent is not &amp;quot;Nintendo 3DS&amp;quot;&lt;br /&gt;
         location.replace(&#039;http://www.3dbrew.org&#039;); //Redirect to an other page&lt;br /&gt;
     }&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* You can check &amp;lt;em&amp;gt;navigator.platform==&amp;quot;Nintendo 3DS&amp;quot;&amp;lt;/em&amp;gt; as well.&lt;br /&gt;
&lt;br /&gt;
=== Scrolling ===&lt;br /&gt;
&lt;br /&gt;
Scrolling can be altered by modifying &amp;lt;em&amp;gt;document.body.scrollTop&amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt;document.body.scrollLeft&amp;lt;/em&amp;gt;.  However, there are drawbacks related to working with these properties:&lt;br /&gt;
&lt;br /&gt;
* Both properties return 0 when accessed&lt;br /&gt;
* Setting one property resets the other property&#039;s scroll position&lt;br /&gt;
&lt;br /&gt;
In order to set both at the same time (without either resetting to 0), use &amp;lt;em&amp;gt;window.scrollTo&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
==== Key Events ====&lt;br /&gt;
The following buttons trigger the &amp;lt;em&amp;gt;onkeydown&amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt;onkeypress&amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt;onkeyup&amp;lt;/em&amp;gt; events:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; width=&amp;quot;20%&amp;quot;&lt;br /&gt;
! Code !! Button &lt;br /&gt;
|-&lt;br /&gt;
| 13 || A&lt;br /&gt;
|-&lt;br /&gt;
| 37 || Left&lt;br /&gt;
|-&lt;br /&gt;
| 38 || Up&lt;br /&gt;
|-&lt;br /&gt;
| 39 || Right&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Down&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The events cannot have their default action cancelled.  Other buttons do not trigger key events.&lt;br /&gt;
&lt;br /&gt;
==== Touch/Mouse Events ====&lt;br /&gt;
&amp;lt;em&amp;gt;onmousedown&amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt;onmouseup&amp;lt;/em&amp;gt; &amp;amp; &amp;lt;em&amp;gt;onclick&amp;lt;/em&amp;gt; are all triggered by the browser.  However, the &amp;lt;em&amp;gt;onmousedown&amp;lt;/em&amp;gt; event doesn&#039;t trigger until you lift the stylus or you&#039;ve held it on the screen for ~2 seconds—which is when text selection mode is activated—making it pretty much the same as &amp;lt;em&amp;gt;onmouseup&amp;lt;/em&amp;gt;.  The events cannot have their default action cancelled.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;em&amp;gt;onmousemove&amp;lt;/em&amp;gt; and common touch/gesture events are not supported.&lt;br /&gt;
&lt;br /&gt;
== Screen Resolution ==&lt;br /&gt;
&lt;br /&gt;
The up screen resolution is 400×240. However, the viewable area in the browser is only &amp;lt;b&amp;gt;400×220&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The touch screen resolution is 320×240. However, the viewable area in the browser is only &amp;lt;b&amp;gt;320×212&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can have a page span both screens. However, the browser will behave as if the bottom screen is the only active screen and the top screen is scrolled off. This is important when computing CSS coordinates. Items positioned from &amp;quot;bottom&amp;quot; will be positioned based on 220px and not the full 432px of both screens.&lt;br /&gt;
&lt;br /&gt;
== Using Both Screens ==&lt;br /&gt;
&lt;br /&gt;
Generally the easiest way to accomplish the correct layout is to create HTML elements that &amp;quot;contain&amp;quot; the top and bottom screens. Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   &amp;lt;head&amp;gt;&lt;br /&gt;
     &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=400&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;style&amp;gt;&lt;br /&gt;
       body{margin:0px;}&lt;br /&gt;
       #topscreen{width:400px;height:220px;overflow:hidden;}&lt;br /&gt;
       #bottomscreen{width:320px;height:212px;overflow:hidden;margin:0 auto;}&lt;br /&gt;
     &amp;lt;/style&amp;gt;&lt;br /&gt;
   &amp;lt;/head&amp;gt;&lt;br /&gt;
   &amp;lt;body&amp;gt;&lt;br /&gt;
     &amp;amp;lt;div id=&amp;quot;topscreen&amp;quot;&amp;gt;Top Screen&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
     &amp;amp;lt;div id=&amp;quot;bottomscreen&amp;quot;&amp;gt;Bottom Screen&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This scheme allows the page to be easily manipulated through JavaScript.  In order to have the window snap to the correct position, use the following JavaScript code:&lt;br /&gt;
&lt;br /&gt;
 window.setInterval(function () {&lt;br /&gt;
     window.scrollTo(40, 220);  &lt;br /&gt;
 }, 50);&lt;br /&gt;
&lt;br /&gt;
This automatically resets the position if the user accidentally scrolls the page.&lt;br /&gt;
&lt;br /&gt;
==Example Sites==&lt;br /&gt;
&amp;lt;!-- If you have a website that demonstrates these techniques, place it here! --&amp;gt;&lt;br /&gt;
* [http://geekshadow.com/gaming/dev/weaponscolors/3DS/ Weapons and Colors] (Short URL: http://bit.ly/3DSwc)&lt;br /&gt;
* [http://3ds.andysmith.co.uk/jFox.html jFox] (Short URL: http://bit.ly/iB7FqW)&lt;br /&gt;
* [http://ditto3d.com/3ds Ditto3D] (Short URL: http://bit.ly/oVreWA)&lt;br /&gt;
* [http://www.nintendo.com/3ds/internetbrowser/bookmarks Nintendo 3DS Bookmarks] - This is the first bookmark pre-installed in the browser.&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Hackmiibo&amp;diff=14083</id>
		<title>Hackmiibo</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Hackmiibo&amp;diff=14083"/>
		<updated>2015-10-19T09:29:15Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Abandoned project.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{delete|User request.}}&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=14080</id>
		<title>Homebrew Exploits</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=14080"/>
		<updated>2015-10-19T03:20:27Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Move Tubehax to &amp;quot;Previous Exploits&amp;quot;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Standalone Homebrew Launcher Exploits==&lt;br /&gt;
The following homebrew exploits can be executed on a previously un-exploited system.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| [[ninjhax|Ninjhax 1.1b]]&lt;br /&gt;
| From &#039;&#039;&#039;4.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.2.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; is between 7 and 20. &lt;br /&gt;
| A cartridge or eShop version (JPN-only) of &amp;quot;Cubic Ninja&amp;quot;.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.net/ninjhax/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| [[ninjhax|Ninjhax 2.1]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27. &lt;br /&gt;
|  A cartridge or eShop version (JPN-only) of &amp;quot;Cubic Ninja&amp;quot;.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/ninjhax2/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| [[smashbroshax|smashbroshax]] (beaconhax)&lt;br /&gt;
| (New3DS-only) From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| Super Smash Bros 3DS (full-game or demo) and a way to broadcast raw wifi beacons.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [https://github.com/yellows8/3ds_smashbroshax Install]&lt;br /&gt;
|-&lt;br /&gt;
| [[browserhax]]&lt;br /&gt;
| (Old3DS) From &#039;&#039;&#039;9.0.0-16&#039;&#039;&#039; to &#039;&#039;&#039;9.5.0-22&#039;&#039;&#039;, &#039;&#039;&#039;9.5.0-23&#039;&#039;&#039; to &#039;&#039;&#039;9.8.0-25&#039;&#039;&#039;, &#039;&#039;&#039;9.9.0-26&#039;&#039;&#039; to &#039;&#039;&#039;10.1.0-27&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(New3DS) From &#039;&#039;&#039;9.0.0-20&#039;&#039;&#039; to &#039;&#039;&#039;9.2.0-20&#039;&#039;&#039;, &#039;&#039;&#039;9.3.0-21&#039;&#039;&#039; to &#039;&#039;&#039;9.5.0-23&#039;&#039;&#039;, &#039;&#039;&#039;9.6.0-24&#039;&#039;&#039; to &#039;&#039;&#039;9.8.0-25&#039;&#039;&#039;, &#039;&#039;&#039;9.9.0-26&#039;&#039;&#039; to &#039;&#039;&#039;10.1.0-27&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [http://yls8.mtheall.com/3dsbrowserhax.php Install]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that ninjhax 1.x is still not obsolete. Even though ninjhax 2.x can be run on 9.3+, this was made possible (amongst other things) by sacrificing the memory remapping exploit used in ninjhax 1.x (rohax). Therefore, things like JIT engines for emulators can only be supported on ninjhax 1.x. Furthermore, ninjhax 2.x does not run on system versions below 9.0.0-X, while ninjhax 1.x does.&lt;br /&gt;
&lt;br /&gt;
==Secondary Exploits==&lt;br /&gt;
Installation of these exploits requires a previously exploited system to install. After installation, they can be used on their own.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| [[ironhax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.5.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| A copy of &amp;quot;Ironfall: Invasion&amp;quot; downloaded from eShop before August 11th, 2015. Note the updated version that was released on October 13th, 2015 is not supported.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/yellows8/oot3dhax oot3dhax]&lt;br /&gt;
| From &#039;&#039;&#039;9.5.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| A gamecard or eShop-install of Legend of Zelda: Ocarina of Time 3D.&lt;br /&gt;
| Actual hax/payload: Yellows8/smea et all. Installer: Meladroit.&lt;br /&gt;
| [https://github.com/meladroit/oot3dhax_installer Installer]&lt;br /&gt;
|-&lt;br /&gt;
| [[themehax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
|&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [https://github.com/yellows8/3ds_homemenuhax/releases Download]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exploits without Homebrew Launcher (Not recommended)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Warning:&#039;&#039;&#039;&amp;lt;/u&amp;gt; The following exploits can run code, but are missing a 3DSX launcher. They cannot launch any homebrew in the 3DSX format.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| [[browserhax]] (Without the loader in the 3ds_browserhax_common repo)&lt;br /&gt;
| (Old3DS) From &#039;&#039;&#039;2.1.0-4&#039;&#039;&#039; to &#039;&#039;&#039;3.0.0-6&#039;&#039;&#039;, &#039;&#039;&#039;4.0.0-7&#039;&#039;&#039; to &#039;&#039;&#039;4.5.0-10&#039;&#039;&#039;, &#039;&#039;&#039;5.0.0-11&#039;&#039;&#039; to &#039;&#039;&#039;7.0.0-13&#039;&#039;&#039;, &#039;&#039;&#039;7.1.0-16&#039;&#039;&#039; to &#039;&#039;&#039;9.5.0-22&#039;&#039;&#039;, &#039;&#039;&#039;9.5.0-23&#039;&#039;&#039; to &#039;&#039;&#039;9.8.0-25&#039;&#039;&#039;, &#039;&#039;&#039;9.9.0-26&#039;&#039;&#039; to &#039;&#039;&#039;10.1.0-27&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(New3DS) From &#039;&#039;&#039;9.0.0-20&#039;&#039;&#039; to &#039;&#039;&#039;9.2.0-20&#039;&#039;&#039;, &#039;&#039;&#039;9.3.0-21&#039;&#039;&#039; to &#039;&#039;&#039;9.5.0-23&#039;&#039;&#039;, &#039;&#039;&#039;9.6.0-24&#039;&#039;&#039; to &#039;&#039;&#039;9.8.0-25&#039;&#039;&#039;, &#039;&#039;&#039;9.9.0-26&#039;&#039;&#039; to &#039;&#039;&#039;10.1.0-27&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [[browserhax|Install]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Previous Exploits==&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Warning:&#039;&#039;&#039;&amp;lt;/u&amp;gt; These exploits &#039;&#039;&#039;do not work&#039;&#039;&#039;. They are exploits which no longer function at all, regardless of software or firmware revision.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Supported firmwares&lt;br /&gt;
! Requirements&lt;br /&gt;
! Author&lt;br /&gt;
! Install&lt;br /&gt;
|-&lt;br /&gt;
| [[tubehax|Tubehax]]&lt;br /&gt;
| None. &#039;&#039;&#039;Was&#039;&#039;&#039;: From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| The YouTube application and an Internet connection. As of October 15, 2015, this is no longer usable due to an update being released which fixes the vuln used by tubehax + app update being forced(see [[YouTube|here]]).&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Arm11_Interrupts&amp;diff=14079</id>
		<title>Arm11 Interrupts</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Arm11_Interrupts&amp;diff=14079"/>
		<updated>2015-10-19T03:09:17Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: moved Arm11 Interrupts to ARM11 Interrupts: Capitalization.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[ARM11 Interrupts]]&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ARM11_Interrupts&amp;diff=14078</id>
		<title>ARM11 Interrupts</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ARM11_Interrupts&amp;diff=14078"/>
		<updated>2015-10-19T03:09:17Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: moved Arm11 Interrupts to ARM11 Interrupts: Capitalization.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Interrupts ==&lt;br /&gt;
&lt;br /&gt;
Interrupt priority is 0-0xF&lt;br /&gt;
&lt;br /&gt;
= Private Interrupts =&lt;br /&gt;
&lt;br /&gt;
Each CPU core has 32 software interrupts that are private and belong to that core.  These interrupts are numbers 0-0x1F for each core.  The hardware interrupts are not core-specific and start at interrupt ID 0x20.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  IRQ&lt;br /&gt;
!  Listener&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-0x5&lt;br /&gt;
| &lt;br /&gt;
| MPCore software-interrupt.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| Kernel&lt;br /&gt;
| MPCore software-interrupt.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
| MPCore software-interrupt.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| Kernel&lt;br /&gt;
| MPCore software-interrupt. Used for scheduling.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9-0xF&lt;br /&gt;
| &lt;br /&gt;
| MPCore software-interrupt.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| Kernel&lt;br /&gt;
| MPCore timer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| Kernel&lt;br /&gt;
| MPCore watchdog.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hardware Interrupts =&lt;br /&gt;
&lt;br /&gt;
There are 0x60 hardware interrupts starting at 0x20 and continuing up to 0x7F.  These are not private and are accessible from any core.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  IRQ&lt;br /&gt;
!  Listener&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| gsp, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| gsp, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| gsp, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| gsp, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| gsp, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| gsp, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| Kernel&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| Kernel&lt;br /&gt;
| DMA&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| Kernel&lt;br /&gt;
| DMA&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| Kernel&lt;br /&gt;
| DMA&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| nwm&lt;br /&gt;
| WIFI SDIO Controller @ 0x10122000&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| nwm&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| nwm_dev?&lt;br /&gt;
| WIFI SDIO Controller @ 0x10100000&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| mvd (New3DS)&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| mvd (New3DS)&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| camera&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| camera&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| dsp&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| camera&lt;br /&gt;
| Y2R Conversion Finished&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| mvd (New3DS)&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F&lt;br /&gt;
| mvd (New3DS)&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| pxi, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x51&lt;br /&gt;
| pxi, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| pxi, TwlBg&lt;br /&gt;
| Send Fifo Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x53&lt;br /&gt;
| pxi, TwlBg&lt;br /&gt;
| Receive Fifo Not Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| i2c, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x55&lt;br /&gt;
| i2c, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| spi, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x57&lt;br /&gt;
| spi, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| Kernel&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| mic&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| i2c, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x66&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x69&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x6F&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x72&lt;br /&gt;
| gpio, TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x73&lt;br /&gt;
| TwlBg&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are 2 tables in the ARM11 kernel: the first has 32 * 2(or 32 * 4) 8-byte entries.  This table is for the private interrupts that belong to each core.  The data for each interrupt can be found by doing table_base + (core_num * 0x100) + (intr_num * 8).  The second table is for public hardware interrupts and the data for each interrupt can be retrieved by doing table_base + (intr_num * 8).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Interrupt Table =&lt;br /&gt;
(0xFFF308EC in 10.x)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Type&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=KHeapChunkHeader&amp;diff=13388</id>
		<title>KHeapChunkHeader</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=KHeapChunkHeader&amp;diff=13388"/>
		<updated>2015-09-27T09:16:18Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: neobrain, you appear to be misunderstanding how MediaWiki redirects work. The other similar pages redirect to this one. There are no other pages with this content on them.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Kernel objects]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
memchunkhdr = a data structure describing chunks of memory allocated by the ARM11 kernel.&lt;br /&gt;
&lt;br /&gt;
Here is some code describing the layout of a memory chunk header.&lt;br /&gt;
&lt;br /&gt;
    struct MemoryChunkHeader {&lt;br /&gt;
        int num_pages; // size of this chunk in terms of small pages&lt;br /&gt;
        void* next;&lt;br /&gt;
        void* prev;&lt;br /&gt;
        int unk1;&lt;br /&gt;
        int unk2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;next&amp;quot; and &amp;quot;prev&amp;quot; members are used to implement a linked-list. In fact, chances are this is actually a kernel object inherited from [[KLinkedList]].&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=13329</id>
		<title>Homebrew Exploits</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=13329"/>
		<updated>2015-09-23T10:45:25Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Stop that.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Self-Exploitable==&lt;br /&gt;
The following homebrew exploits can be executed on a previously un-exploited system.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| [[ninjhax|Ninjhax 1.1b]]&lt;br /&gt;
| From &#039;&#039;&#039;4.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.2.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; is between 7 and 20. &lt;br /&gt;
| A cartridge or eShop version (JPN-only) of &amp;quot;Cubic Ninja&amp;quot;.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.net/ninjhax/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| [[ninjhax|Ninjhax 2.1]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27. &lt;br /&gt;
|  A cartridge or eShop version (JPN-only) of &amp;quot;Cubic Ninja&amp;quot;.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/ninjhax2/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| [[tubehax|Tubehax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| The YouTube application and an internet connection.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| [[smashbroshax|smashbroshax]] (beaconhax)&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| Super Smash Bros 3DS (full-game or demo) and a way to broadcast raw wifi beacons. Currently the hb-launcher payload can only be properly booted on New3DS with this, see the repo for details on that.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| [https://github.com/yellows8/3ds_smashbroshax]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that ninjhax 1.x is still not obsolete. Even though ninjhax 2.x can be run on 9.3+, this was made possible (amongst other things) by sacrificing the memory remapping exploit used in ninjhax 1.x (rohax). Therefore, things like JIT engines for emulators can only be supported on ninjhax 1.x. Furthermore, ninjhax 2.x does not run on system versions below 9.0.0-X, while ninjhax 1.x does.&lt;br /&gt;
&lt;br /&gt;
==Secondary Exploits==&lt;br /&gt;
Installation of these exploits requires a previously exploited system.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firmwares&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| [[ironhax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.5.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| A copy of &amp;quot;Ironfall: Invasion&amp;quot; (not available on eShop as of August 11th, 2015) and a self-exploitable title.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/yellows8/oot3dhax oot3dhax]&lt;br /&gt;
| From &#039;&#039;&#039;9.5.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;10.1.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 27.&lt;br /&gt;
| A gamecard or eShop-install of Legend of Zelda: Ocarina of Time 3D.&lt;br /&gt;
| Actual hax/payload: Yellows8/smea et all. Installer linked here(modified version of the ironhax installer): Meladroit.&lt;br /&gt;
| OoT3DHax can be used to boot the otherapp homebrew-launcher payload. An installer for installing the hax-save + payload into the OoT3D savedata can be found [https://github.com/meladroit/oot3dhax_installer here].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=13145</id>
		<title>Homebrew Exploits</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Homebrew_Exploits&amp;diff=13145"/>
		<updated>2015-08-24T09:41:07Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: How about if we split them into self-exploitable and secondary exploits? Feel free to revert if found objectionable.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Self-Exploitable==&lt;br /&gt;
The following homebrew exploits can be executed on a previously un-exploited system.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firms&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| [[ninjhax]]&lt;br /&gt;
| From &#039;&#039;&#039;4.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.2.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; is between 7 and 20. &lt;br /&gt;
| A cartridge or eShop version (JPN-only) of &amp;quot;Cubic Ninja&amp;quot;. (Obsolete?)&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.net/ninjhax/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| [[ninjhax2.1]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.9.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 26. &lt;br /&gt;
| A copy of &amp;quot;Cubic Ninja&amp;quot; (cartridge or eShop version).&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/ninjhax2/ Install]&lt;br /&gt;
|-&lt;br /&gt;
| [[tubehax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.9.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 26.&lt;br /&gt;
| The YouTube application and an internet connection.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Secondary Exploits==&lt;br /&gt;
Installation of these exploits requires a previously exploited system.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Supported firms&lt;br /&gt;
!  Requirements&lt;br /&gt;
!  Author&lt;br /&gt;
!  Install&lt;br /&gt;
|-&lt;br /&gt;
| [[ironhax]]&lt;br /&gt;
| From &#039;&#039;&#039;9.5.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.9.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including 26.&lt;br /&gt;
| A copy of &amp;quot;Ironfall: Invasion&amp;quot; (not available on eShop as of August 11th, 2015) and a self-exploitable title.&lt;br /&gt;
| smea&lt;br /&gt;
| [http://smealum.github.io/3ds/ Install]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Homebrew_Applications&amp;diff=13083</id>
		<title>Homebrew Applications</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Homebrew_Applications&amp;diff=13083"/>
		<updated>2015-08-20T03:10:58Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: /* Applications */ Remove vid3o; can be readded at some point if it ever exists.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Installing==&lt;br /&gt;
Applications are installed by copying the necessary files to the 3ds/ folder in the root of the SD-card. Most applications come with two files:&lt;br /&gt;
* boot.3dsx: The executable.&lt;br /&gt;
* icon.bin: The icon/metadata.&lt;br /&gt;
&lt;br /&gt;
The [[Homebrew Launcher]] will scan the sdcard for all .3dsx files, but will only display an icon for those who have one according to the format described above.&lt;br /&gt;
&lt;br /&gt;
==List==&lt;br /&gt;
&lt;br /&gt;
===Launcher===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/3ds_hb_menu Ninjhax homebrew launcher]&lt;br /&gt;
| Ninjhax homebrew launcher can be started by exploiting a bug in the &#039;&#039;&#039;Cubic Ninja&#039;&#039;&#039; 3DS game.  Works on 3DS devices between version 4.4.0 and 9.2.0.&lt;br /&gt;
| [https://twitter.com/smealum smea] et al.&lt;br /&gt;
| [http://smealum.net/ninjhax/dl/hbmenu/boot.3dsx Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://smealum.github.io/ninjhax2/ Ninjhax homebrew launcher (v2.1)]&lt;br /&gt;
| Ninjhax homebrew launcher can be started by exploiting a bug in the &#039;&#039;&#039;Cubic Ninja&#039;&#039;&#039; 3DS game. Works on all 3DS devices between version 9.0.0 and 9.9.0&lt;br /&gt;
| [https://twitter.com/smealum smea] et al.&lt;br /&gt;
| [http://smealum.github.io/ninjhax2/boot.3dsx Here]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| [http://smealum.github.io/3ds/ Tubehax homebrew launcher]&lt;br /&gt;
| Tubehax homebrew launcher can be started by exploiting a bug in the &#039;&#039;&#039;Youtube&#039;&#039;&#039; 3DS app.  Works on all 3DS devices between version 9.0.0 and 9.9.0.&lt;br /&gt;
| [https://twitter.com/smealum smea] et al.&lt;br /&gt;
| [https://smealum.github.io/ninjhax2/boot.3dsx Here]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| [http://smealum.github.io/3ds/ IRONhax homebrew launcher]&lt;br /&gt;
| IRONhax homebrew launcher can be started by exploiting a bug in the &#039;&#039;&#039;IronFall&#039;&#039;&#039; 3DS game.  Works on all 3DS devices between version 9.0.0 and 9.9.0.  &#039;&#039;&#039;IMPORTANT: Another exploit is required to run this installer.  You need to be able to run the homebrew to install the exploit on your device.&#039;&#039;&#039;&lt;br /&gt;
| [https://twitter.com/smealum smea] et al.&lt;br /&gt;
| [http://smealum.github.io/ninjhax2/installer.zip Here]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Applications===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/yellows8/3ds_homemenu_extdatatool 3DS HomeMenu extdata Tool]&lt;br /&gt;
| Tool for accessing the SD extdata which Home Menu uses. This essentially allows writing custom themes to extdata which get loaded at Home Menu startup.&lt;br /&gt;
| [[User:yellows8|yellows8]]&lt;br /&gt;
| [https://github.com/yellows8/3ds_homemenu_extdatatool/releases]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/markwinap/3DS_Nyan_Cat 3DS Nyan Cat]&lt;br /&gt;
| 3DS Nyan Cat using LIBSF2D.&lt;br /&gt;
| [[User:markwinap|markwinap]]&lt;br /&gt;
| [https://www.dropbox.com/s/e400my3xm0zw74r/nyan_cat.zip?dl=0 Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/plutooo/ctrrpc ctrrpc]&lt;br /&gt;
| A small and easily extensible RPC server/client written in C/Python. Allows you to quickly poke service-commands and syscalls over wifi from a Python shell on your PC. Useful during reverse-engineering.&lt;br /&gt;
| [[User:plutooo|plutoo]]&lt;br /&gt;
| N/A&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/yellows8/ctr-streaming-server ctr-streaming-server]&lt;br /&gt;
| This is a server which runs on a 3DS, which receives audio/video for playback. This can also send [[HID_Shared_Memory|HID]] state to the client (see the README) when enabled. The included parse_hidstream tool can be used to parse that HID data to simulate keyboard/mouse input events, via Linux uinput.&lt;br /&gt;
| [[User:yellows8|yellows8]]&lt;br /&gt;
| N/A&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/DownloadMii/DownloadMii DownloadMii]&lt;br /&gt;
| This is a WIP homebrew online store.&lt;br /&gt;
| [[User:filfat|filfat]]&lt;br /&gt;
| [https://www.downloadmii.com/download/#release Latest]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/linoma/fb43ds fb43ds]&lt;br /&gt;
| This is a simple Facebook&#039;s chat client&lt;br /&gt;
| [[User:linoma|linoma]]&lt;br /&gt;
| [https://github.com/linoma/fb43ds Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Steveice10/FBI FBI]&lt;br /&gt;
| Open source CIA (un)installer.&lt;br /&gt;
| [[User:Steveice10|Steveice10]]&lt;br /&gt;
| [https://www.dropbox.com/s/866yhujdg859mor/FBI.zip?dl=0 Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/iamevn/for-anyone-who-walks-a-lot for-anyone-who-walks-a-lot]&lt;br /&gt;
| Tool to get past the 10 coin per day limit on earning Play Coins by walking.&lt;br /&gt;
| [[User:iamevn|iamevn]]&lt;br /&gt;
| [https://github.com/iamevn/for-anyone-who-walks-a-lot/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mtheall/ftbrony ftBRONY]&lt;br /&gt;
| An FTP server.&lt;br /&gt;
| [[User:mtheall|mtheall]]&lt;br /&gt;
| N/A&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/iamevn/FTP-3DS FTP-3DS]&lt;br /&gt;
| Fork of ftBRONY with a Nintendo theme.&lt;br /&gt;
| [[User:iamevn|iamevn]]&lt;br /&gt;
| [https://github.com/iamevn/FTP-3DS/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/ftPONY ftPONY]&lt;br /&gt;
| A basic FTP server, useful for testing new homebrew versions without swapping the SD card.&lt;br /&gt;
| [[User:smea|smea]]&lt;br /&gt;
| [https://mega.co.nz/#!nchBkL7B!T3vXnX4q8Uwp6APYYTDSZi2bkm25la-Qyz6j4CjsllI Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/zeta0134/3ds-homebrew-browser Homebrew Browser]&lt;br /&gt;
| Download homebrew from the internet!&lt;br /&gt;
| [[User:cromo|cromo]] [[User:zeta0134|zeta0134]]&lt;br /&gt;
| [https://github.com/zeta0134/3ds-homebrew-browser/releases/tag/v0.1 Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Games===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [http://gbatemp.net/threads/release-100-boxes-2ds.384714/ 100 Boxes 2DS]&lt;br /&gt;
| Simple puzzle game.&lt;br /&gt;
| [[User:Cid2mizard|Cid2mizard]]&lt;br /&gt;
| [http://3ds.nintendomax.com/Homebrews/Jeux/100Boxes2DS/100_Boxes_2DS.rar Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/MrJPGames/2048-3D 2048-3D]&lt;br /&gt;
| &amp;quot;2048 was a big hit not so long ago, and I still see many people at my school playing it. So I thought it would be pretty cool to be able to play 2048 on the go on the 3DS.&amp;quot;&lt;br /&gt;
| [[User:MrJPGames|Jasper Peters]]&lt;br /&gt;
| [https://github.com/MrJPGames/2048-3D/blob/master/2048-3D.3dsx?raw=true Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/3dscraft 3DSCraft]&lt;br /&gt;
| Minecraft clone.&lt;br /&gt;
| [https://twitter.com/smealum smea]&lt;br /&gt;
| [http://smealum.github.io/3dscraft/downloads/3dscraft_141120.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/UnsureSherlock/checkers3ds/tree/master checkers3ds]&lt;br /&gt;
| A buggy ASCII checkers game&lt;br /&gt;
| [[User:UnsureSherlock|UnsureSherlock]]&lt;br /&gt;
| [http://www.filedropper.com/checkers3ds Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://gbatemp.net/threads/release-hamsters-2ds.383457/ Hamsters 2DS]&lt;br /&gt;
| A hamster breeding game in text mode.&lt;br /&gt;
| [[User:Cid2mizard|Cid2mizard]]&lt;br /&gt;
| [http://3ds.nintendomax.com/Homebrews/Jeux/Hamsters2DS/Hamsters_2DS.rar Here]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/release-mastermind-3ds.394710/#post-5611660 Mastermind 3DS]&lt;br /&gt;
| Mastermind on 3DS&lt;br /&gt;
| [[User:MrJPGames|Jasper Peters]]&lt;br /&gt;
| [https://github.com/MrJPGames/Mastermind-3DS/blob/master/Mastermind.zip?raw=true Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://gbatemp.net/threads/release-minesweeper-2ds.384185/ Minesweeper 2DS]&lt;br /&gt;
| Minesweeper clone.&lt;br /&gt;
| [[User:Cid2mizard|Cid2mizard]]&lt;br /&gt;
| [http://3ds.nintendomax.com/Homebrews/Jeux/Minesweeper2DS/Minesweeper_2DS.rar Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://gbatemp.net/threads/release-paddle-puffle-3ds.392215/ Paddle Puffle 3DS]&lt;br /&gt;
| A port of [http://puffles.gatuno.mx Paddle Puffle] for the 3DS.&lt;br /&gt;
| Peanut42&lt;br /&gt;
| [http://puffles.gatuno.mx/releases/paddlepuffle3ds.zip Here]&lt;br /&gt;
| [https://github.com/gatuno/PaddlePuffle3DS Yes]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/portal3DS Portal3DS]&lt;br /&gt;
| An adaptation of [https://en.wikipedia.org/wiki/Portal_(video_game) Portal] for the 3DS.&lt;br /&gt;
| [https://twitter.com/smealum smea]&lt;br /&gt;
| N/A&lt;br /&gt;
| [https://github.com/smealum/portal3DS Yes]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gbatemp.net/threads/release-tilemap-2ds.386733/ TileMap 2DS]&lt;br /&gt;
| Puzzle game.&lt;br /&gt;
| [[User:Cid2mizard|Cid2mizard]]&lt;br /&gt;
| [http://3ds.nintendomax.com/Homebrews/Jeux/TileMap2DS/TileMap_2DS.rar Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://gbatemp.net/threads/release-tiles-2ds.385796/ Tiles 2DS]&lt;br /&gt;
| Puzzle game, Lights Out Like.&lt;br /&gt;
| [[User:Cid2mizard|Cid2mizard]]&lt;br /&gt;
| [http://3ds.nintendomax.com/Homebrews/Jeux/Tiles2DS/Tiles_2DS.rar Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Steveice10/WorldOf3DSand World of 3DSand]&lt;br /&gt;
| World of Sand clone.&lt;br /&gt;
| [[User:Steveice10|Steveice10]]&lt;br /&gt;
| [https://www.dropbox.com/s/91tqtydxpny9p1g/WorldOf3DSand.zip?dl=0 Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/yeti3DS Yeti3DS]&lt;br /&gt;
| A quick and dirty port of Derek Evans&#039; Yeti3D software rendering engine.&lt;br /&gt;
| [https://twitter.com/smealum smea]&lt;br /&gt;
| N/A&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Emulators===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/st4rk/3DNES 3DNES]&lt;br /&gt;
| An NES emulator.&lt;br /&gt;
| St4rk&lt;br /&gt;
| [http://filetrip.net/3ds-downloads/homebrew/dl-3dnes-1-2-f32931.html Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Steveice10/3DSGBA 3DSGBA]&lt;br /&gt;
| A GBA emulator.&lt;br /&gt;
| Steveice10&lt;br /&gt;
| [https://www.dropbox.com/s/fraixj1fn9ql3w4/3DSGBA.zip?dl=0 Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/StapleButter/blargSnes blargSnes]&lt;br /&gt;
| A Super Nintendo emulator.&lt;br /&gt;
| StapleButter&lt;br /&gt;
| [http://kuribo64.net/get.php?id=fYRTHLeS0pR3DXFw Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/xerpi/CHIP-3DS CHIP-3DS]&lt;br /&gt;
| A simple and slow CHIP-8 emulator.&lt;br /&gt;
| xerpi&lt;br /&gt;
| [https://www.mediafire.com/?y94yjhzf70fsfsi Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/shinyquagsire23/gpsp CitrAGB]&lt;br /&gt;
| Yet another GBA emulator.&lt;br /&gt;
| shinyquagsire23&lt;br /&gt;
| [https://www.dropbox.com/s/sxb7x34u58g4zo2/3ds.3dsx?dl=0 Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Drenn1/GameYob/tree/master/platform/3ds GameYob]&lt;br /&gt;
| A Game Boy (Color) emulator.&lt;br /&gt;
| Drenn&lt;br /&gt;
| [https://gbatemp.net/threads/gameyob-3ds-gb-c-emu.372523/ Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Demos===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| cubedemo&lt;br /&gt;
| A short demo of Homebrew on 3ds with working sound.&lt;br /&gt;
| [[User:plutoo|plutoo]]&lt;br /&gt;
| [https://mega.co.nz/#!KUQFiQYA!pv8HDEyrmuX6Eyw2hW0opL7gf9Ztmjd9J5pPsvs_rD4 Here]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=News&amp;diff=12967</id>
		<title>News</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=News&amp;diff=12967"/>
		<updated>2015-07-26T06:25:58Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Restore from Google cache.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Adding an item==&lt;br /&gt;
* Log in to the wiki. Editing is disabled if you don&#039;t have an account.&lt;br /&gt;
* Add the news event to the top of the list, using this format for the date: &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;{{#time: d F y}}&amp;lt;nowiki&amp;gt;&#039;&#039;&#039; &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;. Please include the application&#039;s creator, version number, and a link to a page on 3DBrew about the application. No external links please.&lt;br /&gt;
* &#039;&#039;&#039;Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entrees in the list.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Archives==&lt;br /&gt;
For older news, see the [[:News/Archive|news archive]].&lt;br /&gt;
&lt;br /&gt;
=== News ===&lt;br /&gt;
&amp;lt;!-- Add news below --&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;18 July 15&#039;&#039;&#039; smea released [[ninjhax]] 2 beta [http://smealum.github.io/ninjhax2/], enabling ARM11 homebrew execution on Old/New 3DS up to firmware 9.9.0-26.&lt;br /&gt;
*&#039;&#039;&#039;13 July 15&#039;&#039;&#039; Nintendo released system update [[9.9.0-26]].&lt;br /&gt;
*&#039;&#039;&#039;1 June 15&#039;&#039;&#039; Nintendo released system update [[9.8.0-25]].&lt;br /&gt;
*&#039;&#039;&#039;03 May 15&#039;&#039;&#039; smea released regionFOUR [https://github.com/smealum/regionFOUR/blob/master/README.md], enabling region free gaming on latest firmware. (again)&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=News/Archive&amp;diff=12966</id>
		<title>News/Archive</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=News/Archive&amp;diff=12966"/>
		<updated>2015-07-26T06:25:44Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Restore from Google cache.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*&#039;&#039;&#039;20 April 15&#039;&#039;&#039; Nintendo released system update [[9.7.0-25]].&lt;br /&gt;
*&#039;&#039;&#039;23 March 15&#039;&#039;&#039; Nintendo released system update [[9.6.0-24]].&lt;br /&gt;
*&#039;&#039;&#039;2 March 15&#039;&#039;&#039; Nintendo released system update [[9.5.0-23]].&lt;br /&gt;
*&#039;&#039;&#039;15 February 15&#039;&#039;&#039; WinterMute released [http://devkitpro.org/viewtopic.php?f=13&amp;amp;t=8409 devkitARM release 44].&lt;br /&gt;
*&#039;&#039;&#039;2 February 15&#039;&#039;&#039; Nintendo released system update [[9.5.0-22]], which fixes [[3DS System Flaws|firmlaunch-hax]].&lt;br /&gt;
*&#039;&#039;&#039;16 January 15&#039;&#039;&#039; smea released regionthree [https://github.com/smealum/regionthree/blob/master/README.md], enabling region free gaming on latest firmware.&lt;br /&gt;
*&#039;&#039;&#039;24 December 14&#039;&#039;&#039; smea released [[Ninjhax]] 1.1 (&#039;&#039;&#039;NOT&#039;&#039;&#039; a fix for firmware [[9.3.0-21]] or [[9.4.0-21]]).&lt;br /&gt;
*&#039;&#039;&#039;11 December 14&#039;&#039;&#039; Nintendo released system update [[9.4.0-21]].&lt;br /&gt;
*&#039;&#039;&#039;8 December 14&#039;&#039;&#039; Nintendo released system update [[9.3.0-21]], which fixes [[3DS System Flaws|rohax]].&lt;br /&gt;
*&#039;&#039;&#039;20 November 14&#039;&#039;&#039; smea released [[Ninjhax]], the first public [[Homebrew Exploits|homebrew exploit]] compatible with system-versions [[4.0.0-7]]-[[9.2.0-20]].&lt;br /&gt;
*&#039;&#039;&#039;29 October 14&#039;&#039;&#039; Nintendo released system update [[9.2.0-20]].&lt;br /&gt;
*&#039;&#039;&#039;10 October 14&#039;&#039;&#039; Nintendo released system update [[9.1.0-20J]].&lt;br /&gt;
*&#039;&#039;&#039;6 October 14&#039;&#039;&#039; Nintendo released system update [[9.0.0-20]].&lt;br /&gt;
*&#039;&#039;&#039;29 August 14&#039;&#039;&#039; Nintendo announced [[New 3DS]].&lt;br /&gt;
*&#039;&#039;&#039;7 August 14&#039;&#039;&#039; Nintendo released system update [[8.1.0-19]].&lt;br /&gt;
*&#039;&#039;&#039;24 July 14&#039;&#039;&#039; Nintendo released system update [[8.1.0-18]].&lt;br /&gt;
*&#039;&#039;&#039;7 July 14&#039;&#039;&#039; Nintendo released system update [[8.0.0-18]].&lt;br /&gt;
*&#039;&#039;&#039;12 May 14&#039;&#039;&#039; Nintendo released system update [[7.2.0-17]].&lt;br /&gt;
*&#039;&#039;&#039;26 February 14&#039;&#039;&#039; Nintendo released system update [[7.1.0-16]].&lt;br /&gt;
*&#039;&#039;&#039;22 January 14&#039;&#039;&#039; Nintendo released system update [[7.1.0-15]].&lt;br /&gt;
*&#039;&#039;&#039;19 December 13&#039;&#039;&#039; Nintendo released system update [[7.1.0-14]].&lt;br /&gt;
*&#039;&#039;&#039;9 December 13&#039;&#039;&#039; Nintendo released system update [[7.0.0-13]].&lt;br /&gt;
*&#039;&#039;&#039;13 September 13&#039;&#039;&#039; Nintendo released system update [[6.3.0-12]].&lt;br /&gt;
*&#039;&#039;&#039;20 August 13&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.5.3]] updated by [[User:Elisherer|Elisherer]] (Enable trimming NCSD)&lt;br /&gt;
*&#039;&#039;&#039;6 August 13&#039;&#039;&#039; Nintendo released system update [[6.2.0-12]].&lt;br /&gt;
*&#039;&#039;&#039;11 July 13&#039;&#039;&#039; Nintendo released system update [[6.1.0-12U]] for only USA.&lt;br /&gt;
*&#039;&#039;&#039;27 June 13&#039;&#039;&#039; Nintendo released system update [[6.1.0-11]] (6.1.0-12 for all regions except USA).&lt;br /&gt;
*&#039;&#039;&#039;17 June 13&#039;&#039;&#039; Nintendo released system update [[6.0.0-11]] (6.0.0-12 for all regions except USA).&lt;br /&gt;
*&#039;&#039;&#039;4 April 13&#039;&#039;&#039; Nintendo released system update [[5.1.0-11]].&lt;br /&gt;
*&#039;&#039;&#039;25 March 13&#039;&#039;&#039; Nintendo released system update [[5.0.0-11]].&lt;br /&gt;
*&#039;&#039;&#039;14 January 13&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.5.1]] updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;4 December 12&#039;&#039;&#039; Nintendo released system update [[4.5.0-10]].&lt;br /&gt;
*&#039;&#039;&#039;1 December 12&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.4]] updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;2 November 12&#039;&#039;&#039; Added page for [[Fundraiser|Chip decapping fundraiser]]&lt;br /&gt;
*&#039;&#039;&#039;8 January 13&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.5]] updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;23 September 12&#039;&#039;&#039; [[005tools|005tools v0.1b]] by [[User:McHaggis|McHaggis]]&lt;br /&gt;
*&#039;&#039;&#039;19 September 12&#039;&#039;&#039; Nintendo released system update [[4.4.0-10]].&lt;br /&gt;
*&#039;&#039;&#039;17 August 12&#039;&#039;&#039; Nintendo released New Super Mario Bros. 2, the first 3DS title released simultaneously in stores and as an [[eShop]] download.&lt;br /&gt;
*&#039;&#039;&#039;28 July 12&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.3]] (modified by 3DSGuy) updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;24 July 12&#039;&#039;&#039; Nintendo released system update [[4.3.0-10]].&lt;br /&gt;
*&#039;&#039;&#039;26 June 12&#039;&#039;&#039; Nintendo released system update [[4.2.0-9]].&lt;br /&gt;
*&#039;&#039;&#039;19 May 12&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.2.1]] updated by [[User:Elisherer|Elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;15 May 12&#039;&#039;&#039; Nintendo released its first implementation of 3DS &#039;[[Title list#0004000E - Add-on Content|Add-on Content]]&#039; with the Mario Kart 1.1 update.&lt;br /&gt;
*&#039;&#039;&#039;14 May 12&#039;&#039;&#039; Nintendo released system update [[4.1.0-8]].&lt;br /&gt;
*&#039;&#039;&#039;24 April 12&#039;&#039;&#039; Nintendo released system update [[4.0.0-7]].&lt;br /&gt;
*&#039;&#039;&#039;08 February 12&#039;&#039;&#039; [[CiTRUS|CiTRUS v0.2]] updated by [[User:Xcution|Xcution]]&lt;br /&gt;
*&#039;&#039;&#039;04 February 12&#039;&#039;&#039; [[CiTRUS|CiTRUS v0.1]] released by [[User:Xcution|Xcution]]&lt;br /&gt;
*&#039;&#039;&#039;02 February 12&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.2]] updated by [[User:Elisherer|elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;26 January 12&#039;&#039;&#039; [[Crappy Tiny Reader|CTR - Crappy Tiny Reader v0.07]] updated by [[User:PsyKopaT|PsyKo]]&lt;br /&gt;
*&#039;&#039;&#039;05 January 12&#039;&#039;&#039; [[Crappy Tiny Reader|CTR - Crappy Tiny Reader v0.06]] updated by [[User:PsyKopaT|PsyKo]]&lt;br /&gt;
*&#039;&#039;&#039;21 December 11&#039;&#039;&#039; Nintendo released system update [[3.0.0-6]]&lt;br /&gt;
*&#039;&#039;&#039;21 December 11&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v1.1.1]] updated by [[User:Elisherer|elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;7 December 11&#039;&#039;&#039; [[3DSExplorer|3DSExplorer v0.96]] updated by [[User:Elisherer|elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;4 September 11&#039;&#039;&#039; [[3DSViewer|3DSViewer v0.1]] released by [[User:Elisherer|elisherer]]&lt;br /&gt;
*&#039;&#039;&#039;1 August 11&#039;&#039;&#039; [[3DS Save DeEncrypter3DS|Save DeEncrypter v1.0]] released by [[User:Blite|Blite]]&lt;br /&gt;
*&#039;&#039;&#039;25 July 11&#039;&#039;&#039; Nintendo released system update [[2.1.0-4]].&lt;br /&gt;
*&#039;&#039;&#039;15 June 11&#039;&#039;&#039; Nintendo released system update [[2.1.0-3]].&lt;br /&gt;
*&#039;&#039;&#039;6 June 11&#039;&#039;&#039; Nintendo released system update [[2.0.0-2]].&lt;br /&gt;
*&#039;&#039;&#039;6 April 11&#039;&#039;&#039; [[DSaveManager|DSaveManager v0.1]] released by [[User:Crediar|crediar]]&lt;br /&gt;
*&#039;&#039;&#039;4 April 11&#039;&#039;&#039; [[3DSaveTool|3DSaveTool v0.2b]] released by [[User:Crediar|crediar]]&lt;br /&gt;
*&#039;&#039;&#039;2 April 11&#039;&#039;&#039; [[3DSaveTool|3DSaveTool v0.1]] released by [[User:Crediar|crediar]]&lt;br /&gt;
*&#039;&#039;&#039;28 March 11&#039;&#039;&#039; Fixed 3DBrew wiki issues, now fully operational!&lt;br /&gt;
*&#039;&#039;&#039;18 March 11&#039;&#039;&#039; 3DBrew launched.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 3DBrew International ==&lt;br /&gt;
Our community is an international community.&lt;br /&gt;
&lt;br /&gt;
We have freedom, and we will express it in our language (but you have to write it in English before ;)!&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Memory_layout&amp;diff=12965</id>
		<title>Memory layout</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Memory_layout&amp;diff=12965"/>
		<updated>2015-07-26T06:21:04Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Restore from Google cache.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ARM11 Physical memory regions =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Old 3DS&lt;br /&gt;
!  Address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x00000000&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Bootrom (super secret code/data @ 0x8000)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Bootrom mirror&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x10000000&lt;br /&gt;
|?&lt;br /&gt;
| [[IO]] memory&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x17E00000&lt;br /&gt;
| 0x00002000&lt;br /&gt;
| MPCore private memory region&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| 0x17E10000&lt;br /&gt;
| 0x00001000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x18000000&lt;br /&gt;
| 0x00600000&lt;br /&gt;
| VRAM (divided in two banks, VRAM and VRAMB)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| 0x1F000000&lt;br /&gt;
| 0x00400000&lt;br /&gt;
| [[New_3DS]] additional memory&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x1FF00000&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| DSP memory&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x1FF80000&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| AXI WRAM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| FCRAM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| 0x28000000&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| [[New_3DS]] FCRAM extension&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0xFFFF0000&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Bootrom mirror&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=ARM9 Physical memory regions =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Old 3DS&lt;br /&gt;
!  Address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x00000000&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| Instruction TCM, repeating each 0x8000 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x01FF8000&lt;br /&gt;
| 0x00008000&lt;br /&gt;
| Instruction TCM (Accessed by the kernel and process by this address)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x07FF8000&lt;br /&gt;
| 0x00008000&lt;br /&gt;
| Instruction TCM (Accessed by bootrom by this address)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ARM9-only internal memory (ARM7&#039;s internal regions are mapped here as well)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| 0x08100000&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[New_3DS]] ARM9-only extension, only enabled when a certain [[CONFIG_Registers|CONFIG]] register is set.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x10000000&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| [[IO]] memory&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x18000000&lt;br /&gt;
| 0x00600000&lt;br /&gt;
| VRAM (divided in two banks, VRAM and VRAMB) &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x1FF00000&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| DSP memory&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x1FF80000&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| AXI WRAM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| FCRAM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| 0x28000000&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| [[New_3DS]] FCRAM extension&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0xFFF00000&lt;br /&gt;
| 0x00004000&lt;br /&gt;
| Data TCM (Mapped during bootrom)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| 0xFFFF0000&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Bootrom, the main region is at +0x8000, which is disabled during system boot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==ARM9 MPU regions==&lt;br /&gt;
For the below instruction permissions: RO = memory is executable, while None = not-executable.&lt;br /&gt;
&lt;br /&gt;
===NATIVE_FIRM/SAFE_MODE_FIRM ARM9 kernel===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Region&lt;br /&gt;
!  Address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Privileged-mode data permissions&lt;br /&gt;
!  User-mode data permissions&lt;br /&gt;
!  Privileged-mode instruction permissions&lt;br /&gt;
!  User-mode instruction permissions&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0xFFFF0000&lt;br /&gt;
| 32KB/0x8000&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0x01FF8000&lt;br /&gt;
| 32KB/0x8000&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| RO&lt;br /&gt;
| RO&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| 1MB/0x100000. &amp;gt;=[[8.0.0-18|8.0.0-X]]: 2MB/0x200000.&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| RO&lt;br /&gt;
| RO&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0x10000000&lt;br /&gt;
| 128KB/0x20000&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 0x10100000&lt;br /&gt;
| 512KB/0x80000&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128MB/0x8000000. &amp;gt;=[[8.0.0-18|8.0.0-X]]: 256MB/0x10000000.&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| 128KB/0x20000&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 0x08020000&lt;br /&gt;
| &amp;lt;[[3.0.0-5]]: 64KB/0x10000. &amp;gt;=[[3.0.0-5]]: 32KB/0x8000.&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above is the MPU region settings setup by the ARM9-kernel in the crt0.&lt;br /&gt;
&lt;br /&gt;
The New3DS ARM9-kernel MPU region settings are the same as the Old3DS MPU region settings for &amp;gt;=[[8.0.0-18|8.0.0-X]].&lt;br /&gt;
&lt;br /&gt;
At the start of the Process9 function executed in kernel-mode via svc7b during firm-launching, it changes some MPU region settings. At the end of that function, before it uses the ARM9/ARM11 entrypoint fields, it disables MPU.&lt;br /&gt;
&lt;br /&gt;
===New3DS [[FIRM|ARM9-loader]]===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Region&lt;br /&gt;
!  Address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Privileged-mode data permissions&lt;br /&gt;
!  User-mode data permissions&lt;br /&gt;
!  Privileged-mode instruction permissions&lt;br /&gt;
!  User-mode instruction permissions&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0xFFFF0000&lt;br /&gt;
| 32KB/0x8000&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0x01FF8000&lt;br /&gt;
| 32KB/0x8000&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| 2MB/0x200000&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0x10000000&lt;br /&gt;
| 128KB/0x20000&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MPU regions 4-7 are disabled. Note that the entire ARM9-loader runs in SVC-mode.&lt;br /&gt;
&lt;br /&gt;
===TWL_FIRM/AGB_FIRM ARM9 kernel===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Region&lt;br /&gt;
!  Address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Privileged-mode data permissions&lt;br /&gt;
!  User-mode data permissions&lt;br /&gt;
!  Privileged-mode instruction permissions&lt;br /&gt;
!  User-mode instruction permissions&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0xFFFF0000&lt;br /&gt;
| 32KB/0x8000&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0x01FF8000&lt;br /&gt;
| 32KB/0x8000&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| RO&lt;br /&gt;
| RO&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| 1MB/0x100000. New3DS: 2MB/0x200000.&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| RO&lt;br /&gt;
| RO&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0x10000000&lt;br /&gt;
| 2MB/0x200000.&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 0x1FF00000&lt;br /&gt;
| 512KB/0x80000&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128MB/0x8000000. New3DS: 256MB/0x10000000.&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| &amp;lt;[[3.0.0-5|3.0.0-X]]: 256KB/0x40000. &amp;gt;=[[3.0.0-5|3.0.0-X]]: 128KB/0x20000&lt;br /&gt;
| RW&lt;br /&gt;
| None&lt;br /&gt;
| RO&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 0x08080000&lt;br /&gt;
| 128KB/0x20000&lt;br /&gt;
| RW&lt;br /&gt;
| RW&lt;br /&gt;
| RO&lt;br /&gt;
| RO&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==ARM9 ITCM==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  ITCM mirror address&lt;br /&gt;
!  ITCM bootrom mirror address&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FF8000&lt;br /&gt;
| &lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3700&lt;br /&gt;
| Uninitialized memory.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB700&lt;br /&gt;
| 0x07FFB700&lt;br /&gt;
| 0x3700&lt;br /&gt;
| 0x100&lt;br /&gt;
| The unprotected ARM9-bootrom code copies code from unprotected bootrom to 0x07FFB700(ITCM mirror) size 0x100, then calls the code at 0x07FFB700. The code located here is the code used for disabling access to the bootroms.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB800&lt;br /&gt;
| &lt;br /&gt;
| 0x3800&lt;br /&gt;
| 0x4&lt;br /&gt;
| This is always 0xDEADB00F.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB804&lt;br /&gt;
| &lt;br /&gt;
| 0x3804&lt;br /&gt;
| 0x4&lt;br /&gt;
| This is the u32 DeviceId.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB808&lt;br /&gt;
| &lt;br /&gt;
| 0x3808&lt;br /&gt;
| 0x10&lt;br /&gt;
| This is the fall-back keyY used for movable.sed keyY when movable.sed doesn&#039;t exist in NAND(the last two words here are used on retail for generating console-unique TWL keydata/etc). This is also used for &amp;quot;LocalFriendCodeSeed&amp;quot;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB818&lt;br /&gt;
| &lt;br /&gt;
| 0x3818&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB819&lt;br /&gt;
| &lt;br /&gt;
| 0x3819&lt;br /&gt;
| 0x1&lt;br /&gt;
| This is the [[CTCert]] issuer type: 0 = retail &amp;quot;Nintendo CA - G3_NintendoCTR2prod&amp;quot;, non-zero = dev &amp;quot;Nintendo CA - G3_NintendoCTR2dev&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB81A&lt;br /&gt;
| &lt;br /&gt;
| 0x381A&lt;br /&gt;
| 0x6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB820&lt;br /&gt;
| &lt;br /&gt;
| 0x3820&lt;br /&gt;
| 0x4&lt;br /&gt;
| This is the CTCert ECDSA exponent, this is byte-swapped when *((u8*)(0x01FFB800+0x18)) is &amp;gt;=5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB824&lt;br /&gt;
| &lt;br /&gt;
| 0x3824&lt;br /&gt;
| 0x2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB826&lt;br /&gt;
| &lt;br /&gt;
| 0x3826&lt;br /&gt;
| 0x1E&lt;br /&gt;
| This is the CTCert ECDSA privk.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB844&lt;br /&gt;
| &lt;br /&gt;
| 0x3844&lt;br /&gt;
| 0x3C&lt;br /&gt;
| This is the CTCert ECDSA signature.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB880&lt;br /&gt;
| &lt;br /&gt;
| 0x3880&lt;br /&gt;
| 0x80&lt;br /&gt;
| This is all-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFB900&lt;br /&gt;
| &lt;br /&gt;
| 0x3900&lt;br /&gt;
| 0x200&lt;br /&gt;
| This is the 0x200-bytes from NAND sector0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFBB00&lt;br /&gt;
| &lt;br /&gt;
| 0x3B00&lt;br /&gt;
| 0x200&lt;br /&gt;
| This is the 0x200-bytes from the plaintext NAND firm partition FIRM header, read by bootrom.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFBD00&lt;br /&gt;
| &lt;br /&gt;
| 0x3D00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, not used by [[FIRM]]. Probably RSA related going by the data right after this? These are not console-unique.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFBF00&lt;br /&gt;
| &lt;br /&gt;
| 0x3F00&lt;br /&gt;
| 0x100&lt;br /&gt;
| This is the RSA-2048 modulo for [[RSA_Registers|RSA]]-engine slot2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFC000&lt;br /&gt;
| &lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x100&lt;br /&gt;
| This is the RSA-2048 modulo for RSA-engine slot3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFC100&lt;br /&gt;
| &lt;br /&gt;
| 0x4100&lt;br /&gt;
| 0x800&lt;br /&gt;
| These are RSA-2048 keys: 4 slots, each slot is 0x200-bytes. Slot+0 is the modulo, slot+0x100 is the private-exponent. This can be confirmed by RSA-decrypting a message into a signature, then RSA-encrypting the signature back into a message, and comparing the original message with the output from the last operation.&lt;br /&gt;
&lt;br /&gt;
[[FIRM]] doesn&#039;t seem to ever use these. None of these are related to RSA-keyslot0 used for v6.0/v7.0 key generation. These modulus are separate from all other modulus used elsewhere.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFC900&lt;br /&gt;
| 0x07FFC900&lt;br /&gt;
| 0x4900&lt;br /&gt;
| 0x400&lt;br /&gt;
| The unprotected ARM9-bootrom copies data to 0x07FFC900(mirror of 0x01FFC900) size 0x400. This data is copied from AXI WRAM, initialized by ARM11-bootrom(the addr used for the src is determined by [[CONFIG_Registers|REG_UNITINFO]]). These are RSA modulus: retailsrcptr = 0x1FFFD000, devsrvptr = 0x1FFFD400.&lt;br /&gt;
* The first 0x100-bytes here is the RSA-2048 modulo for the CFA NCCH header, and for the gamecard NCSD header.&lt;br /&gt;
* 0x01FFCA00 is the RSA-2048 modulo for the CXI accessdesc signature, written to rsaengine keyslot1 by NATIVE_FIRM.&lt;br /&gt;
* 0x01FFCB00 size 0x200 is unknown, probably RSA related, these aren&#039;t used by [[FIRM]](these are not console-unique).&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFCD00&lt;br /&gt;
| &lt;br /&gt;
| 0x4D00&lt;br /&gt;
| 0x80&lt;br /&gt;
| Unknown, not used by [[FIRM]]. This isn&#039;t console-unique.&lt;br /&gt;
The first 0x10-bytes are checked by the v6.0/v7.0 NATIVE_FIRM keyinit function, when non-zero it clears this block and continues to do the key generation. Otherwise when this block was already all-zero, it immediately returns.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFCD80&lt;br /&gt;
| &lt;br /&gt;
| 0x4D80&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x01FFCD84 size 0x10-bytes is the NAND CID(the 0x64-byte region at 0x01FFCD80 is initialized by Process9 + ARM9-bootrom). The u32 at 0x01FFCDC4 is the total number of NAND sectors, read from a MMC command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFCDE4&lt;br /&gt;
| &lt;br /&gt;
| 0x4DE4&lt;br /&gt;
| 0x21C&lt;br /&gt;
| Uninitialized memory.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFD000&lt;br /&gt;
| 0x07FFD000&lt;br /&gt;
| 0x5000&lt;br /&gt;
| 0x2470&lt;br /&gt;
| The unprotected ARM9-bootrom copies 0x1FFFA000(AXIWRAM mem initialized by ARM11-bootrom) size 0x2470 to 0x07FFD000(mirror of 0x01FFD000). This block contains DSi keys.&lt;br /&gt;
* 0x01FFD000 is the RSA-1024 modulus for the retail System Menu&lt;br /&gt;
* 0x01FFD080 is the RSA-1024 modulus for DSi Wifi firmware and DSi Sound&lt;br /&gt;
* 0x01FFD100 is the RSA-1024 modulus for base DSi apps (Settings, Shop, etc.)&lt;br /&gt;
* 0x01FFD180 is the RSA-1024 modulus for DSiWare and RSA-signed cartridge headers&lt;br /&gt;
* 0x01FFD210 is the keyY for per-console-encrypted ES blocks&lt;br /&gt;
* 0x01FFD220 is the keyY for fixed-keyX ES blocks&lt;br /&gt;
* 0x01FFD300 is the DSi common (normal)key&lt;br /&gt;
* 0x01FFD350 is a normalkey set on keyslot 0x02, and is likely only used during boot&lt;br /&gt;
* 0x01FFD380 is the keyslot 0x00 keyX and the first half of the retail keyX for modcrypt crypto &amp;quot;Nintendo&amp;quot;&lt;br /&gt;
* 0x01FFD398 is the keyX used for &#039;Tad&#039; crypto, usually in keyslot 0x02 &amp;quot;Nintendo DS&amp;quot;, ..&lt;br /&gt;
* 0x01FFD3A8 is set as the middle two words of keyslot 0x03&#039;s keyX, before being overwritten &amp;quot;NINTENDO&amp;quot;&lt;br /&gt;
* 0x01FFD3BC is the keyY for keyslot 0x01, see below&lt;br /&gt;
* 0x01FFD3C8 is the fixed keyY used for eMMC partition crypto on retail DSi, see below (keyslot 0x03)&lt;br /&gt;
* 0x01FFD3E0 is the 0x1048-byte Blowfish data for DSi cart crypto&lt;br /&gt;
* 0x01FFE428 is the 0x1048-byte Blowfish data for DS cart crypto&lt;br /&gt;
On the 3DS, keyslots 0x01 and 0x03 have the last word set as 0xE1A00005 instead of the next word in ITCM. This is consistent with retail DSis.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01FFF470&lt;br /&gt;
| &lt;br /&gt;
| 0x7470&lt;br /&gt;
| 0xB90&lt;br /&gt;
| Uninitialized memory.&lt;br /&gt;
0x01FFFC00 size 0x100-bytes starting with [[9.5.0-22|9.5.0-X]] is the FIRM header used during FIRM-launching.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=[[New_3DS]] physical 0x1F000000 memory=&lt;br /&gt;
This area is used by [[QTM Services]](starting at offset 0x200000, size 0x180000). This area is not accessible to the GPU on the old 3DS. The old 3DS and New 3DS GSP module has vaddr-&amp;gt;physaddr conversion code for this entire region. On the New 3DS, only the first 0x200000-bytes (half of this memory) are accessible to the GPU.&lt;br /&gt;
&lt;br /&gt;
=Memory map by firmware=&lt;br /&gt;
* [[Virtual address mapping FW0B]]&lt;br /&gt;
* [[Virtual address mapping FW1F]]&lt;br /&gt;
* [[Virtual address mapping FW25]]&lt;br /&gt;
* [[Virtual address mapping FW2E]]&lt;br /&gt;
* [[Virtual address mapping FW37]]&lt;br /&gt;
* [[Virtual address mapping FW38‎]]&lt;br /&gt;
* [[Virtual address mapping FW3F]]&lt;br /&gt;
* FW49([[9.6.0-24|9.6.0-X]]) ARM11-kernel vmem mapping is identical to FW40([[9.5.0-22|9.5.0-X]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Virtual address mapping TWLFIRM04]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Virtual address mapping New3DS v8.1]]&lt;br /&gt;
* [[Virtual address mapping New3DS v9.0]]&lt;br /&gt;
* [[Virtual address mapping New3DS v9.2]]&lt;br /&gt;
&lt;br /&gt;
=ARM11 Detailed physical memory map=&lt;br /&gt;
 18000000 - 18600000: VRAM&lt;br /&gt;
 &lt;br /&gt;
 1FF80000 - 1FFAB000: Kernel code&lt;br /&gt;
 1FFAB000 - 1FFF0000: SlabHeap [temporarily contains boot processes]&lt;br /&gt;
 1FFF0000 - 1FFF1000: ?&lt;br /&gt;
 1FFF1000 - 1FFF2000: ?&lt;br /&gt;
 1FFF2000 - 1FFF3000: ?&lt;br /&gt;
 1FFF3000 - 1FFF4000: ?&lt;br /&gt;
 1FFF4000 - 1FFF5000: Exception vectors&lt;br /&gt;
 1FFF5000 - 1FFF5800: Unused?&lt;br /&gt;
 1FFF5800 - 1FFF5C00: 256-entry L2 MMU table for VA FF4xx000&lt;br /&gt;
 1FFF5C00 - 1FFF6000: 256-entry L2 MMU table for VA FF5xx000&lt;br /&gt;
 1FFF6000 - 1FFF6400: 256-entry L2 MMU table for VA FF6xx000&lt;br /&gt;
 1FFF6400 - 1FFF6800: 256-entry L2 MMU table for VA FF7xx000&lt;br /&gt;
 1FFF6800 - 1FFF6C00: 256-entry L2 MMU table for VA FF8xx000&lt;br /&gt;
 1FFF6C00 - 1FFF7000: 256-entry L2 MMU table for VA FF9xx000&lt;br /&gt;
 1FFF7000 - 1FFF7400: 256-entry L2 MMU table for VA FFAxx000&lt;br /&gt;
 1FFF7400 - 1FFF7800: 256-entry L2 MMU table for VA FFBxx000&lt;br /&gt;
 1FFF7800 - 1FFF7C00: MMU table but unused?&lt;br /&gt;
 1FFF7C00 - 1FFF8000: 256-entry L2 MMU table for VA FFFxx000 &lt;br /&gt;
 1FFF8000 - 1FFFC000: 4096-entry L1 MMU table for VA xxx00000 (CPU 0)&lt;br /&gt;
 1FFFC000 - 20000000: 4096-entry L1 MMU table for VA xxx00000 (CPU 1)&lt;br /&gt;
 20000000 - 28000000: Main memory&lt;br /&gt;
&lt;br /&gt;
The entire FCRAM is cleared during NATIVE_FIRM boot. This is probably done by the ARM11 kernel(after loading [[FIRM]] launch parameters from FCRAM)?&lt;br /&gt;
&lt;br /&gt;
== FCRAM memory-regions layout ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  [[Configuration_Memory#APPMEMTYPE|Configmem-APPMEMTYPE]] Value&lt;br /&gt;
!  Base address relative to FCRAM+0, for APPLICATION mem-region&lt;br /&gt;
!  Region size, for APPLICATION mem-region&lt;br /&gt;
!  Base address relative to FCRAM+0, for SYSTEM mem-region&lt;br /&gt;
!  Region size, for SYSTEM mem-region&lt;br /&gt;
!  Base address relative to FCRAM+0, for BASE mem-region&lt;br /&gt;
!  Region size, for BASE mem-region&lt;br /&gt;
|-&lt;br /&gt;
| 0 (default with regular 3DS kernel, used when the type is not 2-5)&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x04000000(64MB)&lt;br /&gt;
| 0x04000000&lt;br /&gt;
| 0x02C00000&lt;br /&gt;
| 0x06C00000&lt;br /&gt;
| 0x01400000&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x06000000(96MB)&lt;br /&gt;
| 0x06000000&lt;br /&gt;
| 0x00C00000&lt;br /&gt;
| 0x06C00000&lt;br /&gt;
| 0x01400000&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x05000000(80MB)&lt;br /&gt;
| 0x05000000&lt;br /&gt;
| 0x01C00000&lt;br /&gt;
| 0x06C00000&lt;br /&gt;
| 0x01400000&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x04800000(72MB)&lt;br /&gt;
| 0x04800000&lt;br /&gt;
| 0x02400000&lt;br /&gt;
| 0x06C00000&lt;br /&gt;
| 0x01400000&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x02000000(32MB)&lt;br /&gt;
| 0x02000000&lt;br /&gt;
| 0x04C00000&lt;br /&gt;
| 0x06C00000&lt;br /&gt;
| 0x01400000&lt;br /&gt;
|-&lt;br /&gt;
| 6 (This is the default on New3DS. With [[New_3DS]] kernel this is the type used when the value is not 7)&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x07C00000(124MB)&lt;br /&gt;
| 0x07C00000&lt;br /&gt;
| 0x06400000&lt;br /&gt;
| 0x0E000000&lt;br /&gt;
| 0x02000000&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x0B200000(178MB)&lt;br /&gt;
| 0x0B200000&lt;br /&gt;
| 0x02E00000&lt;br /&gt;
| 0x0E000000&lt;br /&gt;
| 0x02000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SYSTEM mem-region size is calculated with: size = FCRAMTOTALSIZE - (APPLICATION_MEMREGIONSIZE + BASE_MEMREGIONSIZE).&lt;br /&gt;
&lt;br /&gt;
Support for type6/7 was [[NCCH/Extended Header|implemented]] in [[NS]] with [[8.0.0-18]], these are only supported in the [[New_3DS]] ARM11-kernel not the regular 3DS kernel. These two types are the only ones supported by the New3DS kernel.&lt;br /&gt;
&lt;br /&gt;
All memory allocated by the kernel itself for kernel use is located under BASE. Most system-modules run under the BASE memregion too.&lt;br /&gt;
&lt;br /&gt;
Free/used memory on [[4.5.0-10]] with Home Menu / Internet Browser, with the default APPMEMTYPE on retail:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Region&lt;br /&gt;
!  Base address relative to FCRAM+0&lt;br /&gt;
!  Region size&lt;br /&gt;
!  Used memory once [[Home Menu]] finishes loading for system boot, on [[4.5.0-10]]&lt;br /&gt;
!  Used memory with [[Internet Browser]] running instead of [[Home Menu]], on [[4.5.0-10]]&lt;br /&gt;
!  Free memory once [[Home Menu]] finishes loading for system boot, on [[4.5.0-10]]&lt;br /&gt;
!  Free memory with [[Internet Browser]] running instead of [[Home Menu]], on [[4.5.0-10]]&lt;br /&gt;
|-&lt;br /&gt;
| APPLICATION&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x04000000&lt;br /&gt;
| 0x0&lt;br /&gt;
| &lt;br /&gt;
| 0x04000000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| SYSTEM&lt;br /&gt;
| 0x04000000&lt;br /&gt;
| 0x02C00000&lt;br /&gt;
| 0x01488000&lt;br /&gt;
| 0x02A50000&lt;br /&gt;
| 0x01778000&lt;br /&gt;
| 0x001B0000&lt;br /&gt;
|-&lt;br /&gt;
| BASE&lt;br /&gt;
| 0x06C00000&lt;br /&gt;
| 0x01400000&lt;br /&gt;
| 0x01202000&lt;br /&gt;
| 0x01236000&lt;br /&gt;
| 0x001FE000&lt;br /&gt;
| 0x001CA000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=ARM11 Detailed virtual memory map=&lt;br /&gt;
(valid only for FW0B, see [[#Memory map by firmware|Memory map by firmware]] for subsequent versions)&lt;br /&gt;
&lt;br /&gt;
 E8000000 - E8600000: mapped VRAM (18000000 - 18600000)&lt;br /&gt;
 &lt;br /&gt;
 EFF00000 - F0000000: mapped Internal memory (1FF00000 - 20000000)&lt;br /&gt;
 F0000000 - F8000000: mapped Main memory&lt;br /&gt;
 &lt;br /&gt;
 FF401000 - FF402000: mapped ? (27FC7000 - 27FC8000)&lt;br /&gt;
 &lt;br /&gt;
 FF403000 - FF404000: mapped ? (27FC2000 - 27FC3000)&lt;br /&gt;
 &lt;br /&gt;
 FF405000 - FF406000: mapped ? (27FBB000 - 27FBC000)&lt;br /&gt;
 &lt;br /&gt;
 FF407000 - FF408000: mapped ? (27FB3000 - 27FB4000)&lt;br /&gt;
 &lt;br /&gt;
 FF409000 - FF40A000: mapped ? (27F8E000 - 27F8F000)&lt;br /&gt;
 &lt;br /&gt;
 FFF00000 - FFF45000: mapped SlabHeap &lt;br /&gt;
 &lt;br /&gt;
 FFF60000 - FFF8B000: mapped Kernel code&lt;br /&gt;
 &lt;br /&gt;
 FFFCC000 - FFFCD000: mapped IO [[I2C|I2C]] second bus (10144000 - 10145000)&lt;br /&gt;
 &lt;br /&gt;
 FFFCE000 - FFFCF000: mapped IO PDC([[LCD]]) (10400000 - 10401000)&lt;br /&gt;
 &lt;br /&gt;
 FFFD0000 - FFFD1000: mapped IO PDN (10141000 - 10142000)&lt;br /&gt;
 &lt;br /&gt;
 FFFD2000 - FFFD3000: mapped IO PXI (10163000 - 10164000)&lt;br /&gt;
 &lt;br /&gt;
 FFFD4000 - FFFD5000: mapped IO PAD (10146000 - 10147000)&lt;br /&gt;
 &lt;br /&gt;
 FFFD6000 - FFFD7000: mapped IO LCD (10202000 - 10203000)&lt;br /&gt;
 &lt;br /&gt;
 FFFD8000 - FFFD9000: mapped IO DSP (10140000 - 10141000)&lt;br /&gt;
 &lt;br /&gt;
 FFFDA000 - FFFDB000: mapped IO XDMA (10200000 - 10201000)&lt;br /&gt;
 &lt;br /&gt;
 FFFDC000 - FFFE0000: mapped ? (1FFF8000 - 1FFFC000)&lt;br /&gt;
 &lt;br /&gt;
 FFFE1000 - FFFE2000: mapped ? (1FFF0000 - 1FFF1000)&lt;br /&gt;
 &lt;br /&gt;
 FFFE3000 - FFFE4000: mapped ? (1FFF2000 - 1FFF3000)&lt;br /&gt;
 &lt;br /&gt;
 FFFE5000 - FFFE9000: mapped L1 MMU table for VA xxx00000&lt;br /&gt;
 &lt;br /&gt;
 FFFEA000 - FFFEB000: mapped ? (1FFF1000 - 1FFF2000)&lt;br /&gt;
 &lt;br /&gt;
 FFFEC000 - FFFED000: mapped ? (1FFF3000 - 1FFF4000)&lt;br /&gt;
 &lt;br /&gt;
 FFFEE000 - FFFF0000: mapped IO IRQ (17E00000 - 17E02000)&lt;br /&gt;
 &lt;br /&gt;
 FFFF0000 - FFFF1000: mapped Exception vectors&lt;br /&gt;
 &lt;br /&gt;
 FFFF2000 - FFFF6000: mapped L1 MMU table for VA xxx00000&lt;br /&gt;
 &lt;br /&gt;
 FFFF7000 - FFFF8000: mapped ? (1FFF1000 - 1FFF2000)&lt;br /&gt;
 &lt;br /&gt;
 FFFF9000 - FFFFA000: mapped ? (1FFF3000 - 1FFF4000)&lt;br /&gt;
 &lt;br /&gt;
 FFFFB000 - FFFFE000: mapped L2 MMU tables (1FFF5000 - 1FFF8000)&lt;br /&gt;
&lt;br /&gt;
==0xFF4XX000==&lt;br /&gt;
Each [[KThread|thread]] is allocated a 0x1000-byte page in this region: the first page at 0xFF401000 is for the first created thread, 0xFF403000 for the second thread. This region is used to store the SVC-mode stack for the thread, and thread context data used for context switching. When the IRQ handler, prefetch/data abort handlers, and undefined instruction handler are entered where the SPSR-mode=user, these handlers then store LR+SPSR for the current mode on the SVC-mode stack, then these handlers switch to SVC-mode.&lt;br /&gt;
&lt;br /&gt;
This page does not contain a dedicated block for storing R0-PC(etc). For user-mode, the user-mode regs are instead saved on the SVC-mode stack when IRQs such as timers for context switching are triggered.&lt;br /&gt;
&lt;br /&gt;
Structure of this page, relative to page_endaddr-0xC8:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| &lt;br /&gt;
| SVC-mode stack-top. The 0x10-byte SVC-access-control for this thread is also located here, which is checked by the SVC-handler.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x28&lt;br /&gt;
| SVC-mode saved registers, stored/loaded during context switches: R4-R9, SL, FP, SP, LR. After loading these registers, the context switch code will jump to the loaded LR.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0&lt;br /&gt;
| 4&lt;br /&gt;
| fpexc from vmrs, used during context switches with the above saved registers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For NATIVE_FIRM the memory pages for this region are located in FCRAM, however for TWL_FIRM these are located in AXI WRAM. For TWL_FIRM v6704 the first thread&#039;s page for this region is located at physical address 0x1FF93000, the next one at 0x1FF92000, etc.&lt;br /&gt;
&lt;br /&gt;
=ARM11 User-land memory regions=&lt;br /&gt;
==NATIVE_FIRM/SAFE_MODE_FIRM Userland Memory==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Virtual Address Base&lt;br /&gt;
!  Physical Address Base&lt;br /&gt;
!  Region Max Size&lt;br /&gt;
!  Address-range available for svcMapMemoryBlock&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000 / 0x14000000&lt;br /&gt;
| &lt;br /&gt;
| 0x03F00000&lt;br /&gt;
| No&lt;br /&gt;
| The [[ExeFS]]:/.code is loaded here, executables must be loaded to the 0x00100000 region when the exheader &amp;quot;special memory&amp;quot; flag is clear. The 0x03F00000-byte size restriction only applies when this flag is clear. Executables are usually loaded to 0x14000000 when the exheader &amp;quot;special memory&amp;quot; flag is set, however this address can be arbitrary.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| Used for mapping buffers during IPC, see [[IPC Command Structure]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| Main stack physaddr - &amp;lt;heap size for the allocated vaddr 0x08000000 memory&amp;gt;&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| Yes&lt;br /&gt;
| Heap mapped by [[SVC|ControlMemory]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10000000-StackSize&lt;br /&gt;
| .bss physical address - total stack pages&lt;br /&gt;
| StackSize from process exheader&lt;br /&gt;
| &lt;br /&gt;
| Stack for the main-thread, initialized by the ARM11 kernel. The StackSize from the exheader is usually 0x4000, therefore the stack-bottom is usually 0x0FFFC000. The stack for the other threads is normally located in the process .data section however this can be arbitrary.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10000000&lt;br /&gt;
| &lt;br /&gt;
| 0x04000000&lt;br /&gt;
| Yes&lt;br /&gt;
| [[SVC|Shared]] memory&lt;br /&gt;
|-&lt;br /&gt;
| 0x14000000&lt;br /&gt;
| FCRAM+0&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| No&lt;br /&gt;
| Can be mapped by [[SVC|ControlMemory]], this is used for processes&#039; [[SVC|LINEAR]]/GSP heap.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E800000&lt;br /&gt;
| 0x1F000000&lt;br /&gt;
| 0x00400000&lt;br /&gt;
| No&lt;br /&gt;
| [[New_3DS]] additional memory, access to this is specified by the exheader. Added with [[8.0.0-18]], see above section regarding this memory.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC00000&lt;br /&gt;
| 0x10100000&lt;br /&gt;
| 0x01000000&lt;br /&gt;
| No&lt;br /&gt;
| [[IO]] registers, the mapped IO pages which each process can access is specified in the [[NCCH#CXI|CXI]] exheader.(Applications normally don&#039;t have access to registers in this range)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F000000&lt;br /&gt;
| 0x18000000&lt;br /&gt;
| 0x00600000&lt;br /&gt;
| No&lt;br /&gt;
| VRAM, access to this is specified by the exheader.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FF00000&lt;br /&gt;
| 0x1FF00000&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| No&lt;br /&gt;
| DSP memory, access to this is specified by the exheader.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FF80000&lt;br /&gt;
| FCRAM memory page allocated by the ARM11 kernel.&lt;br /&gt;
| 0x1000&lt;br /&gt;
| No&lt;br /&gt;
| [[Configuration Memory]], all processes have read-only access to this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FF81000&lt;br /&gt;
| FCRAM memory page allocated by the ARM11 kernel.&lt;br /&gt;
| 0x1000&lt;br /&gt;
| No&lt;br /&gt;
| [[Configuration Memory|Shared]] page, all processes have read-access to this. Write access to this is specified by the exheader &amp;quot;Shared page writing&amp;quot; kernel flag.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FF82000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| [[Thread Local Storage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30000000&lt;br /&gt;
| FCRAM+0&lt;br /&gt;
| 0x08000000(Old3DS) / 0x10000000([[New_3DS]])&lt;br /&gt;
| No&lt;br /&gt;
| This LINEAR memory mapping was added with [[8.0.0-18]], see [[SVC#enum_MemoryOperation|here]]. This replaces the original 0x14000000 mapping, for system(memory-region=BASE)/newer titles. The Old3DS kernel uses size 0x08000000 for LINEAR-memory address range checks, while the New3DS kernel uses size 0x10000000 for those range checks. Old3DS/New3DS system-module code doing vaddr-&amp;gt;phys-addr conversion uses size 0x10000000.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000 / 0x40000000&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| This is the end-address of userland memory, memory under this address is process-unique. Memory starting at this address is only accessible in privileged-mode. This address was changed from 0x20000000 to 0x40000000 with [[8.0.0-18]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All executable pages are read-only, and data pages have the execute-never permission set. Normally .text from the loaded ExeFS:/.code is the only mapped executable memory. Executable [[RO Services|CROs]] can be loaded into memory, once loaded the CRO .text section memory page permissions are changed via [[SVC|ControlProcessMemory]] from RW- to R-X. The address and size of each ExeFS:/.code section is stored in the exheader, the permissions for each section is: .text R-X, .rodata R--, .data RW-, and .bss RW-. The loaded .code is mapped to the addresses specified in the exheader by the ARM11 kernel. The stack permissions is initialized by the ARM11 kernel: RW-. The heap permissions is normally RW-.&lt;br /&gt;
&lt;br /&gt;
All userland memory is mapped with RW permissions for privileged-mode. However, normally the ARM11 kernel only uses userland read/write instructions(or checks that the memory can be written from userland first) for accessing memory specified by [[SVC|SVCs]].&lt;br /&gt;
&lt;br /&gt;
Processes can&#039;t directly access memory for other processes. When service [[Services API|commands]] are used, the kernel maps memory in the destination process for input/output buffers, where the addresses in the command received by the process is replaced by this mapped memory. When this is an input buffer, the buffer data is copied to the mapped memory. When this is an output buffer, the data stored in the mapped memory is copied to the destination buffer specified in the command.&lt;br /&gt;
&lt;br /&gt;
The physical address which memory for the application memory-type is mapped to begins at FCRAM+0, the total memory allocated for this memory-type is stored in [[Configuration_Memory]]. Applications&#039; .text + .rodata + .data under the application memory-type is mapped at FCRAM + APPMEMALLOC - (aligned page-size for .text + .rodata + .data). The application .bss is mapped at CODEADDR - .bss size aligned down to the page size.&lt;br /&gt;
&lt;br /&gt;
==TWL_FIRM Userland Memory==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Virtual Address Base&lt;br /&gt;
!  Physical Address Base&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| 0x1FFAB000 (with newer TWL_FIRM such as v6704 this is located at 0x1FFAC000)&lt;br /&gt;
| 0x00055000&lt;br /&gt;
| Code + .(ro)data copied from the process 0x00300000 region is located here(.bss is located here as well).&lt;br /&gt;
|-&lt;br /&gt;
| 0x00155000&lt;br /&gt;
| 0x18555000&lt;br /&gt;
| 0x000AB000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00200000&lt;br /&gt;
| 0x18500000&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00300000&lt;br /&gt;
| 0x24000000&lt;br /&gt;
| 0x04000000&lt;br /&gt;
| The beginning of the ARM11 process .text is located here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x07E00000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC00000&lt;br /&gt;
| 0x10100000&lt;br /&gt;
| 0x00400000&lt;br /&gt;
| [[IO]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F000000&lt;br /&gt;
| 0x18000000&lt;br /&gt;
| 0x00600000&lt;br /&gt;
| VRAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FF00000&lt;br /&gt;
| 0x1FF00000&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| This is mapped to the DSP memory.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above regions are mapped by the ARM11 kernel. Later when the ARM11 process uses [[SVC|svcKernelSetState]] with type4, the kernel unmaps(?) the following regions: 0x00300000..0x04300000, 0x08000000..0x0FE00000, and 0x10000000..0xF8000000.&lt;br /&gt;
&lt;br /&gt;
=== Detailed TWL_FIRM ARM11 Memory ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Process Virtual Address&lt;br /&gt;
!  Physical Address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08000000&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x01000000*4&lt;br /&gt;
| DS(i) 0x02000000 RAM. Vaddr = (DSRAMOffset*4) + 0x08000000, where DSRAMOffset is DSRAMAddr-0x02000000.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0FC00000&lt;br /&gt;
| 0x27C00000&lt;br /&gt;
| &lt;br /&gt;
| Loaded SRL binary, initially the dev DSi launcher SRL is located here(copied here by the ARM11 process).&lt;br /&gt;
|-&lt;br /&gt;
| 0x0FD00000&lt;br /&gt;
| 0x27D00000&lt;br /&gt;
| &lt;br /&gt;
| The data located here is copied to here by the ARM11 process. The data located here is a TWL NAND [http://dsibrew.org/wiki/Bootloader bootloader] image, using the same format+encryption/verification methods as the DSi NAND bootloader(stage2). The keyX for this bootloader keyslot is initially set to the retail DSi key-data, however when TWL_FIRM is launched this keyX key-data is replaced with a separate keyX. TWL_FIRM can use either the retail DSi bootloader RSA-1024 modulo, or a seperate modulo: normally only the latter is used(the former is only used when loading the image from FS instead of FCRAM). When using the image from FCRAM(default code-path), TWL_FIRM will not calculate+check the hashes for the bootloader code binaries(this is done when loading from FS however).&lt;br /&gt;
|-&lt;br /&gt;
| 0x0FDF7000&lt;br /&gt;
| 0x27DF7000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| SRL header&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= System memory details  =&lt;br /&gt;
 0xFFFF9000 Pointer to the current KThread instance&lt;br /&gt;
 0xFFFF9004 Pointer to the current KProcess instance&lt;br /&gt;
 0xFFFF9008 Pointer to the current KScheduler instance&lt;br /&gt;
 0xFFFF9010 Pointer to the last KThread to encounter an exception&lt;br /&gt;
&lt;br /&gt;
 0x8000040 Pointer to the current KThread instance on the ARM9&lt;br /&gt;
 0x8000044 Pointer to the current KProcess instance on the ARM9&lt;br /&gt;
 0x8000048 Pointer to the current KScheduler instance on the ARM9&lt;br /&gt;
&lt;br /&gt;
= Handles =&lt;br /&gt;
 The handle 0xFFFF8001 is a reference to the current KProcess.&lt;br /&gt;
 The handle 0xFFFF8000 is a reference to the current KThread.&lt;br /&gt;
&lt;br /&gt;
= IO Process/Kernel virtual addressing equivalence = &lt;br /&gt;
It seems an IO register&#039;s process virtual address can be calculated by adding 0xEB00000 to its physical address.&lt;br /&gt;
&lt;br /&gt;
= VRAM Map While Running System Applets =&lt;br /&gt;
*0x1E6000-0x22C500 -- top screen 3D left framebuffer 0(240x400x3) (The &amp;quot;3D right first-framebuf&amp;quot; addr stored in the LCD register is set to this, when the 3D is set to &amp;quot;off&amp;quot;)&lt;br /&gt;
*0x22C800-0x272D00 -- top screen 3D left framebuffer 1(240x400x3)&lt;br /&gt;
*0x273000-0x2B9500 -- top screen 3D right framebuffer 0(240x400x3)&lt;br /&gt;
*0x2B9800-0x2FFD00 -- top screen 3D right framebuffer 1(240x400x3)&lt;br /&gt;
*0x48F000-0x4C7400 -- bottom screen framebuffer 0(240x320x3)&lt;br /&gt;
*0x4C7800-0x4FF800 -- bottom screen framebuffer 1(240x320x3)&lt;br /&gt;
&lt;br /&gt;
These LCD framebuffer addresses are not changed by the system when launching regular applications, the application itself handles that if needed. These VRAM framebuffers are cleared when launching regular applications.&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=3DS_System_Flaws&amp;diff=12964</id>
		<title>3DS System Flaws</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=3DS_System_Flaws&amp;diff=12964"/>
		<updated>2015-07-26T05:51:01Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: /* Process9 */ Missed a wikilink.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exploits are used to execute unofficial code (homebrew) on the Nintendo 3DS. This page is a list of publicly known system flaws, for userland applications/applets flaws see [[3DS_Userland_Flaws|here]].&lt;br /&gt;
&lt;br /&gt;
=Stale / Rejected Efforts=&lt;br /&gt;
* Neimod has been working on a RAM dumping setup for a little while now. He&#039;s de-soldered the 3DS&#039;s RAM chip and hooked it and the RAM pinouts on the 3DS&#039; PCB up to a custom RAM dumping setup. A while ago he published photos showing his setup to be working quite well, with the 3DS successfully booting up. However, his flickr stream is now private along with most of his work.&lt;br /&gt;
&lt;br /&gt;
* Someone (who will remain unnamed) has released CFW and CIA installers, all of which is copied from the work of others, or copyrighted material.&lt;br /&gt;
&lt;br /&gt;
==Tips and info==&lt;br /&gt;
The 3DS uses the XN feature of the ARM11 processor. There&#039;s no official way from applications to enable executable permission for memory containing arbitrary unsigned code(there&#039;s a [[SVC]] for this, but only [[RO_Services|RO-module]] has access to it). An usable userland exploit would still be useful: you could only do return-oriented-programming with it initially. From ROP one could then exploit system flaw(s), see below.&lt;br /&gt;
&lt;br /&gt;
SD card [[extdata]] and SD savegames can be attacked, for consoles where the console-unique [[Nand/private/movable.sed|movable.sed]] was dumped(accessing SD data is far easier by running code on the target 3DS however).&lt;br /&gt;
&lt;br /&gt;
=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;
!  Fixed with hardware model/revision&lt;br /&gt;
!  Newest hardware model/revision this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| ARM9/ARM11 bootrom vectors point at unitialized RAM&lt;br /&gt;
| ARM9&#039;s and ARM11&#039;s exception vectors are hardcoded to point at the CPU&#039;s internal memory (0x08000000 region for ARM9, AXIWRAM for ARM11). While the bootrom does set them up to point to an endless loop at some point during boot, it does not do so immediately. As such, a carefully-timed fault injection (via hardware) to trigger an exception (such as an invalid instruction) will cause execution to fall into ARM9 RAM. &lt;br /&gt;
Since RAM isn&#039;t cleared on boot (see below), one can immediately start execution of their own code here to dump bootrom, OTP, etc.&lt;br /&gt;
The ARM9 bootrom does the following at reset:  reset vector branches to another instruction, then branches to bootrom+0x8000. Hence, there&#039;s no way to know for certain when exactly the ARM9 exception-vector data stored in memory gets initialized.&lt;br /&gt;
&lt;br /&gt;
This requires *very* *precise* timing for triggering the hardware fault: it&#039;s unknown if anyone actually exploited this successfully at the time of writing(the one who attempted+discovered it *originally* as listed in this wiki section hasn&#039;t).&lt;br /&gt;
| None: all available 3DS models at the time of writing have the exact same ARM9/ARM11 bootrom for the unprotected areas.&lt;br /&gt;
| New3DS&lt;br /&gt;
| End of February 2014&lt;br /&gt;
| [[User:Derrek|derrek]], WulfyStylez (May 2015) independently&lt;br /&gt;
|-&lt;br /&gt;
| Missing AES key clearing&lt;br /&gt;
| The hardware AES engine does not clear keys when doing a hard reset/reboot.&lt;br /&gt;
| None&lt;br /&gt;
| New3DS&lt;br /&gt;
| August 2014&lt;br /&gt;
| Mathieulh/Others&lt;br /&gt;
|-&lt;br /&gt;
| No RAM clearing on reboots&lt;br /&gt;
| On an MCU-triggered reboot all RAM including FCRAM/ARM9 memory/AXIWRAM keeps its contents.&lt;br /&gt;
| None&lt;br /&gt;
| New3DS&lt;br /&gt;
| March 2014&lt;br /&gt;
| [[User:Derrek|derrek]]&lt;br /&gt;
|-&lt;br /&gt;
| 32bits of actual console-unique TWLNAND keydata&lt;br /&gt;
| On retail the 8-bytes at ARM9 address [[Memory_layout|0x01FFB808]] are XORed with hard-coded data, to generate the TWL console-unique keys, including TWLNAND. On Old3DS the high u32 is always 0x0, while on New3DS that u32 is always 0x2. On top of this, the lower u32&#039;s highest bit is always ORed. only 31 bits of the TWL console-unique keydata / TWL consoleID are actually console-unique.&lt;br /&gt;
This allows one to easily bruteforce the TWL console-unique keydata with *just* data from TWLNAND. On DSi the actual console-unique data for key generation is 8-bytes(all bytes actually set).&lt;br /&gt;
| None&lt;br /&gt;
| New3DS&lt;br /&gt;
| 2012?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| DSi / 3DS-TWL key-generator&lt;br /&gt;
| After using the key generator to generate the normal-key, you could overwrite parts of the normal-key with your own data and then recover the key-generator output by comparing the new crypto output with the original crypto output. From the normal-key outputs, you could deduce the TWL key-generator function.&lt;br /&gt;
This applies to the keyX/keyY too.&lt;br /&gt;
&lt;br /&gt;
This attack does not work for the 3DS key-generator because keyslots 0-3 are only for TWL keys.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2011&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ARM9 software ==&lt;br /&gt;
=== arm9loader ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Missing verification-block for the 9.6 keys&lt;br /&gt;
| Starting with [[9.6.0-24|9.6.0-X]] a new set of NAND-based keys were introduced. However, no verification block was added to verify that the new key read from NAND is correct. This was technically an issue from [[9.5.0-22|9.5.0-X]] with the original sector+0 keydata, however the below is only possible with [[9.6.0-24|9.6.0-X]] since keyslots 0x15 and 0x16 are generated from different 0x11 keyXs.&lt;br /&gt;
&lt;br /&gt;
Writing an incorrect key to NAND will cause arm9loader to decrypt the ARM9 kernel as garbage and then jump to it.&lt;br /&gt;
&lt;br /&gt;
This allows an hardware-based attack where you can boot into an older exploited firmware, fill all memory with NOP sleds/jump-instructions, and then reboot into executing garbage. By automating this process with various input keydata, eventually you&#039;ll find some garbage that jumps to your code.&lt;br /&gt;
&lt;br /&gt;
This should give very early ARM9 code execution (pre-ARM9 kernel). As such, it is possible to dump RSA keyslots with this and calculate the 6.x [[Savegames#6.0.0-11_Savegame_keyY|save]], and 7.x [[NCCH]] keys. This cannot be used to recover keys initialized by arm9loader itself. This is due to it wiping the area used for its stack during NAND sector decryption and keyslot init. &lt;br /&gt;
&lt;br /&gt;
Due to FIRMs on both Old and New 3DS using the same RSA data, this can be exploited on Old3DS as well, but only if one already has the actual plaintext normalkey from New3DS NAND sector 0x96 offset-0 and has dumped the OTP area of the Old3DS.&lt;br /&gt;
| Recovery of 6.x [[Savegames#6.0.0-11_Savegame_keyY|save key]]/7.x [[NCCH]] key&lt;br /&gt;
| None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| March, 2015&lt;br /&gt;
| plutoo&lt;br /&gt;
|-&lt;br /&gt;
| Uncleared New3DS keyslot 0x11&lt;br /&gt;
| Originally the New3DS [[FIRM]] arm9bin loader only cleared keyslot 0x11 when it gets executed at firmlaunch. This was fixed with [[9.5.0-22|9.5.0-X]] by completely clearing keyslot 0x11 immediately after the loader finishes using keyslot 0x11.&lt;br /&gt;
This means that any ARM9 code that can execute before the loader clears the keyslot at firmlaunch(including firmlaunch-hax) can get access to the uncleared keyslot 0x11, which then allows one to generate all &amp;lt;=v9.5 New3DS keyXs which are generated by keyslot 0x11.&lt;br /&gt;
&lt;br /&gt;
Therefore, to completely fix this the loader would have to generate more keys using different keyslot 0x11 keydata. This was done with [[9.6.0-24|9.6.0-X]].&lt;br /&gt;
| New3DS keyXs generation&lt;br /&gt;
| Mostly fixed with [[9.5.0-22|9.5.0-X]], completely fixed with new keys with [[9.6.0-24|9.6.0-X]].&lt;br /&gt;
| &lt;br /&gt;
| February 3, 2015 (one day after [[9.5.0-22|9.5.0-X]] release)&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Process9 ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| FAT FS code null-deref&lt;br /&gt;
| When FSFile:Read is used with a file which is corrupted on a FAT filesystem(in particular SD), Process9 can crash. This particular crash is caused by a function returning NULL instead of an actual ptr due to an error. The caller of that function doesn&#039;t check for NULL which then triggers a read based at NULL.&lt;br /&gt;
&lt;br /&gt;
Sample &amp;quot;fsck.vfat -n -v -V &amp;lt;fat image backup&amp;gt;&amp;quot; output for the above crash:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;...&lt;br /&gt;
Starting check/repair pass.&lt;br /&gt;
&amp;lt;FilePath0&amp;gt; and&lt;br /&gt;
&amp;lt;FilePath1&amp;gt;&lt;br /&gt;
 share clusters.&lt;br /&gt;
 Truncating second to 3375104 bytes.&lt;br /&gt;
&amp;lt;FilePath1&amp;gt;&lt;br /&gt;
 File size is 2787392 bytes, cluster chain length is 16384 bytes.&lt;br /&gt;
 Truncating file to 16384 bytes.&lt;br /&gt;
Checking for unused clusters.&lt;br /&gt;
Reclaimed 1 unused cluster (16384 bytes).&lt;br /&gt;
Checking free cluster summary.&lt;br /&gt;
Free cluster summary wrong (1404490 vs. really 1404491)&lt;br /&gt;
 Auto-correcting.&lt;br /&gt;
Starting verification pass.&lt;br /&gt;
Checking for unused clusters.&lt;br /&gt;
Leaving filesystem unchanged.&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Useless null-based-read&lt;br /&gt;
| None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| July 8-9, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| RSA signature padding checks&lt;br /&gt;
| The TWL_FIRM RSA sig padding check code used for all TWL RSA sig-checks has issues, see [[FIRM|here]].&lt;br /&gt;
The main 3DS RSA padding check code(non-certificate, including NATIVE_FIRM) uses the function used with the above to extract more padding + the actual hash from the additional padding. This isn&#039;t really a problem here because there&#039;s proper padding check code which is executed prior to this.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.5.0-22|9.5.0-X]]&lt;br /&gt;
| March 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| firmlaunch-hax: FIRM header ToCToU&lt;br /&gt;
| This can&#039;t be exploited from ARM11 userland.&lt;br /&gt;
During [[FIRM]] launch, the only FIRM header the ARM9 uses at all is stored in FCRAM, this is 0x200-bytes(the actual used FIRM RSA signature is read to the Process9 stack however). The ARM9 doesn&#039;t expect &amp;quot;anything&amp;quot; besides the ARM9 to access this data.&lt;br /&gt;
With [[9.5.0-22]] the address of this FIRM header was changed from a FCRAM address, to ARM9-only address 0x01fffc00.&lt;br /&gt;
| ARM9 code execution&lt;br /&gt;
| [[9.5.0-22]]&lt;br /&gt;
| &lt;br /&gt;
| 2012, 3 days after [[User:Yellows8|Yellows8]] started Process9 code RE.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Uninitialized data output for (PXI) command replies&lt;br /&gt;
| PXI commands for various services(including some [[Filesystem_services_PXI|here]] and many others) can write uninitialized data (like from ARM registers) to the command reply. This happens with stubbed commands, but this can also occur with certain commands when returning an error.&lt;br /&gt;
Certain ARM11 service commands have this same issue as well.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Filesystem_services_PXI|FSPXI]] OpenArchive SD permissions&lt;br /&gt;
| Process9 does not use the exheader ARM9 access-mount permission flag for SD at all.&lt;br /&gt;
This would mean ARM11-kernelmode code / fs-module itself could directly use FSPXI to access SD card without ARM9 checking for SD access, but this is rather useless since a process is usually running with SD access(Home Menu for example) anyway.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[AMPXI:ExportDSiWare]] export path&lt;br /&gt;
| Process9 allocates memory on Process9 heap for the export path then verifies that the actual allocated size matches the input size. Then Process9 copies the input path from FCRAM to this buffer, and uses it with the Process9 FS openfile code, which use paths in the form of &amp;quot;&amp;lt;mountpoint&amp;gt;:/&amp;lt;path&amp;gt;&amp;quot;.&lt;br /&gt;
Process9 does not check the contents of this path at all before passing it to the FS code, besides writing a NUL-terminator to the end of the buffer.&lt;br /&gt;
| Exporting of DSiWare to arbitrary Process9 file-paths, such as &amp;quot;nand:/&amp;lt;path&amp;gt;&amp;quot; etc. This isn&#039;t really useful since the data which gets written can&#039;t be controlled.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.5.0-22]]&lt;br /&gt;
| April 2013&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[DSiWare_Exports]] [[CTCert]] verification&lt;br /&gt;
| Just like DSi originally did, 3DS verifies the APCert for DSiWare on SD with the CTCert also in the DSiWare .bin. On DSi this was fixed with with system-version 1.4.2 by verifying with the actual console-unique cert instead(stored in NAND), while on 3DS it&#039;s still not(?) fixed.&lt;br /&gt;
On 3DS however this is rather useless, due to the entire DSiWare .bin being encrypted with the console-unique movable.sed keyY.&lt;br /&gt;
| When the movable.sed keyY for the target 3DS is known and the target 3DS CTCert private-key is unknown, importing of modified DSiWare SD .bin files.&lt;br /&gt;
| Unknown, probably none.&lt;br /&gt;
| ?&lt;br /&gt;
| April 2013&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Gamecard_Services_PXI]] unchecked REG_CTRCARDCNT transfer-size&lt;br /&gt;
| The u8 REG_CTRCARDCNT transfer-size parameter for the [[Gamecard_Services_PXI]] read/write CTRCARD commands is used as an index for an array of u16 values. Before [[5.0.0-11|5.0.0-X]] this u8 value wasn&#039;t checked, thus out-of-bounds reads could be triggered(which is rather useless in this case).&lt;br /&gt;
| Out-of-bounds read for a value which gets written to a register.&lt;br /&gt;
| [[5.0.0-11|5.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| 2013?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[PXI_Registers|PXI]] cmdbuf buffer overrun&lt;br /&gt;
| The Process9 code responsible [[PXI_Registers|PXI]] communications didn&#039;t verify the size of the incoming command before writing it to a C++ member variable. &lt;br /&gt;
| Probably ARM9 code execution&lt;br /&gt;
| [[5.0.0-11|5.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| March 2015, original timeframe if any unknown&lt;br /&gt;
| plutoo/[[User:Yellows8|Yellows8]]/maybe others(?)&lt;br /&gt;
|-&lt;br /&gt;
| [[Application_Manager_Services_PXI|PXIAM]] command 0x003D0108(See also [[Application_Manager_Services|this]])&lt;br /&gt;
| When handling this command, Process9 allocates a 0x2800-byte heap buffer, then copies the 4 FCRAM input buffers to this heap buffer without checking the sizes at all(only the buffers with non-zero sizes are copied). Starting with [[5.0.0-11|5.0.0-X]], the total combined size of the input data must be &amp;lt;=0x2800.&lt;br /&gt;
| ARM9 code execution&lt;br /&gt;
| [[5.0.0-11|5.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| May 2013&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Process_Services_PXI|PS RSA]] commands buffer overflows&lt;br /&gt;
| pxips9 cmd1(not accessible via ps:ps) and VerifyRsaSha256: unchecked copy to a buffer in Process9&#039;s .bss, from the input FCRAM buffer. The buffer is located before the pxi cmdhandler threads&#039; stacks. SignRsaSha256 also has a buf overflow, but this isn&#039;t exploitable.&lt;br /&gt;
The buffer for this is the buffer for the signature data. With v5.0, the signature buffer was moved to stack, with a check for the signature data size. When the signature data size is too large, Process9 uses [[SVC|svcBreak]].&lt;br /&gt;
| ARM9 code execution&lt;br /&gt;
| [[5.0.0-11|5.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[PXI_Registers|PXI]] pxi_id bad check&lt;br /&gt;
| The Process9 code responsible for [[PXI_Registers|PXI]] communications read pxi_id as a signed char. There were two flaws:&lt;br /&gt;
* They used it as index to a lookup-table without checking the value at all.&lt;br /&gt;
* Another function verified that pxi_id &amp;lt; 7, allowing negative values to pass the check. This would also cause an out-of-range table-lookup.&lt;br /&gt;
| Maybe ARM9 code execution&lt;br /&gt;
| [[3.0.0-5|3.0.0-5]]&lt;br /&gt;
|&lt;br /&gt;
| March 2015, originally 2012 for the first issue at least&lt;br /&gt;
| plutoo, [[User:Yellows8|Yellows8]], maybe others(?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Kernel9 ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[CONFIG Registers#CFG_SYSPROT9|CFG_SYSPROT9]] bit1 not set by Kernel9&lt;br /&gt;
| Old versions of Kernel9 never set bit1 of [[CONFIG Registers#CFG_SYSPROT9|CFG_SYSPROT9]]. This leaves the [[OTP Registers|0x10012000]]-region unprotected (this region should be locked early during boot!). Since it&#039;s never locked, you can dump it once you get ARM9 code execution. See [[OTP Registers|here]] regarding the data stored there.&lt;br /&gt;
&lt;br /&gt;
From [[3.0.0-5|3.0.0-X]] this was fixed by setting the bit in Kernel9 after poking some registers in that region. On New3DS arm9loader sets this bit instead of Kernel9.&lt;br /&gt;
| Dumping of the [[OTP Registers|OTP]] area&lt;br /&gt;
| [[3.0.0-5|3.0.0-X]]&lt;br /&gt;
|&lt;br /&gt;
| February 2015&lt;br /&gt;
| plutoo, Normmatt independently&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ARM11 software ==&lt;br /&gt;
=== Kernel11 ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  [[SVC]] table too small&lt;br /&gt;
|  The table of function pointers for SVC&#039;s only contains entries up to 0x7D, but the biggest allowed SVC for the table is 0x7F. Thus, executing SVC7E or SVC7F would make the SVC-handler read after the buffer, and interpret some ARM instructions as function pointers.&lt;br /&gt;
&lt;br /&gt;
However, this would require patching the kernel .text or modifying SVC-access-control. Even if you could get these to execute, they would still jump to memory that isn&#039;t mapped as executable.&lt;br /&gt;
| &lt;br /&gt;
|  None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| 2012&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
|  [[SVC|svcBackdoor (0x7B)]]&lt;br /&gt;
|  This backdoor allows executing SVC-mode code at the user-specified code-address. This is used by Process9, using this on the ARM11(with NATIVE_FIRM) requires patching the kernel .text or modifying SVC-access-control.&lt;br /&gt;
| See description&lt;br /&gt;
|  None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
|&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| [[Memory_layout#ARM11_Detailed_virtual_memory_map|0xEFF00000]] / 0xDFF00000 ARM11 kernel virtual-memory&lt;br /&gt;
| The ARM11 kernel-mode 0xEFF00000/0xDFF00000 virtual-memory(size 0x100000) is mapped to phys-mem 0x1FF00000(entire DSP-mem + entire AXIWRAM), with permissions RW-. This is used during ARM11 kernel startup, this never seems to be used after that, however.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| memchunkhax&lt;br /&gt;
| The kernel originally did not validate the data stored in the FCRAM kernel heap memchunk-headers for free-memory at all. Exploiting this requires raw R/W access to these memchunk-headers, like physical-memory access with gspwn.&lt;br /&gt;
&lt;br /&gt;
There are &#039;&#039;multiple&#039;&#039; ways to exploit this, but the end-result for most of these is the same: overwrite code in AXIWRAM via the 0xEFF00000/0xDFF00000 kernel virtual-memory mapping.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[9.3.0-21|9.3.0-X]] by checking that the memchunk(including size, next, and prev ptrs) is located within the currently used heap memory. The kernel may also check that the next/prev ptrs are valid compared to other memchunk-headers basically. When any of these checks fail, kernelpanic() is called.&lt;br /&gt;
| When combined with other flaws: ARM11-kernelmode code execution&lt;br /&gt;
| [[9.3.0-21|9.3.0-21]]&lt;br /&gt;
| &lt;br /&gt;
| February 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Multiple [[KLinkedListNode|KLinkedListNode]] SlabHeap use after free bugs&lt;br /&gt;
| The ARM11-kernel did access the &#039;key&#039; field of [[KLinkedListNode|KLinkedListNode]] objects, which are located on the SlabHeap, after freeing them. Thus, triggering an allocation of a new [[KLinkedListNode|KLinkedListNode]] object at the right time could result in a type-confusion. Pseudo-code:&lt;br /&gt;
SlabHeap_free(KLinkedListNode);&lt;br /&gt;
KObject *obj = KLinkedListNode-&amp;gt;key;  // the object there might have changed!&lt;br /&gt;
This bug appeared all over the place.&lt;br /&gt;
| ARM11-kernelmode code exec maybe&lt;br /&gt;
| [[8.0.0-18|8.0.0-18]]&lt;br /&gt;
| &lt;br /&gt;
| April 2015&lt;br /&gt;
| [[User:Derrek|derrek]]&lt;br /&gt;
|-&lt;br /&gt;
| PXI [[RPC_Command_Structure|Command]] input/output buffer permissions&lt;br /&gt;
| Originally the ARM11-kernel didn&#039;t check permissions for PXI input/output buffers for commands. Starting with [[6.0.0-11|6.0.0]] PXI input/output buffers must have RW permissions, otherwise kernelpanic is triggered.&lt;br /&gt;
| &lt;br /&gt;
| [[6.0.0-11|6.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|svcStartInterProcessDma]]&lt;br /&gt;
| For svcStartInterProcessDma, the kernel code had the following flaws:&lt;br /&gt;
&lt;br /&gt;
* Originally the ARM11-kernel read the input DmaConfig structure directly in kernel-mode(ldr(b/h) instructions), without checking whether the DmaConfig address is readable under userland. This was fixed by copying that structure to the SVC-mode stack, using the ldrbt instruction.&lt;br /&gt;
&lt;br /&gt;
* Integer overflows for srcaddr+size and dstaddr+size are now checked(with [[6.0.0-11]]), which were not checked before.&lt;br /&gt;
&lt;br /&gt;
* The kernel now also checks whether the srcaddr/dstaddr (+size) is within userland memory (0x20000000), the kernel now (with [[6.0.0-11]]) returns an error when the address is beyond userland memory. Using an address &amp;gt;=0x20000000 would result in the kernel reading from the process L1 MMU table, beyond the memory allocated for that MMU table(for vaddr-&amp;gt;physaddr conversion). &lt;br /&gt;
| &lt;br /&gt;
| [[6.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| DmaConfig issue: unknown. The rest: 2014&lt;br /&gt;
| plutoo, [[User:Yellows8|Yellows8]] independently&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|svcControlMemory]] Parameter checks&lt;br /&gt;
| For svcControlMemory the parameter check had these two flaws:&lt;br /&gt;
&lt;br /&gt;
* The allowed range for addr0, addr1, size parameters depends on which MemoryOperation is being specified. The limitation for GSP heap was only checked if op=(u32)0x10003. By setting a random bit in op that has no meaning (like bit17?), op would instead be (u32)0x30003, and the range-check would be less strict and not accurate. However, the kernel doesn&#039;t actually use the input address for LINEAR memory-mapping at all besides the range-checks, so this isn&#039;t actually useful. This was fixed in the kernel by just checking for the LINEAR bit, instead of comparing the entire MemoryOperation value with 0x10003.&lt;br /&gt;
&lt;br /&gt;
* Integer overflows on (addr0+size) are now checked that previously weren&#039;t (this also applies to most other address checks elsewhere in the kernel).&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| plutoo&lt;br /&gt;
|-&lt;br /&gt;
| [[RPC_Command_Structure|Command]] request/response buffer overflow&lt;br /&gt;
| Originally the kernel did not check the word-values from the command-header. Starting with [[5.0.0-11]], the kernel will trigger a kernelpanic() when the total word-size of the entire command(including the cmd-header) is larger than 0x40-words (0x100-bytes). This allows overwriting threadlocalstorage+0x180 in the destination thread. However, since the data written there would be translate parameters (such as header-words + buffer addresses), exploiting this would likely be very difficult, if possible at all.&lt;br /&gt;
&lt;br /&gt;
If the two words at threadlocalstorage+0x180 could be overwritten with controlled data this way, one could then use a command with a buffer-header of &amp;lt;nowiki&amp;gt;((size&amp;lt;&amp;lt;14) | 2)&amp;lt;/nowiki&amp;gt; to write arbitrary memory to any RW userland memory in the destination process.&lt;br /&gt;
| &lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| v4.1 FIRM -&amp;gt; v5.0 code diff&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|SVC stack allocation overflows]]&lt;br /&gt;
| &lt;br /&gt;
* Syscalls that allocate a variable-length array on stack, only checked bit31 before multiplying by 4/16 (when calculating how much memory to allocate). If a large integer was passed as input to one of these syscalls, an integer overflow would occur, and too little memory would have been allocated on stack resulting in a buffer overrun. &lt;br /&gt;
* The alignment (size+7)&amp;amp;~7 calculation before allocation was not checked for integer overflow.&lt;br /&gt;
&lt;br /&gt;
This might allow for ARM11 kernel code-execution.&lt;br /&gt;
&lt;br /&gt;
(Applies to svcSetResourceLimitValues, svcGetThreadList, svcGetProcessList, svcReplyAndReceive, svcWaitSynchronizationN.)&lt;br /&gt;
| &lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| v4.1 FIRM -&amp;gt; v5.0 code diff&lt;br /&gt;
| plutoo, [[User:Yellows8|Yellows8]] complementary&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|svcControlMemory]] MemoryOperation MAP memory-permissions&lt;br /&gt;
| svcControlMemory with MemoryOperation=MAP allows mapping the already-mapped process virtual-mem at addr1, to addr0. The lowest address permitted for addr1 is 0x00100000. Originally the ARM11 kernel didn&#039;t check memory permissions for addr1. Therefore .text as addr1 could be mapped elsewhere as RW- memory, which allowed ARM11 userland code-execution.&lt;br /&gt;
| &lt;br /&gt;
| [[4.1.0-8]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[RPC_Command_Structure|Command]] input/output buffer permissions&lt;br /&gt;
| Originally the ARM11 kernel didn&#039;t check memory permissions for the input/output buffers for commands. Starting with [[4.0.0-7]] the ARM11 kernel will trigger a kernelpanic() if the input/output buffers don&#039;t have the required memory permissions. For example, this allowed a FSUSER file-read to .text, which therefore allowed ARM11-userland code execution.&lt;br /&gt;
| &lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|svcReadProcessMemory/svcWriteProcessMemory memory]] permissions&lt;br /&gt;
| Originally the kernel only checked the first page(0x1000-bytes) of the src/dst buffers, for svcReadProcessMemory and svcWriteProcessMemory. There is no known retail processes which have access to these SVCs.&lt;br /&gt;
| &lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| &lt;br /&gt;
| 2012?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== [[FIRM]] Sysmodules ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[Services|&amp;quot;srv:pm&amp;quot;]] process registration&lt;br /&gt;
| Originally any process had access to the port &amp;quot;srv:pm&amp;quot;. The PID&#039;s used for the (un)registration commands are not checked either. This allowed any process to re-register itself with &amp;quot;srv:pm&amp;quot;, and therefore allowed the process to give itself access to any service, bypassing the exheader service-access-control list.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[7.0.0-13]]: starting with [[7.0.0-13]] &amp;quot;srv:pm&amp;quot; is now a service instead of a globally accessible port. Only processes with PID&#039;s less than 6 (in other words: fs, ldr, sm, pm, pxi modules) have access to it. With [[7.0.0-13]] there can only be one session for &amp;quot;srv:pm&amp;quot; open at a time(this is used by pm module), svcBreak will be executed if more sessions are opened by the processes which can access this.&lt;br /&gt;
&lt;br /&gt;
This flaw was needed for exploiting the &amp;lt;=v4.x Process9 PXI vulnerabilities from ARM11 userland ROP, since most applications don&#039;t have access to those service(s).&lt;br /&gt;
| Access to arbitrary services&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| FSDIR null-deref&lt;br /&gt;
| [[Filesystem_services|FS]]-module may crash in some cases when handling directory reading. The trigger seems to be due to using [[FSDir:Close]] without closing the dir-handle afterwards?(Perhaps this is caused by out-of-memory?) This seems to be useless since it&#039;s just a null-deref.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| May 19(?)-20, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Standalone Sysmodules ===&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;
!  Fixed in system-module system-version&lt;br /&gt;
!  Last system-module system-version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[SPI_Services|SPI]] service out-of-bounds write&lt;br /&gt;
| cmd1 has out-of-bounds write allowing overwrite of some static variables in .data.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.5.0-22]]&lt;br /&gt;
| March 2015&lt;br /&gt;
| plutoo&lt;br /&gt;
|-&lt;br /&gt;
| [[NFC_Services|NFC]] module service command buf-overflows&lt;br /&gt;
| NFC module copies data with certain commands, from command input buffers to stack without checking the size. These commands include the following, it&#039;s unknown if there&#039;s more commands with similar issues: &amp;quot;nfc:dev&amp;quot; &amp;lt;0x000C....&amp;gt; and &amp;quot;nfc:s&amp;quot; &amp;lt;0x0037....&amp;gt;.&lt;br /&gt;
Since both of these commands are stubbed in the Old3DS NFC module from the very first version(those just return an error), these issues only affect the New3DS NFC module.&lt;br /&gt;
&lt;br /&gt;
There&#039;s no known retail titles which have access to either of these services.&lt;br /&gt;
| ROP under NFC module.&lt;br /&gt;
| New3DS: None&lt;br /&gt;
| New3DS: [[9.5.0-22]]&lt;br /&gt;
| December 2014?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[News_Services|NEWSS]] service command notificationID validation failure&lt;br /&gt;
| This module does not validate the input notificationID for &amp;lt;nowiki&amp;gt;&amp;quot;news:s&amp;quot;&amp;lt;/nowiki&amp;gt; service commands. This is an out-of-bounds array index bug. For example, [[NEWSS:SetNotificationHeader]] could be used to exploit news module: this copies the input data(size is properly checked) to: out = newsdb_savedata+0x10 + (someu32array[notificationID]*0x70).&lt;br /&gt;
| ROP under news module.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.7.0-25|9.7.0-X]]&lt;br /&gt;
| December 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_Services|HID]] module shared-mem&lt;br /&gt;
| HID module does not validate the index values in [[HID_Shared_Memory|sharedmem]](just changes index to 0 when index == maxval when updating), therefore large values will result in HID module writing HID data to arbitrary addresses.&lt;br /&gt;
| ROP under HID module, but this is *very* unlikely to be exploitable since the data written is HID data.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.3.0-21]]&lt;br /&gt;
| 2014?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| gspwn&lt;br /&gt;
| GSP module does not validate addresses given to the GPU. This allows a user-mode application/applet to read/write to a large part of physical FCRAM using GPU DMA. From this, you can overwrite the .text segment of the application you&#039;re running under, and gain real code-execution from a ROP-chain. Normally applets&#039; .text([[Home Menu]], [[Internet Browser]], etc) is located beyond the area accessible by the GPU, except for [[RO_Services|CROs]] used by applets([[Internet Browser]] for example).&lt;br /&gt;
&lt;br /&gt;
FCRAM is gpu-accessible up to physaddr 0x26400000 on Old3DS, and 0x2DC00000 on New3DS.&lt;br /&gt;
| User-mode code execution.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Early 2014&lt;br /&gt;
| smea, [[User:Yellows8|Yellows8]]/others before then&lt;br /&gt;
|-&lt;br /&gt;
| rohax&lt;br /&gt;
| Using gspwn, it is possible to overwrite a loaded [[CRO0]]/[[CRR0]] after its RSA-signature has been validated. Badly validated [[CRO0]] header leads to arbitrary read/write of memory in the ro-process. This gives code-execution in the ro module, who has access to [[SVC|syscalls]] 0x70-0x72, 0x7D.&lt;br /&gt;
&lt;br /&gt;
This was fixed after [[ninjhax]] release by adding checks on [[CRO0]]-based pointers before writing to them.&lt;br /&gt;
| Memory-mapping syscalls.&lt;br /&gt;
| [[9.3.0-21]]&lt;br /&gt;
| [[9.4.0-21]]&lt;br /&gt;
| &lt;br /&gt;
| smea, plutoo joint effort&lt;br /&gt;
|-&lt;br /&gt;
| Region free&lt;br /&gt;
| Only [[Home Menu]] itself checks gamecards&#039; region when launching them. Therefore, any application launch that is done directly with [[NS]] without signaling Home Menu to launch the app, will result in region checks being bypassed.&lt;br /&gt;
This essentially means launching the gamecard with the [[NS_and_APT_Services|&amp;quot;ns:s&amp;quot;]] service. The main way to exploit this is to trigger a FIRM launch with an application specified, either with a normal FIRM launch or a hardware [[NSS:RebootSystem|reboot]].&lt;br /&gt;
| Launching gamecards from any region + bypassing Home Menu gamecard-sysupdate installation&lt;br /&gt;
| None&lt;br /&gt;
| [[9.8.0-25|9.8.0-X]]&lt;br /&gt;
| June(?) 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[NWM_Services|NWM]] service-cmd state null-ptr deref&lt;br /&gt;
| The NWMUDS service command code loads a ptr from .data, adds an offset to that, then passes that as the state address for the actual command-handler function. The value of the ptr loaded from .data is not checked, therefore this will cause crashes due to that being 0x0 when NWMUDS was not properly initialized.&lt;br /&gt;
It&#039;s unknown whether any NWM services besides NWMUDS have this issue.&lt;br /&gt;
| This is rather useless since it&#039;s only a crash caused by a state ptr based at 0x0.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| 2013?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General/CTRSDK ===&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;
!  Fixed in version&lt;br /&gt;
!  Last version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[NWM_Services|UDS]] beacon additional-data buffer overflow&lt;br /&gt;
| Originally CTRSDK did not validate the UDS additional-data size before using that size to copy the additional-data to a [[NWM_Services|networkstruct]]. This was eventually fixed.&lt;br /&gt;
This was discovered while doing code RE with an old dlp-module version. It&#039;s unknown in what specific CTRSDK version this was fixed, or even what system-version updated titles with a fixed version.&lt;br /&gt;
&lt;br /&gt;
It&#039;s unknown if there&#039;s any titles using a vulnerable CTRSDK version which are also exploitable with this(dlp module can&#039;t be exploited with this).&lt;br /&gt;
&lt;br /&gt;
The maximum number of bytes that can be written beyond the end of the outbuf is 0x37-bytes, with additionaldata_size=0xFF.&lt;br /&gt;
| Perhaps ROP, very difficult if possible with anything at all&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
| September(?) 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=3DS_System_Flaws&amp;diff=12963</id>
		<title>3DS System Flaws</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=3DS_System_Flaws&amp;diff=12963"/>
		<updated>2015-07-26T05:49:38Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Restore from Google cache.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exploits are used to execute unofficial code (homebrew) on the Nintendo 3DS. This page is a list of publicly known system flaws, for userland applications/applets flaws see [[3DS_Userland_Flaws|here]].&lt;br /&gt;
&lt;br /&gt;
=Stale / Rejected Efforts=&lt;br /&gt;
* Neimod has been working on a RAM dumping setup for a little while now. He&#039;s de-soldered the 3DS&#039;s RAM chip and hooked it and the RAM pinouts on the 3DS&#039; PCB up to a custom RAM dumping setup. A while ago he published photos showing his setup to be working quite well, with the 3DS successfully booting up. However, his flickr stream is now private along with most of his work.&lt;br /&gt;
&lt;br /&gt;
* Someone (who will remain unnamed) has released CFW and CIA installers, all of which is copied from the work of others, or copyrighted material.&lt;br /&gt;
&lt;br /&gt;
==Tips and info==&lt;br /&gt;
The 3DS uses the XN feature of the ARM11 processor. There&#039;s no official way from applications to enable executable permission for memory containing arbitrary unsigned code(there&#039;s a [[SVC]] for this, but only [[RO_Services|RO-module]] has access to it). An usable userland exploit would still be useful: you could only do return-oriented-programming with it initially. From ROP one could then exploit system flaw(s), see below.&lt;br /&gt;
&lt;br /&gt;
SD card [[extdata]] and SD savegames can be attacked, for consoles where the console-unique [[Nand/private/movable.sed|movable.sed]] was dumped(accessing SD data is far easier by running code on the target 3DS however).&lt;br /&gt;
&lt;br /&gt;
=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;
!  Fixed with hardware model/revision&lt;br /&gt;
!  Newest hardware model/revision this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| ARM9/ARM11 bootrom vectors point at unitialized RAM&lt;br /&gt;
| ARM9&#039;s and ARM11&#039;s exception vectors are hardcoded to point at the CPU&#039;s internal memory (0x08000000 region for ARM9, AXIWRAM for ARM11). While the bootrom does set them up to point to an endless loop at some point during boot, it does not do so immediately. As such, a carefully-timed fault injection (via hardware) to trigger an exception (such as an invalid instruction) will cause execution to fall into ARM9 RAM. &lt;br /&gt;
Since RAM isn&#039;t cleared on boot (see below), one can immediately start execution of their own code here to dump bootrom, OTP, etc.&lt;br /&gt;
The ARM9 bootrom does the following at reset:  reset vector branches to another instruction, then branches to bootrom+0x8000. Hence, there&#039;s no way to know for certain when exactly the ARM9 exception-vector data stored in memory gets initialized.&lt;br /&gt;
&lt;br /&gt;
This requires *very* *precise* timing for triggering the hardware fault: it&#039;s unknown if anyone actually exploited this successfully at the time of writing(the one who attempted+discovered it *originally* as listed in this wiki section hasn&#039;t).&lt;br /&gt;
| None: all available 3DS models at the time of writing have the exact same ARM9/ARM11 bootrom for the unprotected areas.&lt;br /&gt;
| New3DS&lt;br /&gt;
| End of February 2014&lt;br /&gt;
| [[User:Derrek|derrek]], WulfyStylez (May 2015) independently&lt;br /&gt;
|-&lt;br /&gt;
| Missing AES key clearing&lt;br /&gt;
| The hardware AES engine does not clear keys when doing a hard reset/reboot.&lt;br /&gt;
| None&lt;br /&gt;
| New3DS&lt;br /&gt;
| August 2014&lt;br /&gt;
| Mathieulh/Others&lt;br /&gt;
|-&lt;br /&gt;
| No RAM clearing on reboots&lt;br /&gt;
| On an MCU-triggered reboot all RAM including FCRAM/ARM9 memory/AXIWRAM keeps its contents.&lt;br /&gt;
| None&lt;br /&gt;
| New3DS&lt;br /&gt;
| March 2014&lt;br /&gt;
| [[User:Derrek|derrek]]&lt;br /&gt;
|-&lt;br /&gt;
| 32bits of actual console-unique TWLNAND keydata&lt;br /&gt;
| On retail the 8-bytes at ARM9 address [[Memory_layout|0x01FFB808]] are XORed with hard-coded data, to generate the TWL console-unique keys, including TWLNAND. On Old3DS the high u32 is always 0x0, while on New3DS that u32 is always 0x2. On top of this, the lower u32&#039;s highest bit is always ORed. only 31 bits of the TWL console-unique keydata / TWL consoleID are actually console-unique.&lt;br /&gt;
This allows one to easily bruteforce the TWL console-unique keydata with *just* data from TWLNAND. On DSi the actual console-unique data for key generation is 8-bytes(all bytes actually set).&lt;br /&gt;
| None&lt;br /&gt;
| New3DS&lt;br /&gt;
| 2012?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| DSi / 3DS-TWL key-generator&lt;br /&gt;
| After using the key generator to generate the normal-key, you could overwrite parts of the normal-key with your own data and then recover the key-generator output by comparing the new crypto output with the original crypto output. From the normal-key outputs, you could deduce the TWL key-generator function.&lt;br /&gt;
This applies to the keyX/keyY too.&lt;br /&gt;
&lt;br /&gt;
This attack does not work for the 3DS key-generator because keyslots 0-3 are only for TWL keys.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2011&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ARM9 software ==&lt;br /&gt;
=== arm9loader ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Missing verification-block for the 9.6 keys&lt;br /&gt;
| Starting with [[9.6.0-24|9.6.0-X]] a new set of NAND-based keys were introduced. However, no verification block was added to verify that the new key read from NAND is correct. This was technically an issue from [[9.5.0-22|9.5.0-X]] with the original sector+0 keydata, however the below is only possible with [[9.6.0-24|9.6.0-X]] since keyslots 0x15 and 0x16 are generated from different 0x11 keyXs.&lt;br /&gt;
&lt;br /&gt;
Writing an incorrect key to NAND will cause arm9loader to decrypt the ARM9 kernel as garbage and then jump to it.&lt;br /&gt;
&lt;br /&gt;
This allows an hardware-based attack where you can boot into an older exploited firmware, fill all memory with NOP sleds/jump-instructions, and then reboot into executing garbage. By automating this process with various input keydata, eventually you&#039;ll find some garbage that jumps to your code.&lt;br /&gt;
&lt;br /&gt;
This should give very early ARM9 code execution (pre-ARM9 kernel). As such, it is possible to dump RSA keyslots with this and calculate the 6.x [[Savegames#6.0.0-11_Savegame_keyY|save]], and 7.x [[NCCH]] keys. This cannot be used to recover keys initialized by arm9loader itself. This is due to it wiping the area used for its stack during NAND sector decryption and keyslot init. &lt;br /&gt;
&lt;br /&gt;
Due to FIRMs on both Old and New 3DS using the same RSA data, this can be exploited on Old3DS as well, but only if one already has the actual plaintext normalkey from New3DS NAND sector 0x96 offset-0 and has dumped the OTP area of the Old3DS.&lt;br /&gt;
| Recovery of 6.x [[Savegames#6.0.0-11_Savegame_keyY|save key]]/7.x [[NCCH]] key&lt;br /&gt;
| None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| March, 2015&lt;br /&gt;
| plutoo&lt;br /&gt;
|-&lt;br /&gt;
| Uncleared New3DS keyslot 0x11&lt;br /&gt;
| Originally the New3DS [[FIRM]] arm9bin loader only cleared keyslot 0x11 when it gets executed at firmlaunch. This was fixed with [[9.5.0-22|9.5.0-X]] by completely clearing keyslot 0x11 immediately after the loader finishes using keyslot 0x11.&lt;br /&gt;
This means that any ARM9 code that can execute before the loader clears the keyslot at firmlaunch(including firmlaunch-hax) can get access to the uncleared keyslot 0x11, which then allows one to generate all &amp;lt;=v9.5 New3DS keyXs which are generated by keyslot 0x11.&lt;br /&gt;
&lt;br /&gt;
Therefore, to completely fix this the loader would have to generate more keys using different keyslot 0x11 keydata. This was done with [[9.6.0-24|9.6.0-X]].&lt;br /&gt;
| New3DS keyXs generation&lt;br /&gt;
| Mostly fixed with [[9.5.0-22|9.5.0-X]], completely fixed with new keys with [[9.6.0-24|9.6.0-X]].&lt;br /&gt;
| &lt;br /&gt;
| February 3, 2015 (one day after [[9.5.0-22|9.5.0-X]] release)&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Process9 ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| FAT FS code null-deref&lt;br /&gt;
| When FSFile:Read is used with a file which is corrupted on a FAT filesystem(in particular SD), Process9 can crash. This particular crash is caused by a function returning NULL instead of an actual ptr due to an error. The caller of that function doesn&#039;t check for NULL which then triggers a read based at NULL.&lt;br /&gt;
&lt;br /&gt;
Sample &amp;quot;fsck.vfat -n -v -V &amp;lt;fat image backup&amp;gt;&amp;quot; output for the above crash:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;...&lt;br /&gt;
Starting check/repair pass.&lt;br /&gt;
&amp;lt;FilePath0&amp;gt; and&lt;br /&gt;
&amp;lt;FilePath1&amp;gt;&lt;br /&gt;
 share clusters.&lt;br /&gt;
 Truncating second to 3375104 bytes.&lt;br /&gt;
&amp;lt;FilePath1&amp;gt;&lt;br /&gt;
 File size is 2787392 bytes, cluster chain length is 16384 bytes.&lt;br /&gt;
 Truncating file to 16384 bytes.&lt;br /&gt;
Checking for unused clusters.&lt;br /&gt;
Reclaimed 1 unused cluster (16384 bytes).&lt;br /&gt;
Checking free cluster summary.&lt;br /&gt;
Free cluster summary wrong (1404490 vs. really 1404491)&lt;br /&gt;
 Auto-correcting.&lt;br /&gt;
Starting verification pass.&lt;br /&gt;
Checking for unused clusters.&lt;br /&gt;
Leaving filesystem unchanged.&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Useless null-based-read&lt;br /&gt;
| None&lt;br /&gt;
| 9.6.0-X&lt;br /&gt;
| July 8-9, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| RSA signature padding checks&lt;br /&gt;
| The TWL_FIRM RSA sig padding check code used for all TWL RSA sig-checks has issues, see [[FIRM|here]].&lt;br /&gt;
The main 3DS RSA padding check code(non-certificate, including NATIVE_FIRM) uses the function used with the above to extract more padding + the actual hash from the additional padding. This isn&#039;t really a problem here because there&#039;s proper padding check code which is executed prior to this.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.5.0-22|9.5.0-X]]&lt;br /&gt;
| March 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| firmlaunch-hax: FIRM header ToCToU&lt;br /&gt;
| This can&#039;t be exploited from ARM11 userland.&lt;br /&gt;
During [[FIRM]] launch, the only FIRM header the ARM9 uses at all is stored in FCRAM, this is 0x200-bytes(the actual used FIRM RSA signature is read to the Process9 stack however). The ARM9 doesn&#039;t expect &amp;quot;anything&amp;quot; besides the ARM9 to access this data.&lt;br /&gt;
With [[9.5.0-22]] the address of this FIRM header was changed from a FCRAM address, to ARM9-only address 0x01fffc00.&lt;br /&gt;
| ARM9 code execution&lt;br /&gt;
| [[9.5.0-22]]&lt;br /&gt;
| &lt;br /&gt;
| 2012, 3 days after [[User:Yellows8|Yellows8]] started Process9 code RE.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Uninitialized data output for (PXI) command replies&lt;br /&gt;
| PXI commands for various services(including some [[Filesystem_services_PXI|here]] and many others) can write uninitialized data (like from ARM registers) to the command reply. This happens with stubbed commands, but this can also occur with certain commands when returning an error.&lt;br /&gt;
Certain ARM11 service commands have this same issue as well.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Filesystem_services_PXI|FSPXI]] OpenArchive SD permissions&lt;br /&gt;
| Process9 does not use the exheader ARM9 access-mount permission flag for SD at all.&lt;br /&gt;
This would mean ARM11-kernelmode code / fs-module itself could directly use FSPXI to access SD card without ARM9 checking for SD access, but this is rather useless since a process is usually running with SD access(Home Menu for example) anyway.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[AMPXI:ExportDSiWare]] export path&lt;br /&gt;
| Process9 allocates memory on Process9 heap for the export path then verifies that the actual allocated size matches the input size. Then Process9 copies the input path from FCRAM to this buffer, and uses it with the Process9 FS openfile code, which use paths in the form of &amp;quot;&amp;lt;mountpoint&amp;gt;:/&amp;lt;path&amp;gt;&amp;quot;.&lt;br /&gt;
Process9 does not check the contents of this path at all before passing it to the FS code, besides writing a NUL-terminator to the end of the buffer.&lt;br /&gt;
| Exporting of DSiWare to arbitrary Process9 file-paths, such as &amp;quot;nand:/&amp;lt;path&amp;gt;&amp;quot; etc. This isn&#039;t really useful since the data which gets written can&#039;t be controlled.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.5.0-22]]&lt;br /&gt;
| April 2013&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[DSiWare_Exports]] [[CTCert]] verification&lt;br /&gt;
| Just like DSi originally did, 3DS verifies the APCert for DSiWare on SD with the CTCert also in the DSiWare .bin. On DSi this was fixed with with system-version 1.4.2 by verifying with the actual console-unique cert instead(stored in NAND), while on 3DS it&#039;s still not(?) fixed.&lt;br /&gt;
On 3DS however this is rather useless, due to the entire DSiWare .bin being encrypted with the console-unique movable.sed keyY.&lt;br /&gt;
| When the movable.sed keyY for the target 3DS is known and the target 3DS CTCert private-key is unknown, importing of modified DSiWare SD .bin files.&lt;br /&gt;
| Unknown, probably none.&lt;br /&gt;
| ?&lt;br /&gt;
| April 2013&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Gamecard_Services_PXI]] unchecked REG_CTRCARDCNT transfer-size&lt;br /&gt;
| The u8 REG_CTRCARDCNT transfer-size parameter for the [[Gamecard_Services_PXI]] read/write CTRCARD commands is used as an index for an array of u16 values. Before [[5.0.0-11|5.0.0-X]] this u8 value wasn&#039;t checked, thus out-of-bounds reads could be triggered(which is rather useless in this case).&lt;br /&gt;
| Out-of-bounds read for a value which gets written to a register.&lt;br /&gt;
| [[5.0.0-11|5.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| 2013?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[PXI_Registers|PXI]] cmdbuf buffer overrun&lt;br /&gt;
| The Process9 code responsible [[PXI_Registers|PXI]] communications didn&#039;t verify the size of the incoming command before writing it to a C++ member variable. &lt;br /&gt;
| Probably ARM9 code execution&lt;br /&gt;
| [[5.0.0-11|5.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| March 2015, original timeframe if any unknown&lt;br /&gt;
| plutoo/[[User:Yellows8|Yellows8]]/maybe others(?)&lt;br /&gt;
|-&lt;br /&gt;
| [[Application_Manager_Services_PXI|PXIAM]] command 0x003D0108(See also [[Application_Manager_Services|this]])&lt;br /&gt;
| When handling this command, Process9 allocates a 0x2800-byte heap buffer, then copies the 4 FCRAM input buffers to this heap buffer without checking the sizes at all(only the buffers with non-zero sizes are copied). Starting with [[5.0.0-11|5.0.0-X]], the total combined size of the input data must be &amp;lt;=0x2800.&lt;br /&gt;
| ARM9 code execution&lt;br /&gt;
| [[5.0.0-11|5.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| May 2013&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Process_Services_PXI|PS RSA]] commands buffer overflows&lt;br /&gt;
| pxips9 cmd1(not accessible via ps:ps) and VerifyRsaSha256: unchecked copy to a buffer in Process9&#039;s .bss, from the input FCRAM buffer. The buffer is located before the pxi cmdhandler threads&#039; stacks. SignRsaSha256 also has a buf overflow, but this isn&#039;t exploitable.&lt;br /&gt;
The buffer for this is the buffer for the signature data. With v5.0, the signature buffer was moved to stack, with a check for the signature data size. When the signature data size is too large, Process9 uses [[SVC|svcBreak]].&lt;br /&gt;
| ARM9 code execution&lt;br /&gt;
| [[5.0.0-11|5.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[PXI_Registers|PXI]] pxi_id bad check&lt;br /&gt;
| The Process9 code responsible for [[PXI_Registers|PXI]] communications read pxi_id as a signed char. There were two flaws:&lt;br /&gt;
* They used it as index to a lookup-table without checking the value at all.&lt;br /&gt;
* Another function verified that pxi_id &amp;lt; 7, allowing negative values to pass the check. This would also cause an out-of-range table-lookup.&lt;br /&gt;
| Maybe ARM9 code execution&lt;br /&gt;
| [[3.0.0-5|3.0.0-5]]&lt;br /&gt;
|&lt;br /&gt;
| March 2015, originally 2012 for the first issue at least&lt;br /&gt;
| plutoo, [[User:Yellows8|Yellows8]], maybe others(?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Kernel9 ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[CONFIG Registers#CFG_SYSPROT9|CFG_SYSPROT9]] bit1 not set by Kernel9&lt;br /&gt;
| Old versions of Kernel9 never set bit1 of [[CONFIG Registers#CFG_SYSPROT9|CFG_SYSPROT9]]. This leaves the [[OTP Registers|0x10012000]]-region unprotected (this region should be locked early during boot!). Since it&#039;s never locked, you can dump it once you get ARM9 code execution. See [[OTP Registers|here]] regarding the data stored there.&lt;br /&gt;
&lt;br /&gt;
From [[3.0.0-5|3.0.0-X]] this was fixed by setting the bit in Kernel9 after poking some registers in that region. On New3DS arm9loader sets this bit instead of Kernel9.&lt;br /&gt;
| Dumping of the [[OTP Registers|OTP]] area&lt;br /&gt;
| [[3.0.0-5|3.0.0-X]]&lt;br /&gt;
|&lt;br /&gt;
| February 2015&lt;br /&gt;
| plutoo, Normmatt independently&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ARM11 software ==&lt;br /&gt;
=== Kernel11 ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  [[SVC]] table too small&lt;br /&gt;
|  The table of function pointers for SVC&#039;s only contains entries up to 0x7D, but the biggest allowed SVC for the table is 0x7F. Thus, executing SVC7E or SVC7F would make the SVC-handler read after the buffer, and interpret some ARM instructions as function pointers.&lt;br /&gt;
&lt;br /&gt;
However, this would require patching the kernel .text or modifying SVC-access-control. Even if you could get these to execute, they would still jump to memory that isn&#039;t mapped as executable.&lt;br /&gt;
| &lt;br /&gt;
|  None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| 2012&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
|  [[SVC|svcBackdoor (0x7B)]]&lt;br /&gt;
|  This backdoor allows executing SVC-mode code at the user-specified code-address. This is used by Process9, using this on the ARM11(with NATIVE_FIRM) requires patching the kernel .text or modifying SVC-access-control.&lt;br /&gt;
| See description&lt;br /&gt;
|  None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
|&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| [[Memory_layout#ARM11_Detailed_virtual_memory_map|0xEFF00000]] / 0xDFF00000 ARM11 kernel virtual-memory&lt;br /&gt;
| The ARM11 kernel-mode 0xEFF00000/0xDFF00000 virtual-memory(size 0x100000) is mapped to phys-mem 0x1FF00000(entire DSP-mem + entire AXIWRAM), with permissions RW-. This is used during ARM11 kernel startup, this never seems to be used after that, however.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| memchunkhax&lt;br /&gt;
| The kernel originally did not validate the data stored in the FCRAM kernel heap memchunk-headers for free-memory at all. Exploiting this requires raw R/W access to these memchunk-headers, like physical-memory access with gspwn.&lt;br /&gt;
&lt;br /&gt;
There are &#039;&#039;multiple&#039;&#039; ways to exploit this, but the end-result for most of these is the same: overwrite code in AXIWRAM via the 0xEFF00000/0xDFF00000 kernel virtual-memory mapping.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[9.3.0-21|9.3.0-X]] by checking that the memchunk(including size, next, and prev ptrs) is located within the currently used heap memory. The kernel may also check that the next/prev ptrs are valid compared to other memchunk-headers basically. When any of these checks fail, kernelpanic() is called.&lt;br /&gt;
| When combined with other flaws: ARM11-kernelmode code execution&lt;br /&gt;
| [[9.3.0-21|9.3.0-21]]&lt;br /&gt;
| &lt;br /&gt;
| February 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Multiple [[KLinkedListNode|KLinkedListNode]] SlabHeap use after free bugs&lt;br /&gt;
| The ARM11-kernel did access the &#039;key&#039; field of [[KLinkedListNode|KLinkedListNode]] objects, which are located on the SlabHeap, after freeing them. Thus, triggering an allocation of a new [[KLinkedListNode|KLinkedListNode]] object at the right time could result in a type-confusion. Pseudo-code:&lt;br /&gt;
SlabHeap_free(KLinkedListNode);&lt;br /&gt;
KObject *obj = KLinkedListNode-&amp;gt;key;  // the object there might have changed!&lt;br /&gt;
This bug appeared all over the place.&lt;br /&gt;
| ARM11-kernelmode code exec maybe&lt;br /&gt;
| [[8.0.0-18|8.0.0-18]]&lt;br /&gt;
| &lt;br /&gt;
| April 2015&lt;br /&gt;
| [[User:Derrek|derrek]]&lt;br /&gt;
|-&lt;br /&gt;
| PXI [[RPC_Command_Structure|Command]] input/output buffer permissions&lt;br /&gt;
| Originally the ARM11-kernel didn&#039;t check permissions for PXI input/output buffers for commands. Starting with [[6.0.0-11|6.0.0]] PXI input/output buffers must have RW permissions, otherwise kernelpanic is triggered.&lt;br /&gt;
| &lt;br /&gt;
| [[6.0.0-11|6.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|svcStartInterProcessDma]]&lt;br /&gt;
| For svcStartInterProcessDma, the kernel code had the following flaws:&lt;br /&gt;
&lt;br /&gt;
* Originally the ARM11-kernel read the input DmaConfig structure directly in kernel-mode(ldr(b/h) instructions), without checking whether the DmaConfig address is readable under userland. This was fixed by copying that structure to the SVC-mode stack, using the ldrbt instruction.&lt;br /&gt;
&lt;br /&gt;
* Integer overflows for srcaddr+size and dstaddr+size are now checked(with [[6.0.0-11]]), which were not checked before.&lt;br /&gt;
&lt;br /&gt;
* The kernel now also checks whether the srcaddr/dstaddr (+size) is within userland memory (0x20000000), the kernel now (with [[6.0.0-11]]) returns an error when the address is beyond userland memory. Using an address &amp;gt;=0x20000000 would result in the kernel reading from the process L1 MMU table, beyond the memory allocated for that MMU table(for vaddr-&amp;gt;physaddr conversion). &lt;br /&gt;
| &lt;br /&gt;
| [[6.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| DmaConfig issue: unknown. The rest: 2014&lt;br /&gt;
| plutoo, [[User:Yellows8|Yellows8]] independently&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|svcControlMemory]] Parameter checks&lt;br /&gt;
| For svcControlMemory the parameter check had these two flaws:&lt;br /&gt;
&lt;br /&gt;
* The allowed range for addr0, addr1, size parameters depends on which MemoryOperation is being specified. The limitation for GSP heap was only checked if op=(u32)0x10003. By setting a random bit in op that has no meaning (like bit17?), op would instead be (u32)0x30003, and the range-check would be less strict and not accurate. However, the kernel doesn&#039;t actually use the input address for LINEAR memory-mapping at all besides the range-checks, so this isn&#039;t actually useful. This was fixed in the kernel by just checking for the LINEAR bit, instead of comparing the entire MemoryOperation value with 0x10003.&lt;br /&gt;
&lt;br /&gt;
* Integer overflows on (addr0+size) are now checked that previously weren&#039;t (this also applies to most other address checks elsewhere in the kernel).&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| plutoo&lt;br /&gt;
|-&lt;br /&gt;
| [[RPC_Command_Structure|Command]] request/response buffer overflow&lt;br /&gt;
| Originally the kernel did not check the word-values from the command-header. Starting with [[5.0.0-11]], the kernel will trigger a kernelpanic() when the total word-size of the entire command(including the cmd-header) is larger than 0x40-words (0x100-bytes). This allows overwriting threadlocalstorage+0x180 in the destination thread. However, since the data written there would be translate parameters (such as header-words + buffer addresses), exploiting this would likely be very difficult, if possible at all.&lt;br /&gt;
&lt;br /&gt;
If the two words at threadlocalstorage+0x180 could be overwritten with controlled data this way, one could then use a command with a buffer-header of &amp;lt;nowiki&amp;gt;((size&amp;lt;&amp;lt;14) | 2)&amp;lt;/nowiki&amp;gt; to write arbitrary memory to any RW userland memory in the destination process.&lt;br /&gt;
| &lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| v4.1 FIRM -&amp;gt; v5.0 code diff&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|SVC stack allocation overflows]]&lt;br /&gt;
| &lt;br /&gt;
* Syscalls that allocate a variable-length array on stack, only checked bit31 before multiplying by 4/16 (when calculating how much memory to allocate). If a large integer was passed as input to one of these syscalls, an integer overflow would occur, and too little memory would have been allocated on stack resulting in a buffer overrun. &lt;br /&gt;
* The alignment (size+7)&amp;amp;~7 calculation before allocation was not checked for integer overflow.&lt;br /&gt;
&lt;br /&gt;
This might allow for ARM11 kernel code-execution.&lt;br /&gt;
&lt;br /&gt;
(Applies to svcSetResourceLimitValues, svcGetThreadList, svcGetProcessList, svcReplyAndReceive, svcWaitSynchronizationN.)&lt;br /&gt;
| &lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| &lt;br /&gt;
| v4.1 FIRM -&amp;gt; v5.0 code diff&lt;br /&gt;
| plutoo, [[User:Yellows8|Yellows8]] complementary&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|svcControlMemory]] MemoryOperation MAP memory-permissions&lt;br /&gt;
| svcControlMemory with MemoryOperation=MAP allows mapping the already-mapped process virtual-mem at addr1, to addr0. The lowest address permitted for addr1 is 0x00100000. Originally the ARM11 kernel didn&#039;t check memory permissions for addr1. Therefore .text as addr1 could be mapped elsewhere as RW- memory, which allowed ARM11 userland code-execution.&lt;br /&gt;
| &lt;br /&gt;
| [[4.1.0-8]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[RPC_Command_Structure|Command]] input/output buffer permissions&lt;br /&gt;
| Originally the ARM11 kernel didn&#039;t check memory permissions for the input/output buffers for commands. Starting with [[4.0.0-7]] the ARM11 kernel will trigger a kernelpanic() if the input/output buffers don&#039;t have the required memory permissions. For example, this allowed a FSUSER file-read to .text, which therefore allowed ARM11-userland code execution.&lt;br /&gt;
| &lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|svcReadProcessMemory/svcWriteProcessMemory memory]] permissions&lt;br /&gt;
| Originally the kernel only checked the first page(0x1000-bytes) of the src/dst buffers, for svcReadProcessMemory and svcWriteProcessMemory. There is no known retail processes which have access to these SVCs.&lt;br /&gt;
| &lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| &lt;br /&gt;
| 2012?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== [[FIRM]] Sysmodules ===&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;
!  Fixed in [[FIRM]] system version&lt;br /&gt;
!  Last [[FIRM]] system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[Services|&amp;quot;srv:pm&amp;quot;]] process registration&lt;br /&gt;
| Originally any process had access to the port &amp;quot;srv:pm&amp;quot;. The PID&#039;s used for the (un)registration commands are not checked either. This allowed any process to re-register itself with &amp;quot;srv:pm&amp;quot;, and therefore allowed the process to give itself access to any service, bypassing the exheader service-access-control list.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[7.0.0-13]]: starting with [[7.0.0-13]] &amp;quot;srv:pm&amp;quot; is now a service instead of a globally accessible port. Only processes with PID&#039;s less than 6 (in other words: fs, ldr, sm, pm, pxi modules) have access to it. With [[7.0.0-13]] there can only be one session for &amp;quot;srv:pm&amp;quot; open at a time(this is used by pm module), svcBreak will be executed if more sessions are opened by the processes which can access this.&lt;br /&gt;
&lt;br /&gt;
This flaw was needed for exploiting the &amp;lt;=v4.x Process9 PXI vulnerabilities from ARM11 userland ROP, since most applications don&#039;t have access to those service(s).&lt;br /&gt;
| Access to arbitrary services&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| &lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| FSDIR null-deref&lt;br /&gt;
| [[Filesystem_services|FS]]-module may crash in some cases when handling directory reading. The trigger seems to be due to using [[FSDir:Close]] without closing the dir-handle afterwards?(Perhaps this is caused by out-of-memory?) This seems to be useless since it&#039;s just a null-deref.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| May 19(?)-20, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Standalone Sysmodules ===&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;
!  Fixed in system-module system-version&lt;br /&gt;
!  Last system-module system-version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[SPI_Services|SPI]] service out-of-bounds write&lt;br /&gt;
| cmd1 has out-of-bounds write allowing overwrite of some static variables in .data.&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| [[9.5.0-22]]&lt;br /&gt;
| March 2015&lt;br /&gt;
| plutoo&lt;br /&gt;
|-&lt;br /&gt;
| [[NFC_Services|NFC]] module service command buf-overflows&lt;br /&gt;
| NFC module copies data with certain commands, from command input buffers to stack without checking the size. These commands include the following, it&#039;s unknown if there&#039;s more commands with similar issues: &amp;quot;nfc:dev&amp;quot; &amp;lt;0x000C....&amp;gt; and &amp;quot;nfc:s&amp;quot; &amp;lt;0x0037....&amp;gt;.&lt;br /&gt;
Since both of these commands are stubbed in the Old3DS NFC module from the very first version(those just return an error), these issues only affect the New3DS NFC module.&lt;br /&gt;
&lt;br /&gt;
There&#039;s no known retail titles which have access to either of these services.&lt;br /&gt;
| ROP under NFC module.&lt;br /&gt;
| New3DS: None&lt;br /&gt;
| New3DS: [[9.5.0-22]]&lt;br /&gt;
| December 2014?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[News_Services|NEWSS]] service command notificationID validation failure&lt;br /&gt;
| This module does not validate the input notificationID for &amp;lt;nowiki&amp;gt;&amp;quot;news:s&amp;quot;&amp;lt;/nowiki&amp;gt; service commands. This is an out-of-bounds array index bug. For example, [[NEWSS:SetNotificationHeader]] could be used to exploit news module: this copies the input data(size is properly checked) to: out = newsdb_savedata+0x10 + (someu32array[notificationID]*0x70).&lt;br /&gt;
| ROP under news module.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.7.0-25|9.7.0-X]]&lt;br /&gt;
| December 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_Services|HID]] module shared-mem&lt;br /&gt;
| HID module does not validate the index values in [[HID_Shared_Memory|sharedmem]](just changes index to 0 when index == maxval when updating), therefore large values will result in HID module writing HID data to arbitrary addresses.&lt;br /&gt;
| ROP under HID module, but this is *very* unlikely to be exploitable since the data written is HID data.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.3.0-21]]&lt;br /&gt;
| 2014?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| gspwn&lt;br /&gt;
| GSP module does not validate addresses given to the GPU. This allows a user-mode application/applet to read/write to a large part of physical FCRAM using GPU DMA. From this, you can overwrite the .text segment of the application you&#039;re running under, and gain real code-execution from a ROP-chain. Normally applets&#039; .text([[Home Menu]], [[Internet Browser]], etc) is located beyond the area accessible by the GPU, except for [[RO_Services|CROs]] used by applets([[Internet Browser]] for example).&lt;br /&gt;
&lt;br /&gt;
FCRAM is gpu-accessible up to physaddr 0x26400000 on Old3DS, and 0x2DC00000 on New3DS.&lt;br /&gt;
| User-mode code execution.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Early 2014&lt;br /&gt;
| smea, [[User:Yellows8|Yellows8]]/others before then&lt;br /&gt;
|-&lt;br /&gt;
| rohax&lt;br /&gt;
| Using gspwn, it is possible to overwrite a loaded [[CRO0]]/[[CRR0]] after its RSA-signature has been validated. Badly validated [[CRO0]] header leads to arbitrary read/write of memory in the ro-process. This gives code-execution in the ro module, who has access to [[SVC|syscalls]] 0x70-0x72, 0x7D.&lt;br /&gt;
&lt;br /&gt;
This was fixed after [[ninjhax]] release by adding checks on [[CRO0]]-based pointers before writing to them.&lt;br /&gt;
| Memory-mapping syscalls.&lt;br /&gt;
| [[9.3.0-21]]&lt;br /&gt;
| [[9.4.0-21]]&lt;br /&gt;
| &lt;br /&gt;
| smea, plutoo joint effort&lt;br /&gt;
|-&lt;br /&gt;
| Region free&lt;br /&gt;
| Only [[Home Menu]] itself checks gamecards&#039; region when launching them. Therefore, any application launch that is done directly with [[NS]] without signaling Home Menu to launch the app, will result in region checks being bypassed.&lt;br /&gt;
This essentially means launching the gamecard with the [[NS_and_APT_Services|&amp;quot;ns:s&amp;quot;]] service. The main way to exploit this is to trigger a FIRM launch with an application specified, either with a normal FIRM launch or a hardware [[NSS:RebootSystem|reboot]].&lt;br /&gt;
| Launching gamecards from any region + bypassing Home Menu gamecard-sysupdate installation&lt;br /&gt;
| None&lt;br /&gt;
| [[9.8.0-25|9.8.0-X]]&lt;br /&gt;
| June(?) 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[NWM_Services|NWM]] service-cmd state null-ptr deref&lt;br /&gt;
| The NWMUDS service command code loads a ptr from .data, adds an offset to that, then passes that as the state address for the actual command-handler function. The value of the ptr loaded from .data is not checked, therefore this will cause crashes due to that being 0x0 when NWMUDS was not properly initialized.&lt;br /&gt;
It&#039;s unknown whether any NWM services besides NWMUDS have this issue.&lt;br /&gt;
| This is rather useless since it&#039;s only a crash caused by a state ptr based at 0x0.&lt;br /&gt;
| None&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| 2013?&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General/CTRSDK ===&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;
!  Fixed in version&lt;br /&gt;
!  Last version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[NWM_Services|UDS]] beacon additional-data buffer overflow&lt;br /&gt;
| Originally CTRSDK did not validate the UDS additional-data size before using that size to copy the additional-data to a [[NWM_Services|networkstruct]]. This was eventually fixed.&lt;br /&gt;
This was discovered while doing code RE with an old dlp-module version. It&#039;s unknown in what specific CTRSDK version this was fixed, or even what system-version updated titles with a fixed version.&lt;br /&gt;
&lt;br /&gt;
It&#039;s unknown if there&#039;s any titles using a vulnerable CTRSDK version which are also exploitable with this(dlp module can&#039;t be exploited with this).&lt;br /&gt;
&lt;br /&gt;
The maximum number of bytes that can be written beyond the end of the outbuf is 0x37-bytes, with additionaldata_size=0xFF.&lt;br /&gt;
| Perhaps ROP, very difficult if possible with anything at all&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
| September(?) 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=FirmwareNews&amp;diff=12962</id>
		<title>FirmwareNews</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=FirmwareNews&amp;diff=12962"/>
		<updated>2015-07-26T05:12:30Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Restore from Google cache.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;4.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.2.0-X&#039;&#039;&#039; are safe for [[ninjhax]], if &#039;&#039;&#039;X&#039;&#039;&#039; is between 7 and 20.&lt;br /&gt;
ARM11 userland homebrew is possible with [[ninjhax]] 2 from system versions &#039;&#039;&#039;9.0.0-X&#039;&#039;&#039; up to and including &#039;&#039;&#039;9.9.0-X&#039;&#039;&#039;, for &#039;&#039;&#039;X&#039;&#039;&#039; up to and including &#039;&#039;&#039;26&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Full system control exploits are only known for system versions up to and including &#039;&#039;&#039;9.2.0&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Ninjhax&amp;diff=12961</id>
		<title>Ninjhax</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Ninjhax&amp;diff=12961"/>
		<updated>2015-07-26T05:08:13Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: /* Installation */ success&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ninjhax is an exploit by smea for the game Cubic Ninja. It was released on November 20th, 2014. It can be used on all 3DS firmware versions from 4.0 up to and including 9.2.0-20. It was partially patched in [[9.3.0-21|9.3.0-X]] (only system flaws used by ninjhax were fixed, the game haxx itself was not affected).&lt;br /&gt;
&lt;br /&gt;
ninjhax 2 was released on 18 July 2015, and works on any system version from 9.0.0-X up to 9.9.0-26.&lt;br /&gt;
&lt;br /&gt;
When triggered, it will boot a [[3DSX_Format | 3dsx-file]] from the sdcard root called &amp;quot;boot.3dsx&amp;quot;. This file is usually the [[Homebrew Launcher]], which in turn can be used to launch other games/apps from the (micro)SD card. The launched application will run with user privileges on the ARM11 CPU. On system versions up to 9.2.0-20, one of the publicly known [[3DS System Flaws]] can be chained to gain ARM11 kernel privileges or to take control over the ARM9 CPU. More recent system versions are limited to ARM11 userland homebrew until new exploits are disclosed.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Visit [http://smealum.net/ninjhax/ here] for instructions on how to install Ninjhax, and [http://smealum.github.io/ninjhax2/ here] for instructions on how to install Ninjhax 2!&lt;br /&gt;
&lt;br /&gt;
==Service access==&lt;br /&gt;
&lt;br /&gt;
ninjhax gives developers access to a number of services. These include :&lt;br /&gt;
&lt;br /&gt;
* ac:u&lt;br /&gt;
* APT:U&lt;br /&gt;
* boss:U&lt;br /&gt;
* cam:u&lt;br /&gt;
* cecd:u&lt;br /&gt;
* cfg:u&lt;br /&gt;
* dlp:FKCL&lt;br /&gt;
* dlp:SRVR&lt;br /&gt;
* dsp::DSP&lt;br /&gt;
* frd:u&lt;br /&gt;
* fs:USER&lt;br /&gt;
* gsp::Gpu&lt;br /&gt;
* hid:USER&lt;br /&gt;
* http:C&lt;br /&gt;
* ir:u&lt;br /&gt;
* mic:u&lt;br /&gt;
* ndm:u&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;news:u&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* nwm::UDS&lt;br /&gt;
* ptm:u&lt;br /&gt;
* pxi:dev&lt;br /&gt;
* soc:U&lt;br /&gt;
* ssl:C&lt;br /&gt;
* y2r:u&lt;br /&gt;
&lt;br /&gt;
Additionally, Old 3DS models (3DS, 3DS XL and 2DS) are given access to the following :&lt;br /&gt;
&lt;br /&gt;
* csnd:SND&lt;br /&gt;
&lt;br /&gt;
In contrast, New 3DS models (New 3DS, New 3DS XL) get access to :&lt;br /&gt;
&lt;br /&gt;
* am:app&lt;br /&gt;
* ir:rst&lt;br /&gt;
* l2b2:u&lt;br /&gt;
* l2b:u&lt;br /&gt;
* mvd:STD&lt;br /&gt;
* nim:aoc&lt;br /&gt;
* y2r2:u&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The normal service used for accessing [[Circle Pad Pro]] is not accessible: [[IR_Services|ir:USER]].&lt;br /&gt;
&lt;br /&gt;
==System Call Access==&lt;br /&gt;
&lt;br /&gt;
The following [[SVC|system calls]] are usable by homebrew running using ninjhax:&lt;br /&gt;
&lt;br /&gt;
 Allowed systemcalls:    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08&lt;br /&gt;
                         0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10&lt;br /&gt;
                         0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19&lt;br /&gt;
                         0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21&lt;br /&gt;
                         0x22, 0x23, 0x24, 0x25, 0x27, 0x28, 0x29, 0x2A&lt;br /&gt;
                         0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32&lt;br /&gt;
                         0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C&lt;br /&gt;
                         0x3D&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
At the moment, ninjhax only allows users to access 64MB of RAM, including on the New 3DS. This may change in the future.&lt;br /&gt;
&lt;br /&gt;
While sound works on the New 3DS for homebrew running via ninjhax 2.0, at the time of the exploit&#039;s original release, there was no good way to use the DSP from homebrew, so sound output is not possible on the New 3DS using the old version. At the moment, there is also no known way of running code on the New 3DS&#039;s extra CPU cores under ninjhax, though it is possible to use 80% of the system core&#039;s time using [[APT:SetApplicationCpuTimeLimit]] rather than 30% as was the case on the Old 3DS.&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
* All SD and NAND [[extdata]] is accessible via the main extdata [[FS:OpenArchive|archive]](R/W). Note that the [[FS:OpenArchive|ExtSaveData-for-BOSS]] archive is not accessible.&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Ninjhax&amp;diff=12960</id>
		<title>Ninjhax</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Ninjhax&amp;diff=12960"/>
		<updated>2015-07-26T05:07:32Z</updated>

		<summary type="html">&lt;p&gt;Vague Rant: Restore from Google cache.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ninjhax is an exploit by smea for the game Cubic Ninja. It was released on November 20th, 2014. It can be used on all 3DS firmware versions from 4.0 up to and including 9.2.0-20. It was partially patched in [[9.3.0-21|9.3.0-X]] (only system flaws used by ninjhax were fixed, the game haxx itself was not affected).&lt;br /&gt;
&lt;br /&gt;
ninjhax 2 was released on 18 July 2015, and works on any system version from 9.0.0-X up to 9.9.0-26.&lt;br /&gt;
&lt;br /&gt;
When triggered, it will boot a [[3DSX_Format | 3dsx-file]] from the sdcard root called &amp;quot;boot.3dsx&amp;quot;. This file is usually the [[Homebrew Launcher]], which in turn can be used to launch other games/apps from the (micro)SD card. The launched application will run with user privileges on the ARM11 CPU. On system versions up to 9.2.0-20, one of the publicly known [[3DS System Flaws]] can be chained to gain ARM11 kernel privileges or to take control over the ARM9 CPU. More recent system versions are limited to ARM11 userland homebrew until new exploits are disclosed.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Visit [http://smealum.net/ninjhax/ here] for instructions on how to install Ninjhax, and [http://smealum.github.io/ninjhax2/ here] &amp;lt;!-- somebody insert link plox --&amp;gt; for instructions on how to install Ninjhax 2!&lt;br /&gt;
&lt;br /&gt;
==Service access==&lt;br /&gt;
&lt;br /&gt;
ninjhax gives developers access to a number of services. These include :&lt;br /&gt;
&lt;br /&gt;
* ac:u&lt;br /&gt;
* APT:U&lt;br /&gt;
* boss:U&lt;br /&gt;
* cam:u&lt;br /&gt;
* cecd:u&lt;br /&gt;
* cfg:u&lt;br /&gt;
* dlp:FKCL&lt;br /&gt;
* dlp:SRVR&lt;br /&gt;
* dsp::DSP&lt;br /&gt;
* frd:u&lt;br /&gt;
* fs:USER&lt;br /&gt;
* gsp::Gpu&lt;br /&gt;
* hid:USER&lt;br /&gt;
* http:C&lt;br /&gt;
* ir:u&lt;br /&gt;
* mic:u&lt;br /&gt;
* ndm:u&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;news:u&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* nwm::UDS&lt;br /&gt;
* ptm:u&lt;br /&gt;
* pxi:dev&lt;br /&gt;
* soc:U&lt;br /&gt;
* ssl:C&lt;br /&gt;
* y2r:u&lt;br /&gt;
&lt;br /&gt;
Additionally, Old 3DS models (3DS, 3DS XL and 2DS) are given access to the following :&lt;br /&gt;
&lt;br /&gt;
* csnd:SND&lt;br /&gt;
&lt;br /&gt;
In contrast, New 3DS models (New 3DS, New 3DS XL) get access to :&lt;br /&gt;
&lt;br /&gt;
* am:app&lt;br /&gt;
* ir:rst&lt;br /&gt;
* l2b2:u&lt;br /&gt;
* l2b:u&lt;br /&gt;
* mvd:STD&lt;br /&gt;
* nim:aoc&lt;br /&gt;
* y2r2:u&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The normal service used for accessing [[Circle Pad Pro]] is not accessible: [[IR_Services|ir:USER]].&lt;br /&gt;
&lt;br /&gt;
==System Call Access==&lt;br /&gt;
&lt;br /&gt;
The following [[SVC|system calls]] are usable by homebrew running using ninjhax:&lt;br /&gt;
&lt;br /&gt;
 Allowed systemcalls:    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08&lt;br /&gt;
                         0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10&lt;br /&gt;
                         0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19&lt;br /&gt;
                         0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21&lt;br /&gt;
                         0x22, 0x23, 0x24, 0x25, 0x27, 0x28, 0x29, 0x2A&lt;br /&gt;
                         0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32&lt;br /&gt;
                         0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C&lt;br /&gt;
                         0x3D&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
At the moment, ninjhax only allows users to access 64MB of RAM, including on the New 3DS. This may change in the future.&lt;br /&gt;
&lt;br /&gt;
While sound works on the New 3DS for homebrew running via ninjhax 2.0, at the time of the exploit&#039;s original release, there was no good way to use the DSP from homebrew, so sound output is not possible on the New 3DS using the old version. At the moment, there is also no known way of running code on the New 3DS&#039;s extra CPU cores under ninjhax, though it is possible to use 80% of the system core&#039;s time using [[APT:SetApplicationCpuTimeLimit]] rather than 30% as was the case on the Old 3DS.&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
* All SD and NAND [[extdata]] is accessible via the main extdata [[FS:OpenArchive|archive]](R/W). Note that the [[FS:OpenArchive|ExtSaveData-for-BOSS]] archive is not accessible.&lt;/div&gt;</summary>
		<author><name>Vague Rant</name></author>
	</entry>
</feed>