<?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=TheProgramerEX</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=TheProgramerEX"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/TheProgramerEX"/>
	<updated>2026-04-16T03:04:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=3DS_Userland_Flaws&amp;diff=19091</id>
		<title>3DS Userland Flaws</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=3DS_Userland_Flaws&amp;diff=19091"/>
		<updated>2016-12-30T23:08:17Z</updated>

		<summary type="html">&lt;p&gt;TheProgramerEX: /* System applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists vulnerabilities / exploits for 3DS applications and applets. Exploiting these initially results in ROP, from that ROP one can then for example try exploiting [[3DS_System_Flaws|system]] flaw(s).&lt;br /&gt;
&lt;br /&gt;
=Non-system applications=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Application name&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Fixed in app/system version&lt;br /&gt;
!  Last app/system version this flaw was checked for&lt;br /&gt;
!  Timeframe info related to this was added to wiki&lt;br /&gt;
!  Timeframe this vuln was discovered&lt;br /&gt;
!  Vuln discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Cubic Ninja&lt;br /&gt;
| Map-data stack smash&lt;br /&gt;
| See [[Ninjhax|here]] regarding Ninjhax.&lt;br /&gt;
| None&lt;br /&gt;
| App: Initial version. System: [[10.4.0-29]].&lt;br /&gt;
| Ninjhax release&lt;br /&gt;
| July 2014&lt;br /&gt;
| [[User:smea|smea]]&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Ocarina of Time 3D&lt;br /&gt;
| UTF-16 name string buffer overflow via unchecked u8 length field&lt;br /&gt;
| The u8 at offset 0x2C in the savefile is the character-length of the UTF-16 string at offset 0x1C. When copying this string, it&#039;s essentially a memory-copy with lenval*2, not a string-copy. This can be used to trigger buffer overflows at various locations depending on the string length.&lt;br /&gt;
* When value is &amp;gt;=0x6E it crashes when saving the saveslot, this causes a stack-smash however it normally crashes before it returns from the function which had the stack-frame overwritten.&lt;br /&gt;
* With value &amp;gt;=0x9A, it crashes via stack-smash in-game once any dialogs are opened(touching buttons on the touch-screen can trigger it too).&lt;br /&gt;
* Length value&amp;gt;=0xCD causes a crash while loading the saveslot, via a heap buffer overflow. This buf-overflow overwrites a heap memchunk following the allocated buffer. When the first 16-bits overwriting that heap memchunk is not the memchunk magic-number(0x7373), the mem-alloc code will just return a NULL ptr which later results in a crash. When the magic-number is valid, the mem-alloc code will continue to attempt to parse the memchunk, which may crash depending on the data which overwrote the memchunk. This heap code is separate from the CTRSDK heap code. Exploiting this doesn&#039;t seem to be possible: since the heap code actually verifies that the magic-number for the next/prev memchunk ptrs are correct(unlike CTRSDK), it&#039;s not possible to change those ptrs to useful arbitrary addresses outside of savedata(like with triggering a write to a c++ object ptr which later is used with a vtable func-call, this is what one would do with CTRSDK heap here).&lt;br /&gt;
&lt;br /&gt;
On March 11, 2015, an exploit using this vuln was released, that one was intended for warez/etc. The following exploit wasn&#039;t released before then mainly because doing so would (presumably) result in the vuln being fixed. The following old exploit was released on March 14, 2015: [https://github.com/yellows8/oot3dhax].&lt;br /&gt;
| None&lt;br /&gt;
| App: Initial version. System: [[10.6.0-31]].&lt;br /&gt;
| March 11, 2015&lt;br /&gt;
| Around October 22, 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros 3DS&lt;br /&gt;
| Buffer overflow in local-multiplayer beacon handling.&lt;br /&gt;
| See [[smashbroshax|here]].&lt;br /&gt;
| App: v1.1.3&lt;br /&gt;
| See [[smashbroshax|here]]. System: [[10.3.0-28]].&lt;br /&gt;
| Time of exploit release.&lt;br /&gt;
| See [[smashbroshax|here]].&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon Super Mystery Dungeon&lt;br /&gt;
| Heap overflow within linear memory via unchecked save file length&lt;br /&gt;
| Pokemon Super Mystery Dungeon uses zlib compression for most of its save files, possibly due to the save files being larger than it&#039;s predecessor, Gates to Infinity. When a save file is being prepared to be loaded and read from, only a 0x32000 large buffer is allocated for file reading, and a 0x3e800-large buffer for decompression is also allocated before the file is read. However, the game does not limit the size of the file read to this allocation bound, allowing for the file to overflow into the linear memory heap and into the next allocation. Since Pokemon Super Mystery Dungeon stores allocation memchunks directly before the allocation, overwriting the next memchunk with a corrupted one allows for arbitrary writes of linear heap pointers when the next buffer is allocated or arbitrary writes of any pointer within writable memory when the corrupted buffer is freed.&lt;br /&gt;
| None&lt;br /&gt;
| [[10.7.0-32]].&lt;br /&gt;
| Time of exploit release.&lt;br /&gt;
| April 14, 2016&lt;br /&gt;
| [[User:Shinyquagsire23|Shiny Quagsire]]&lt;br /&gt;
|-&lt;br /&gt;
| VVVVVV&lt;br /&gt;
| Buffer overflow in XML save file array parsing&lt;br /&gt;
| VVVVVV utilizes several XML files (renamed with a .vvv extension) to store level save data, stats and settings. Within these XML files are several tags containing an array of data which, when parsed, is not properly checked to be of proper length for the tag being parsed from. This allows for an overflow of 16-bit array values from the location where the array is parsed. With unlock.vvv, XML data is parsed to the stack, and with level saves the heap. This allows for the pointer where the level save worldmap tag array should be parsed into to be overwritten with a stack address, allowing for ROP from within the XML array parsing function on the next level load.&lt;br /&gt;
| None&lt;br /&gt;
| [[10.7.0-32]].&lt;br /&gt;
| Time of exploit release.&lt;br /&gt;
| April 25, 2016&lt;br /&gt;
| [[User:Shinyquagsire23|Shiny Quagsire]]&lt;br /&gt;
|-&lt;br /&gt;
| Citizens of Earth&lt;br /&gt;
| Save file read stack smash&lt;br /&gt;
| Citizens of Earth also uses &amp;quot;XML&amp;quot; files for saves, which are actually entirely binary data (not XML at all) with no checksums. These files are read from the filesystem on to a fixed size stack buffer which leads to an incredibly trivial stack smash. When using the autosave slot for this, the save is parsed when the user selects &amp;quot;continue&amp;quot;. When using one of the dedicated save slots (1-3), the save is parsed shortly after the company splash screens fade. Note that the save is read quite high (descending) on the stack - when exploiting this, one would likely need to move SP due to almost instantly overflowing the physical stack.&lt;br /&gt;
| None&lt;br /&gt;
| [[10.7.0-32]].&lt;br /&gt;
| Time of exploit release.&lt;br /&gt;
| May 5, 2016&lt;br /&gt;
| [[User:Dazzozo|Dazzozo]]&lt;br /&gt;
|-&lt;br /&gt;
| SmileBASIC 3.x&lt;br /&gt;
| Poor parameter validation on &amp;quot;BGSCREEN&amp;quot; command&lt;br /&gt;
| The SmileBASIC &amp;quot;BGSCREEN&amp;quot; command&#039;s second parameter is not properly validated as being within range.  As a result, one can set the screen size to an absurdly large value.  This means that the &amp;quot;BGGET&amp;quot; and &amp;quot;BGPUT&amp;quot; commands can then be used on out-of-range values to read and write a significant chunk of the interpreter&#039;s address space.&lt;br /&gt;
With a series of carefully-designed BGPUT commands, one can build a ROP chain and cause it to be executed.&lt;br /&gt;
| App: 3.3.2.&lt;br /&gt;
| System: [[11.0.0-33]].&lt;br /&gt;
| July 20, 2016&lt;br /&gt;
| Around June 26, 2016&lt;br /&gt;
| slackerSnail, 12Me12, incvoid&lt;br /&gt;
Exploited by MrNbaYoh and [[User:Plutooo|plutoo]].&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Tri Force Heroes&lt;br /&gt;
| [[3DS_System_Flaws#General.2FCTRSDK|CTRSDK]] CTPK buffer overflow combined with game&#039;s usage of SpotPass&lt;br /&gt;
| This isn&#039;t really useful due to [[BOSS_Services#Custom_SpotPass_content|this]].&lt;br /&gt;
&lt;br /&gt;
During the very first screen displayed by the game during boot(&amp;quot;Loading...&amp;quot;), just seconds after title launch, the game loads CTPK from the [[BOSS_Services|stored]] SpotPass content. Hence, this game could be exploited via the vulnerable CTRSDK CTPK code &#039;&#039;if&#039;&#039; one could get custom SpotPass data into extdata somehow.&lt;br /&gt;
&lt;br /&gt;
The code for this runs from a thread separate from the main-thread, with the stack in linearmem heap.&lt;br /&gt;
&lt;br /&gt;
The two SpotPass URLs for this have always(?) returned HTTP 404 as of November 2016. It appears these were intended for use as textures for additional costumes(and never got used publicly), but this wasn&#039;t tested.&lt;br /&gt;
| None&lt;br /&gt;
| App: v2.1.0&lt;br /&gt;
| November 18, 2016&lt;br /&gt;
| November 14, 2016&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Pixel Paint&lt;br /&gt;
| Buffer overflow via unchecked extdata file length&lt;br /&gt;
| Pixel Paint loads pictures saved by the user from extdatas. The file is read to a fixed size buffer but the file length remains unchecked, so with a large enough file, one can overwrite pointers in memory and gain control of the execution flow.&lt;br /&gt;
| None&lt;br /&gt;
| App: Initial version. System: [[11.2.0-35]].&lt;br /&gt;
| December 27, 2016&lt;br /&gt;
| November 5, 2016&lt;br /&gt;
| [[User:Nba_Yoh|MrNbaYoh]]&lt;br /&gt;
|-&lt;br /&gt;
| Steel Diver : Sub Wars&lt;br /&gt;
| Heap overflow / arbitrary memcpy&lt;br /&gt;
| Savefile datas are stored as key/value pairs, a large enough string key makes the game overwrite a memcpy source/destination addresses and size arguments. So one can actually memcpy a rop on the stack and gain control of the execution flow.&lt;br /&gt;
| None&lt;br /&gt;
| System: [[11.2.0-35]].&lt;br /&gt;
| December 27, 2016&lt;br /&gt;
| Around July 15, 2016&lt;br /&gt;
| [[User:Nba_Yoh|MrNbaYoh]], Vegaroxas&lt;br /&gt;
|-&lt;br /&gt;
| 1001 Spikes&lt;br /&gt;
| Buffer overflow via unchecked array-indexes in XML savefile parsing&lt;br /&gt;
| The savefiles are stored as renamed .xml files, which contain several tags with attributes like &#039;array-index=&amp;quot;array-value&amp;quot;&#039;, where both of these are converted from ASCII strings to integers as signed-int32, and the array-value given blindly written to an array inside a structure using the (unchecked) index given. With several of these attributes, one can overwrite the stack starting from the stored lr of the function that does this parsing, and write a ROP chain there. Testing used the &amp;quot;LevelAttempts&amp;quot; tag which is the last such tag parsed in that function.&lt;br /&gt;
| None&lt;br /&gt;
| App: v1.2.0 (TMD v2096)&lt;br /&gt;
| December 27, 2016&lt;br /&gt;
| Around November 2, 2016&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon Omega Ruby/Alpha Sapphire&lt;br /&gt;
| Secret base team name heap overflow&lt;br /&gt;
| When the player wants to edit the team name, it is copied over the heap, however it&#039;s length is not verified. So with a large enough team name one can overwrite some pointers and get two arbitrary jumps and then get control of the execution flow.&lt;br /&gt;
| None&lt;br /&gt;
| App: 1.4. System: [[11.2.0-35]].&lt;br /&gt;
| December 30, 2016&lt;br /&gt;
| June, 2016&lt;br /&gt;
| [[User:Nba_Yoh|MrNbaYoh]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Useless crashes / applications which were fuzzed==&lt;br /&gt;
* Pushmo (3DSWare), QR codes: level name is properly limited to 16 characters, game doesn&#039;t crash with a longer name. The only possible crashes are triggered by out-of-bounds array index values, these crashes are not exploitable due to the index value being 8bit.&lt;br /&gt;
&lt;br /&gt;
* [[Pyramids (3DSWare)]], QR codes: no strings. Only crashes are from out-of-bounds values (like background ID) and are not exploitable.&lt;br /&gt;
&lt;br /&gt;
* [[Pyramids 2 (3DSWare)]], QR codes: no strings. Only crashes are from out-of-bounds values (like background ID) and are not exploitable.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/yellows8/mm3d_re The Legend of Zelda: Majora&#039;s Mask 3D]&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;The Legend of Zelda: A Link Between Worlds&amp;quot; and &amp;quot;The Legend of Zelda: Tri Force Heroes&amp;quot;: these games don&#039;t crash at all when the entire save-file(minus constant header data) is overwritten with /dev/random output / 0xFF-bytes. All of the CRC32s were updated for this of course.&lt;br /&gt;
&lt;br /&gt;
* Pokemon Mystery Dungeon: Gates to Infinity has the same unchecked file bounds as Pokemon Super Mystery Dungeon, however since save compression was introduced in Pokemon Super Mystery Dungeon, it only allocates one buffer within the application heap instead of several within the linear heap, resulting in nothing to corrupt or overwrite even if the file&#039;s length is extended past it&#039;s allocation.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Kid Icarus: Uprising&amp;quot;: Overwriting the entire savedata results in various crashes, nothing useful.&lt;br /&gt;
&lt;br /&gt;
* Savedata/extdata for &amp;quot;Super Smash Bros 3DS&amp;quot;: Overwriting the various files stored under savedata/extdata results in useless crashes.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;StarFox 64 3D&amp;quot;: Doesn&#039;t crash at all with the entire savedata overwritten.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Frogger 3D&amp;quot;: Overwriting a savefile with random-data results in *nothing* crashing.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Mutant Mudds&amp;quot;: Overwriting the savefile with random data results in a crash&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Animal Crossing: New Leaf&amp;quot;: Creating a QR code from random data results in a valid QR code and a random design. In some very rare cases(which aren&#039;t always reproducible?) a crash/etc may occur, but this isn&#039;t known to be useful.&lt;br /&gt;
&lt;br /&gt;
==Crashes needing investigation==&lt;br /&gt;
* Disney Infinity crashes when all savedata overwritten with /dev/urandom. No checksums. 0xFF bytes don&#039;t cause a crash.&lt;br /&gt;
&lt;br /&gt;
* Football Up Online / Soccer Up Online and Football Up 3D / Soccer Up 3D crash when teamname(UTF-16) length = 0x48 AND 0x20 null bytes are removed after just the name or if teamname length is way longer than 0x48.&lt;br /&gt;
&lt;br /&gt;
=System applications=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  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;
| 3DS [[System Settings]] DS profile string stack-smash&lt;br /&gt;
| Too long or corrupted strings (01Ah  2   Nickname length in characters     050h  2   Message length in characters) in the NVRAM DS user settings (System Settings-&amp;gt;Other Settings-&amp;gt;Profile-&amp;gt;Nintendo DS Profile) cause it to crash in 3DS-mode due to a stack-smash. The DSi is not vulnerable to this, DSi launcher(menu) and DSi System Settings will reset the NVRAM user-settings if the length field values are too long(same result as when the CRCs are invalid). TWL_FIRM also resets the NVRAM user-settings when the string-length(s) are too long.&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Ichfly|Ichfly]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Nintendo 3DS Sound]]&lt;br /&gt;
| &amp;quot;A heap overflow in tag processing leads to code execution when a specially- crafted m4a file is loaded by Nintendo 3DS Sound.&amp;quot; (description from soundhax&#039;s github readme)&lt;br /&gt;
| None&lt;br /&gt;
| [[11.2.0-35]]&lt;br /&gt;
| 2016&lt;br /&gt;
| [[User:nedwill|nedwill]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=System applets=&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;
!  Fixed in version&lt;br /&gt;
!  Last version this flaw was checked for&lt;br /&gt;
!  Introduced with version&lt;br /&gt;
!  Timeframe info related to this was added to wiki&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Webkit/web-browser bugs&lt;br /&gt;
| spider has had at least three different code-execution exploits. Majority of them are use-after-free issues. See also [[browserhax|here]].&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2013?&lt;br /&gt;
|&lt;br /&gt;
| A lot of people.&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS/New3DS [[Internet_Browser|Browser-version-check]] bypass&lt;br /&gt;
| When the browser-version-check code runs where the savedata for it was never initialized(such as when the user used the &amp;quot;Initialize savedata&amp;quot; option), it will use base_timestamp=0 instead of the timestamp loaded from savedata. This is then used with &amp;quot;if(cur_timestamp - base_timestamp &amp;gt;= &amp;lt;24h timestamp&amp;gt;){Run browser-version-check HTTPS request code}&amp;quot;.&lt;br /&gt;
Hence, if the savedata was just initialized, and if the system datetime is set to before January 2, 2000, the browser-version-check will be skipped. This includes January 1, 2000, 00:00, because that&#039;s the epoch(timestamp value 0x0) used with this timestamp.&lt;br /&gt;
&lt;br /&gt;
See [http://yls8.mtheall.com/3dsbrowserhax.php here] for bypass usage instructions.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[10.7.0-32|10.7.0-32]], see [[Internet_Browser|here]] for details.&lt;br /&gt;
| [[10.7.0-32|10.7.0-32]]&lt;br /&gt;
| &lt;br /&gt;
| [[9.9.0-26|9.9.0-26]]&lt;br /&gt;
| February 25, 2016&lt;br /&gt;
| November 2, 2015 (Exactly one week after the browser version pages were initially updated server-side)&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Home Menu==&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;
!  Fixed in version&lt;br /&gt;
!  Last version this flaw was checked for&lt;br /&gt;
!  Introduced with version&lt;br /&gt;
!  Timeframe info related to this was added to wiki&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| bossbannerhax&lt;br /&gt;
| This isn&#039;t really useful due to [[BOSS_Services#Custom_SpotPass_content|this]].&lt;br /&gt;
&lt;br /&gt;
After successfully loading [[Extended_Banner|extended-banner]] data(done when selecting an icon), Home Menu attempts to load [[CBMD]] data into a 0x100000-byte heap buffer from the [[BOSS_Services|stored]] SpotPass content. When successful and the magic-number is CBMD, Home Menu then decompresses the CGFX sections into another fixed-size heap buffer, without checking the outsize at all. The main CBMD CGFX code with ExeFS checks the size, but this code doesn&#039;t.&lt;br /&gt;
| None&lt;br /&gt;
| [[11.2.0-35|11.2.0-X]]&lt;br /&gt;
| [[1.0.0-0|1.0.0-0]]&lt;br /&gt;
| November 18, 2016&lt;br /&gt;
| December 23, 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| sdiconhax&lt;br /&gt;
| This is basically the same as nandiconhax, the vulnerable SD/NAND functions are &#039;&#039;identical&#039;&#039; minus the file-buffer offsets. Exploitation is different due to different heap-buffer location though. Unlike nandiconhax, the icon buffer for SD is located in linearmem(with recent Home Menu versions at least). This is used by [[menuhax]].&lt;br /&gt;
| [[11.1.0-34|11.1.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| [[4.0.0-7|4.0.0-X]]&lt;br /&gt;
| July 27, 2016&lt;br /&gt;
| October 23, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[System_SaveData|NAND-savedata]] Launcher.dat icons (nandiconhax)&lt;br /&gt;
| The homemenu code processing the titleid list @ launcherdat+8 copies those titleIDs to another buffer, where the offset relative to that buffer is calculated using the corresponding s8/s16 entries. Those two values are not range checked at all. Hence, one can use this to write u64(s) with arbitrary values to before/after this allocated output buffer. See [[Home_Menu|here]] regarding Launcher.dat structure.&lt;br /&gt;
&lt;br /&gt;
This can be exploited(with Launcher.dat loading at startup at least) by using a s16 for the icon entry with value 0xFFEC(-20)(and perhaps more icons with similar s16 values to write multiple u64s). The result is that the u64 value is written to outbuf-0xA0, which overwrites object+0(vtable) and object+4(doesn&#039;t matter here) for an object that gets used a bit after the vulnerable function triggers. The low 32bits of the u64 can then be set to the address of controlled memory(either outbuf in regular heap or the entire launcherdat buffer in linearmem), for use as a fake vtable in order to get control of PC. From there one can begin ROP via vtable funcptrs to do a stack-pivot(r4=objectaddr at the time the above object gets used).&lt;br /&gt;
&lt;br /&gt;
Originally this vuln could only be triggered via Launcher.dat at Home Menu startup, right after Launcher.dat gets loaded + memory gets allocated, once the file-format version code is finished running. Starting with v9.6 this can be triggered when loading layouts from SD extdata as well. The vuln itself triggers before the layout data is written to Launcher.dat, but it doesn&#039;t seem to be possible to overwrite anything which actually gets used before the function which writes Launcher.dat into the layout gets called.&lt;br /&gt;
&lt;br /&gt;
Home Menu has some sort of fail-safe system(or at least on v9.7) when Home Menu crashes due to Launcher.dat(this also applies for other things with Home Menu): after crashing once, Home Menu resets Launcher.dat to a state where it no longer crashes anymore. However, note that any exploits using this which hang/etc without crashing will still brick the system. &#039;&#039;&#039;Hence, attempting anything with this on physnand without hw-nand-access isn&#039;t really recommended.&#039;&#039;&#039;&lt;br /&gt;
| [[11.1.0-34|11.1.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| [[4.0.0-7|4.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| May 14, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Theme-data decompression buffer overflow ([[menuhax|themehax]])&lt;br /&gt;
| The only func-call size parameter used by the theme decompression function is one for the compressed size, none for the decompressed size. The decompressed-size value from the LZ header is used by this function to check when to stop decompressing, but this function itself has nothing to verify the decompressed_size with. The code calling this function does not check or even use the decompressed size from the header either.&lt;br /&gt;
&lt;br /&gt;
This function is separate from the rest of the Home Menu code: the function used for decompressing themes is *only* used for decompressing themes, nothing else. There&#039;s a separate decompression function in Home Menu used for decompressing everything else.&lt;br /&gt;
&lt;br /&gt;
That other decompression function in Home Menu handles decompression size properly(decompressed size check for max buffer size is done by code calling the other function, not in the function itself). Unlike the other function, the theme function supports multiple LZ algorithms, but the one which actually gets used in official themes is the same one supported by the other function anyway.&lt;br /&gt;
&lt;br /&gt;
See also [[menuhax|here]].&lt;br /&gt;
&lt;br /&gt;
With [[10.2.0-28|10.2.0-X]] Home Menu, the only code change was that the following was added right after theme-load and before actual decompression: &amp;quot;if(&amp;lt;get_lzheader_decompressed_size&amp;gt;(compressed_buf) &amp;gt; 0x150000)&amp;lt;exit&amp;gt;;&amp;quot;. This fixed the vuln.&lt;br /&gt;
| [[10.2.0-28|10.2.0-X]]&lt;br /&gt;
| [[10.2.0-28|10.2.0-X]]&lt;br /&gt;
| &amp;lt;Old3DS/New3DS version which added initial theme support&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| December 22, 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]], [[User:Myria|Myria]] independently (~spring 2015)&lt;br /&gt;
|-&lt;br /&gt;
| Shuffle body-data buffer overflow ([[menuhax|shufflehax]])&lt;br /&gt;
| See [[menuhax|here]].&lt;br /&gt;
| [[10.6.0-31|10.6.0-X]]&lt;br /&gt;
| [[10.6.0-31|10.6.0-X]]&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| January 3, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Extdata file-data loading buffer overflow&lt;br /&gt;
| The extdata file-reading code allocates a fixed-size heap buffer for the expected filesize, then reads the filedata into this buffer using the actual FS filesize. Before v5.0 the filesize used here wasn&#039;t validated, hence if the filesize is larger than alloc_size a buffer overflow would occur. &#039;&#039;After&#039;&#039; doing the file-read it does validate that the actual_readsize matches the alloc_size, but at this point the buffer overflow has already occurred.&lt;br /&gt;
&lt;br /&gt;
This affected at least the following: SaveData.dat and Cache.dat.&lt;br /&gt;
&lt;br /&gt;
This can be triggered with SaveData.dat by installing a &amp;lt;v4.0 Home Menu version, with Home Menu extdata from &amp;gt;=v4.0 still on SD. When this is done with v2.0 Home Menu, a kernelpanic occurs when processing an AM command(it appears a buffer ptr which is then passed to a command was overwritten with 0x0 - of course other SaveData.dat filesizes may result in different behaviour).&lt;br /&gt;
| [[5.0.0-11|5.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| [[2.0.0-2|2.0.0-X]]&lt;br /&gt;
| June 9, 2016&lt;br /&gt;
| June 9, 2016&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The icon data arrays used with {sd/nand}iconhax were added to SaveData.dat/Launcher.dat with [[4.0.0-7|4.0.0-X]], hence the vulnerable functions were added with that same version.&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;=v4.0 the SaveData.dat buffer is located in the regular heap. It&#039;s unknown when exactly it was moved to linearmem, which is where it&#039;s located with recent versions. It&#039;s located in linearmem for KOR &amp;gt;=v9.6 for example.&lt;br /&gt;
&lt;br /&gt;
The SaveData.dat/Launcher.dat icon vulns were fixed by doing various unsigned &amp;gt;=60/&amp;gt;=360 checks on the loaded values. When these checks fail, it just skips over handling this icon entry. Hence, the original value can&#039;t be negative / out-of-bounds any more.&lt;br /&gt;
&lt;br /&gt;
==Useless crashes==&lt;br /&gt;
Old3DS system web-browser:&lt;br /&gt;
* 2^32 characters long string(&#039;&#039;finally&#039;&#039; fixed with v10.6): this is similar to the vulnerability fixed [http://git.chromium.org/gitweb/?p=external/Webkit.git;a=commitdiff;h=ec471f16fbd1f879cb631f9b022fd16acd75f4d4 here], concat-large-strings-crash2.html triggers a crash which is about the same as the one triggered by a 2^32 string. Most of the time this vulnerability will cause a memory page permissions fault, since the WebKit code attempts to copy the string text data to the output buffer located in read-only [[CRO0|CRO]] heap memory. The only difference between a crash triggered by a 2^32 string and the concat-large-strings-crash2.html crash is at the former copies the string data using the original string length(like 1 text character for &amp;quot;x&amp;quot;, 4 for &amp;quot;xxxx&amp;quot;) while the latter attempts to copy &amp;gt;12MB. In some &#039;&#039;very&#039;&#039; rare cases a thread separate from the string data-copy thread will crash, this might be exploitable. However, this is mostly useless since it rarely crashes this way.&lt;br /&gt;
&lt;br /&gt;
* Trying to directly load a page via the browser &amp;quot;URL&amp;quot; option with [https://github.com/yellows8/3ds_browserhax_common webkitdebug] setup, causes a crash to trigger in oss.cro due to an use-after-free being caught with webkitdebug. This is presumably some sort of realloc() issue in the libcurl version used by the &amp;lt;={v10.2-v10.3} browser. This happens with *every* *single* *page* one tries to load via the &amp;quot;URL&amp;quot; option, but not when loading links on the current page, hence this is probably useless. A different use-after-free with realloc triggers with loading any page at all regardless of method too(libcurl probably).&lt;br /&gt;
&lt;br /&gt;
* This WebKit build has &#039;&#039;a lot&#039;&#039; of crash-trigger bugs that only happen with [https://github.com/yellows8/3ds_browserhax_common webkitdebug] completely setup(addr accesses near 0x0), with &#039;&#039;just&#039;&#039; trying to load any page at all.&lt;/div&gt;</summary>
		<author><name>TheProgramerEX</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=3DS_Userland_Flaws&amp;diff=19090</id>
		<title>3DS Userland Flaws</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=3DS_Userland_Flaws&amp;diff=19090"/>
		<updated>2016-12-30T23:02:45Z</updated>

		<summary type="html">&lt;p&gt;TheProgramerEX: /* System applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists vulnerabilities / exploits for 3DS applications and applets. Exploiting these initially results in ROP, from that ROP one can then for example try exploiting [[3DS_System_Flaws|system]] flaw(s).&lt;br /&gt;
&lt;br /&gt;
=Non-system applications=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Application name&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Fixed in app/system version&lt;br /&gt;
!  Last app/system version this flaw was checked for&lt;br /&gt;
!  Timeframe info related to this was added to wiki&lt;br /&gt;
!  Timeframe this vuln was discovered&lt;br /&gt;
!  Vuln discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Cubic Ninja&lt;br /&gt;
| Map-data stack smash&lt;br /&gt;
| See [[Ninjhax|here]] regarding Ninjhax.&lt;br /&gt;
| None&lt;br /&gt;
| App: Initial version. System: [[10.4.0-29]].&lt;br /&gt;
| Ninjhax release&lt;br /&gt;
| July 2014&lt;br /&gt;
| [[User:smea|smea]]&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Ocarina of Time 3D&lt;br /&gt;
| UTF-16 name string buffer overflow via unchecked u8 length field&lt;br /&gt;
| The u8 at offset 0x2C in the savefile is the character-length of the UTF-16 string at offset 0x1C. When copying this string, it&#039;s essentially a memory-copy with lenval*2, not a string-copy. This can be used to trigger buffer overflows at various locations depending on the string length.&lt;br /&gt;
* When value is &amp;gt;=0x6E it crashes when saving the saveslot, this causes a stack-smash however it normally crashes before it returns from the function which had the stack-frame overwritten.&lt;br /&gt;
* With value &amp;gt;=0x9A, it crashes via stack-smash in-game once any dialogs are opened(touching buttons on the touch-screen can trigger it too).&lt;br /&gt;
* Length value&amp;gt;=0xCD causes a crash while loading the saveslot, via a heap buffer overflow. This buf-overflow overwrites a heap memchunk following the allocated buffer. When the first 16-bits overwriting that heap memchunk is not the memchunk magic-number(0x7373), the mem-alloc code will just return a NULL ptr which later results in a crash. When the magic-number is valid, the mem-alloc code will continue to attempt to parse the memchunk, which may crash depending on the data which overwrote the memchunk. This heap code is separate from the CTRSDK heap code. Exploiting this doesn&#039;t seem to be possible: since the heap code actually verifies that the magic-number for the next/prev memchunk ptrs are correct(unlike CTRSDK), it&#039;s not possible to change those ptrs to useful arbitrary addresses outside of savedata(like with triggering a write to a c++ object ptr which later is used with a vtable func-call, this is what one would do with CTRSDK heap here).&lt;br /&gt;
&lt;br /&gt;
On March 11, 2015, an exploit using this vuln was released, that one was intended for warez/etc. The following exploit wasn&#039;t released before then mainly because doing so would (presumably) result in the vuln being fixed. The following old exploit was released on March 14, 2015: [https://github.com/yellows8/oot3dhax].&lt;br /&gt;
| None&lt;br /&gt;
| App: Initial version. System: [[10.6.0-31]].&lt;br /&gt;
| March 11, 2015&lt;br /&gt;
| Around October 22, 2012&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros 3DS&lt;br /&gt;
| Buffer overflow in local-multiplayer beacon handling.&lt;br /&gt;
| See [[smashbroshax|here]].&lt;br /&gt;
| App: v1.1.3&lt;br /&gt;
| See [[smashbroshax|here]]. System: [[10.3.0-28]].&lt;br /&gt;
| Time of exploit release.&lt;br /&gt;
| See [[smashbroshax|here]].&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon Super Mystery Dungeon&lt;br /&gt;
| Heap overflow within linear memory via unchecked save file length&lt;br /&gt;
| Pokemon Super Mystery Dungeon uses zlib compression for most of its save files, possibly due to the save files being larger than it&#039;s predecessor, Gates to Infinity. When a save file is being prepared to be loaded and read from, only a 0x32000 large buffer is allocated for file reading, and a 0x3e800-large buffer for decompression is also allocated before the file is read. However, the game does not limit the size of the file read to this allocation bound, allowing for the file to overflow into the linear memory heap and into the next allocation. Since Pokemon Super Mystery Dungeon stores allocation memchunks directly before the allocation, overwriting the next memchunk with a corrupted one allows for arbitrary writes of linear heap pointers when the next buffer is allocated or arbitrary writes of any pointer within writable memory when the corrupted buffer is freed.&lt;br /&gt;
| None&lt;br /&gt;
| [[10.7.0-32]].&lt;br /&gt;
| Time of exploit release.&lt;br /&gt;
| April 14, 2016&lt;br /&gt;
| [[User:Shinyquagsire23|Shiny Quagsire]]&lt;br /&gt;
|-&lt;br /&gt;
| VVVVVV&lt;br /&gt;
| Buffer overflow in XML save file array parsing&lt;br /&gt;
| VVVVVV utilizes several XML files (renamed with a .vvv extension) to store level save data, stats and settings. Within these XML files are several tags containing an array of data which, when parsed, is not properly checked to be of proper length for the tag being parsed from. This allows for an overflow of 16-bit array values from the location where the array is parsed. With unlock.vvv, XML data is parsed to the stack, and with level saves the heap. This allows for the pointer where the level save worldmap tag array should be parsed into to be overwritten with a stack address, allowing for ROP from within the XML array parsing function on the next level load.&lt;br /&gt;
| None&lt;br /&gt;
| [[10.7.0-32]].&lt;br /&gt;
| Time of exploit release.&lt;br /&gt;
| April 25, 2016&lt;br /&gt;
| [[User:Shinyquagsire23|Shiny Quagsire]]&lt;br /&gt;
|-&lt;br /&gt;
| Citizens of Earth&lt;br /&gt;
| Save file read stack smash&lt;br /&gt;
| Citizens of Earth also uses &amp;quot;XML&amp;quot; files for saves, which are actually entirely binary data (not XML at all) with no checksums. These files are read from the filesystem on to a fixed size stack buffer which leads to an incredibly trivial stack smash. When using the autosave slot for this, the save is parsed when the user selects &amp;quot;continue&amp;quot;. When using one of the dedicated save slots (1-3), the save is parsed shortly after the company splash screens fade. Note that the save is read quite high (descending) on the stack - when exploiting this, one would likely need to move SP due to almost instantly overflowing the physical stack.&lt;br /&gt;
| None&lt;br /&gt;
| [[10.7.0-32]].&lt;br /&gt;
| Time of exploit release.&lt;br /&gt;
| May 5, 2016&lt;br /&gt;
| [[User:Dazzozo|Dazzozo]]&lt;br /&gt;
|-&lt;br /&gt;
| SmileBASIC 3.x&lt;br /&gt;
| Poor parameter validation on &amp;quot;BGSCREEN&amp;quot; command&lt;br /&gt;
| The SmileBASIC &amp;quot;BGSCREEN&amp;quot; command&#039;s second parameter is not properly validated as being within range.  As a result, one can set the screen size to an absurdly large value.  This means that the &amp;quot;BGGET&amp;quot; and &amp;quot;BGPUT&amp;quot; commands can then be used on out-of-range values to read and write a significant chunk of the interpreter&#039;s address space.&lt;br /&gt;
With a series of carefully-designed BGPUT commands, one can build a ROP chain and cause it to be executed.&lt;br /&gt;
| App: 3.3.2.&lt;br /&gt;
| System: [[11.0.0-33]].&lt;br /&gt;
| July 20, 2016&lt;br /&gt;
| Around June 26, 2016&lt;br /&gt;
| slackerSnail, 12Me12, incvoid&lt;br /&gt;
Exploited by MrNbaYoh and [[User:Plutooo|plutoo]].&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Tri Force Heroes&lt;br /&gt;
| [[3DS_System_Flaws#General.2FCTRSDK|CTRSDK]] CTPK buffer overflow combined with game&#039;s usage of SpotPass&lt;br /&gt;
| This isn&#039;t really useful due to [[BOSS_Services#Custom_SpotPass_content|this]].&lt;br /&gt;
&lt;br /&gt;
During the very first screen displayed by the game during boot(&amp;quot;Loading...&amp;quot;), just seconds after title launch, the game loads CTPK from the [[BOSS_Services|stored]] SpotPass content. Hence, this game could be exploited via the vulnerable CTRSDK CTPK code &#039;&#039;if&#039;&#039; one could get custom SpotPass data into extdata somehow.&lt;br /&gt;
&lt;br /&gt;
The code for this runs from a thread separate from the main-thread, with the stack in linearmem heap.&lt;br /&gt;
&lt;br /&gt;
The two SpotPass URLs for this have always(?) returned HTTP 404 as of November 2016. It appears these were intended for use as textures for additional costumes(and never got used publicly), but this wasn&#039;t tested.&lt;br /&gt;
| None&lt;br /&gt;
| App: v2.1.0&lt;br /&gt;
| November 18, 2016&lt;br /&gt;
| November 14, 2016&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Pixel Paint&lt;br /&gt;
| Buffer overflow via unchecked extdata file length&lt;br /&gt;
| Pixel Paint loads pictures saved by the user from extdatas. The file is read to a fixed size buffer but the file length remains unchecked, so with a large enough file, one can overwrite pointers in memory and gain control of the execution flow.&lt;br /&gt;
| None&lt;br /&gt;
| App: Initial version. System: [[11.2.0-35]].&lt;br /&gt;
| December 27, 2016&lt;br /&gt;
| November 5, 2016&lt;br /&gt;
| [[User:Nba_Yoh|MrNbaYoh]]&lt;br /&gt;
|-&lt;br /&gt;
| Steel Diver : Sub Wars&lt;br /&gt;
| Heap overflow / arbitrary memcpy&lt;br /&gt;
| Savefile datas are stored as key/value pairs, a large enough string key makes the game overwrite a memcpy source/destination addresses and size arguments. So one can actually memcpy a rop on the stack and gain control of the execution flow.&lt;br /&gt;
| None&lt;br /&gt;
| System: [[11.2.0-35]].&lt;br /&gt;
| December 27, 2016&lt;br /&gt;
| Around July 15, 2016&lt;br /&gt;
| [[User:Nba_Yoh|MrNbaYoh]], Vegaroxas&lt;br /&gt;
|-&lt;br /&gt;
| 1001 Spikes&lt;br /&gt;
| Buffer overflow via unchecked array-indexes in XML savefile parsing&lt;br /&gt;
| The savefiles are stored as renamed .xml files, which contain several tags with attributes like &#039;array-index=&amp;quot;array-value&amp;quot;&#039;, where both of these are converted from ASCII strings to integers as signed-int32, and the array-value given blindly written to an array inside a structure using the (unchecked) index given. With several of these attributes, one can overwrite the stack starting from the stored lr of the function that does this parsing, and write a ROP chain there. Testing used the &amp;quot;LevelAttempts&amp;quot; tag which is the last such tag parsed in that function.&lt;br /&gt;
| None&lt;br /&gt;
| App: v1.2.0 (TMD v2096)&lt;br /&gt;
| December 27, 2016&lt;br /&gt;
| Around November 2, 2016&lt;br /&gt;
| [[User:Riley|Riley]]&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon Omega Ruby/Alpha Sapphire&lt;br /&gt;
| Secret base team name heap overflow&lt;br /&gt;
| When the player wants to edit the team name, it is copied over the heap, however it&#039;s length is not verified. So with a large enough team name one can overwrite some pointers and get two arbitrary jumps and then get control of the execution flow.&lt;br /&gt;
| None&lt;br /&gt;
| App: 1.4. System: [[11.2.0-35]].&lt;br /&gt;
| December 30, 2016&lt;br /&gt;
| June, 2016&lt;br /&gt;
| [[User:Nba_Yoh|MrNbaYoh]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Useless crashes / applications which were fuzzed==&lt;br /&gt;
* Pushmo (3DSWare), QR codes: level name is properly limited to 16 characters, game doesn&#039;t crash with a longer name. The only possible crashes are triggered by out-of-bounds array index values, these crashes are not exploitable due to the index value being 8bit.&lt;br /&gt;
&lt;br /&gt;
* [[Pyramids (3DSWare)]], QR codes: no strings. Only crashes are from out-of-bounds values (like background ID) and are not exploitable.&lt;br /&gt;
&lt;br /&gt;
* [[Pyramids 2 (3DSWare)]], QR codes: no strings. Only crashes are from out-of-bounds values (like background ID) and are not exploitable.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/yellows8/mm3d_re The Legend of Zelda: Majora&#039;s Mask 3D]&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;The Legend of Zelda: A Link Between Worlds&amp;quot; and &amp;quot;The Legend of Zelda: Tri Force Heroes&amp;quot;: these games don&#039;t crash at all when the entire save-file(minus constant header data) is overwritten with /dev/random output / 0xFF-bytes. All of the CRC32s were updated for this of course.&lt;br /&gt;
&lt;br /&gt;
* Pokemon Mystery Dungeon: Gates to Infinity has the same unchecked file bounds as Pokemon Super Mystery Dungeon, however since save compression was introduced in Pokemon Super Mystery Dungeon, it only allocates one buffer within the application heap instead of several within the linear heap, resulting in nothing to corrupt or overwrite even if the file&#039;s length is extended past it&#039;s allocation.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Kid Icarus: Uprising&amp;quot;: Overwriting the entire savedata results in various crashes, nothing useful.&lt;br /&gt;
&lt;br /&gt;
* Savedata/extdata for &amp;quot;Super Smash Bros 3DS&amp;quot;: Overwriting the various files stored under savedata/extdata results in useless crashes.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;StarFox 64 3D&amp;quot;: Doesn&#039;t crash at all with the entire savedata overwritten.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Frogger 3D&amp;quot;: Overwriting a savefile with random-data results in *nothing* crashing.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Mutant Mudds&amp;quot;: Overwriting the savefile with random data results in a crash&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Animal Crossing: New Leaf&amp;quot;: Creating a QR code from random data results in a valid QR code and a random design. In some very rare cases(which aren&#039;t always reproducible?) a crash/etc may occur, but this isn&#039;t known to be useful.&lt;br /&gt;
&lt;br /&gt;
==Crashes needing investigation==&lt;br /&gt;
* Disney Infinity crashes when all savedata overwritten with /dev/urandom. No checksums. 0xFF bytes don&#039;t cause a crash.&lt;br /&gt;
&lt;br /&gt;
* Football Up Online / Soccer Up Online and Football Up 3D / Soccer Up 3D crash when teamname(UTF-16) length = 0x48 AND 0x20 null bytes are removed after just the name or if teamname length is way longer than 0x48.&lt;br /&gt;
&lt;br /&gt;
=System applications=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  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;
| 3DS [[System Settings]] DS profile string stack-smash&lt;br /&gt;
| Too long or corrupted strings (01Ah  2   Nickname length in characters     050h  2   Message length in characters) in the NVRAM DS user settings (System Settings-&amp;gt;Other Settings-&amp;gt;Profile-&amp;gt;Nintendo DS Profile) cause it to crash in 3DS-mode due to a stack-smash. The DSi is not vulnerable to this, DSi launcher(menu) and DSi System Settings will reset the NVRAM user-settings if the length field values are too long(same result as when the CRCs are invalid). TWL_FIRM also resets the NVRAM user-settings when the string-length(s) are too long.&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| 2012&lt;br /&gt;
| [[User:Ichfly|Ichfly]]&lt;br /&gt;
|-&lt;br /&gt;
| 3DS [[Nintendo 3DS Sound]]&lt;br /&gt;
| &amp;quot;A heap overflow in tag processing leads to code execution when a specially- crafted m4a file is loaded by Nintendo 3DS Sound.&amp;quot; (description from soundhax&#039;s github readme)&lt;br /&gt;
| none&lt;br /&gt;
| [[11.2.0-35]]&lt;br /&gt;
| 2016&lt;br /&gt;
| [[User:nedwill|nedwill]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=System applets=&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;
!  Fixed in version&lt;br /&gt;
!  Last version this flaw was checked for&lt;br /&gt;
!  Introduced with version&lt;br /&gt;
!  Timeframe info related to this was added to wiki&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Webkit/web-browser bugs&lt;br /&gt;
| spider has had at least three different code-execution exploits. Majority of them are use-after-free issues. See also [[browserhax|here]].&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2013?&lt;br /&gt;
|&lt;br /&gt;
| A lot of people.&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS/New3DS [[Internet_Browser|Browser-version-check]] bypass&lt;br /&gt;
| When the browser-version-check code runs where the savedata for it was never initialized(such as when the user used the &amp;quot;Initialize savedata&amp;quot; option), it will use base_timestamp=0 instead of the timestamp loaded from savedata. This is then used with &amp;quot;if(cur_timestamp - base_timestamp &amp;gt;= &amp;lt;24h timestamp&amp;gt;){Run browser-version-check HTTPS request code}&amp;quot;.&lt;br /&gt;
Hence, if the savedata was just initialized, and if the system datetime is set to before January 2, 2000, the browser-version-check will be skipped. This includes January 1, 2000, 00:00, because that&#039;s the epoch(timestamp value 0x0) used with this timestamp.&lt;br /&gt;
&lt;br /&gt;
See [http://yls8.mtheall.com/3dsbrowserhax.php here] for bypass usage instructions.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[10.7.0-32|10.7.0-32]], see [[Internet_Browser|here]] for details.&lt;br /&gt;
| [[10.7.0-32|10.7.0-32]]&lt;br /&gt;
| &lt;br /&gt;
| [[9.9.0-26|9.9.0-26]]&lt;br /&gt;
| February 25, 2016&lt;br /&gt;
| November 2, 2015 (Exactly one week after the browser version pages were initially updated server-side)&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Home Menu==&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;
!  Fixed in version&lt;br /&gt;
!  Last version this flaw was checked for&lt;br /&gt;
!  Introduced with version&lt;br /&gt;
!  Timeframe info related to this was added to wiki&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| bossbannerhax&lt;br /&gt;
| This isn&#039;t really useful due to [[BOSS_Services#Custom_SpotPass_content|this]].&lt;br /&gt;
&lt;br /&gt;
After successfully loading [[Extended_Banner|extended-banner]] data(done when selecting an icon), Home Menu attempts to load [[CBMD]] data into a 0x100000-byte heap buffer from the [[BOSS_Services|stored]] SpotPass content. When successful and the magic-number is CBMD, Home Menu then decompresses the CGFX sections into another fixed-size heap buffer, without checking the outsize at all. The main CBMD CGFX code with ExeFS checks the size, but this code doesn&#039;t.&lt;br /&gt;
| None&lt;br /&gt;
| [[11.2.0-35|11.2.0-X]]&lt;br /&gt;
| [[1.0.0-0|1.0.0-0]]&lt;br /&gt;
| November 18, 2016&lt;br /&gt;
| December 23, 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| sdiconhax&lt;br /&gt;
| This is basically the same as nandiconhax, the vulnerable SD/NAND functions are &#039;&#039;identical&#039;&#039; minus the file-buffer offsets. Exploitation is different due to different heap-buffer location though. Unlike nandiconhax, the icon buffer for SD is located in linearmem(with recent Home Menu versions at least). This is used by [[menuhax]].&lt;br /&gt;
| [[11.1.0-34|11.1.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| [[4.0.0-7|4.0.0-X]]&lt;br /&gt;
| July 27, 2016&lt;br /&gt;
| October 23, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[System_SaveData|NAND-savedata]] Launcher.dat icons (nandiconhax)&lt;br /&gt;
| The homemenu code processing the titleid list @ launcherdat+8 copies those titleIDs to another buffer, where the offset relative to that buffer is calculated using the corresponding s8/s16 entries. Those two values are not range checked at all. Hence, one can use this to write u64(s) with arbitrary values to before/after this allocated output buffer. See [[Home_Menu|here]] regarding Launcher.dat structure.&lt;br /&gt;
&lt;br /&gt;
This can be exploited(with Launcher.dat loading at startup at least) by using a s16 for the icon entry with value 0xFFEC(-20)(and perhaps more icons with similar s16 values to write multiple u64s). The result is that the u64 value is written to outbuf-0xA0, which overwrites object+0(vtable) and object+4(doesn&#039;t matter here) for an object that gets used a bit after the vulnerable function triggers. The low 32bits of the u64 can then be set to the address of controlled memory(either outbuf in regular heap or the entire launcherdat buffer in linearmem), for use as a fake vtable in order to get control of PC. From there one can begin ROP via vtable funcptrs to do a stack-pivot(r4=objectaddr at the time the above object gets used).&lt;br /&gt;
&lt;br /&gt;
Originally this vuln could only be triggered via Launcher.dat at Home Menu startup, right after Launcher.dat gets loaded + memory gets allocated, once the file-format version code is finished running. Starting with v9.6 this can be triggered when loading layouts from SD extdata as well. The vuln itself triggers before the layout data is written to Launcher.dat, but it doesn&#039;t seem to be possible to overwrite anything which actually gets used before the function which writes Launcher.dat into the layout gets called.&lt;br /&gt;
&lt;br /&gt;
Home Menu has some sort of fail-safe system(or at least on v9.7) when Home Menu crashes due to Launcher.dat(this also applies for other things with Home Menu): after crashing once, Home Menu resets Launcher.dat to a state where it no longer crashes anymore. However, note that any exploits using this which hang/etc without crashing will still brick the system. &#039;&#039;&#039;Hence, attempting anything with this on physnand without hw-nand-access isn&#039;t really recommended.&#039;&#039;&#039;&lt;br /&gt;
| [[11.1.0-34|11.1.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| [[4.0.0-7|4.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| May 14, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Theme-data decompression buffer overflow ([[menuhax|themehax]])&lt;br /&gt;
| The only func-call size parameter used by the theme decompression function is one for the compressed size, none for the decompressed size. The decompressed-size value from the LZ header is used by this function to check when to stop decompressing, but this function itself has nothing to verify the decompressed_size with. The code calling this function does not check or even use the decompressed size from the header either.&lt;br /&gt;
&lt;br /&gt;
This function is separate from the rest of the Home Menu code: the function used for decompressing themes is *only* used for decompressing themes, nothing else. There&#039;s a separate decompression function in Home Menu used for decompressing everything else.&lt;br /&gt;
&lt;br /&gt;
That other decompression function in Home Menu handles decompression size properly(decompressed size check for max buffer size is done by code calling the other function, not in the function itself). Unlike the other function, the theme function supports multiple LZ algorithms, but the one which actually gets used in official themes is the same one supported by the other function anyway.&lt;br /&gt;
&lt;br /&gt;
See also [[menuhax|here]].&lt;br /&gt;
&lt;br /&gt;
With [[10.2.0-28|10.2.0-X]] Home Menu, the only code change was that the following was added right after theme-load and before actual decompression: &amp;quot;if(&amp;lt;get_lzheader_decompressed_size&amp;gt;(compressed_buf) &amp;gt; 0x150000)&amp;lt;exit&amp;gt;;&amp;quot;. This fixed the vuln.&lt;br /&gt;
| [[10.2.0-28|10.2.0-X]]&lt;br /&gt;
| [[10.2.0-28|10.2.0-X]]&lt;br /&gt;
| &amp;lt;Old3DS/New3DS version which added initial theme support&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| December 22, 2014&lt;br /&gt;
| [[User:Yellows8|Yellows8]], [[User:Myria|Myria]] independently (~spring 2015)&lt;br /&gt;
|-&lt;br /&gt;
| Shuffle body-data buffer overflow ([[menuhax|shufflehax]])&lt;br /&gt;
| See [[menuhax|here]].&lt;br /&gt;
| [[10.6.0-31|10.6.0-X]]&lt;br /&gt;
| [[10.6.0-31|10.6.0-X]]&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| January 3, 2015&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Extdata file-data loading buffer overflow&lt;br /&gt;
| The extdata file-reading code allocates a fixed-size heap buffer for the expected filesize, then reads the filedata into this buffer using the actual FS filesize. Before v5.0 the filesize used here wasn&#039;t validated, hence if the filesize is larger than alloc_size a buffer overflow would occur. &#039;&#039;After&#039;&#039; doing the file-read it does validate that the actual_readsize matches the alloc_size, but at this point the buffer overflow has already occurred.&lt;br /&gt;
&lt;br /&gt;
This affected at least the following: SaveData.dat and Cache.dat.&lt;br /&gt;
&lt;br /&gt;
This can be triggered with SaveData.dat by installing a &amp;lt;v4.0 Home Menu version, with Home Menu extdata from &amp;gt;=v4.0 still on SD. When this is done with v2.0 Home Menu, a kernelpanic occurs when processing an AM command(it appears a buffer ptr which is then passed to a command was overwritten with 0x0 - of course other SaveData.dat filesizes may result in different behaviour).&lt;br /&gt;
| [[5.0.0-11|5.0.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| [[2.0.0-2|2.0.0-X]]&lt;br /&gt;
| June 9, 2016&lt;br /&gt;
| June 9, 2016&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The icon data arrays used with {sd/nand}iconhax were added to SaveData.dat/Launcher.dat with [[4.0.0-7|4.0.0-X]], hence the vulnerable functions were added with that same version.&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;=v4.0 the SaveData.dat buffer is located in the regular heap. It&#039;s unknown when exactly it was moved to linearmem, which is where it&#039;s located with recent versions. It&#039;s located in linearmem for KOR &amp;gt;=v9.6 for example.&lt;br /&gt;
&lt;br /&gt;
The SaveData.dat/Launcher.dat icon vulns were fixed by doing various unsigned &amp;gt;=60/&amp;gt;=360 checks on the loaded values. When these checks fail, it just skips over handling this icon entry. Hence, the original value can&#039;t be negative / out-of-bounds any more.&lt;br /&gt;
&lt;br /&gt;
==Useless crashes==&lt;br /&gt;
Old3DS system web-browser:&lt;br /&gt;
* 2^32 characters long string(&#039;&#039;finally&#039;&#039; fixed with v10.6): this is similar to the vulnerability fixed [http://git.chromium.org/gitweb/?p=external/Webkit.git;a=commitdiff;h=ec471f16fbd1f879cb631f9b022fd16acd75f4d4 here], concat-large-strings-crash2.html triggers a crash which is about the same as the one triggered by a 2^32 string. Most of the time this vulnerability will cause a memory page permissions fault, since the WebKit code attempts to copy the string text data to the output buffer located in read-only [[CRO0|CRO]] heap memory. The only difference between a crash triggered by a 2^32 string and the concat-large-strings-crash2.html crash is at the former copies the string data using the original string length(like 1 text character for &amp;quot;x&amp;quot;, 4 for &amp;quot;xxxx&amp;quot;) while the latter attempts to copy &amp;gt;12MB. In some &#039;&#039;very&#039;&#039; rare cases a thread separate from the string data-copy thread will crash, this might be exploitable. However, this is mostly useless since it rarely crashes this way.&lt;br /&gt;
&lt;br /&gt;
* Trying to directly load a page via the browser &amp;quot;URL&amp;quot; option with [https://github.com/yellows8/3ds_browserhax_common webkitdebug] setup, causes a crash to trigger in oss.cro due to an use-after-free being caught with webkitdebug. This is presumably some sort of realloc() issue in the libcurl version used by the &amp;lt;={v10.2-v10.3} browser. This happens with *every* *single* *page* one tries to load via the &amp;quot;URL&amp;quot; option, but not when loading links on the current page, hence this is probably useless. A different use-after-free with realloc triggers with loading any page at all regardless of method too(libcurl probably).&lt;br /&gt;
&lt;br /&gt;
* This WebKit build has &#039;&#039;a lot&#039;&#039; of crash-trigger bugs that only happen with [https://github.com/yellows8/3ds_browserhax_common webkitdebug] completely setup(addr accesses near 0x0), with &#039;&#039;just&#039;&#039; trying to load any page at all.&lt;/div&gt;</summary>
		<author><name>TheProgramerEX</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Homebrew_Applications&amp;diff=18417</id>
		<title>Homebrew Applications</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Homebrew_Applications&amp;diff=18417"/>
		<updated>2016-10-12T21:38:01Z</updated>

		<summary type="html">&lt;p&gt;TheProgramerEX: Just added a description to the DownloadMii app saying that the downloads not working right now.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Installing==&lt;br /&gt;
Applications are installed by copying the necessary files directly to the 3ds/ folder in the root of the SD card, or in a subdirectory of &amp;quot;3ds&amp;quot;, in which case said subfolder must be named identically to its executable. Most applications come with two files:&lt;br /&gt;
* (app name).3dsx: The executable.&lt;br /&gt;
* (app name).smdh: The icon/metadata. (Not required in any case, and may be integrated into the .3dsx)&lt;br /&gt;
* (app name).xml: The list of supported targets, i.e. installed titles which the app supports replacing in memory at runtime, thus inheriting its permissions. (Optional)&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. Recent enough versions can freely navigate the filesystem to select an application.&lt;br /&gt;
&lt;br /&gt;
==List==&lt;br /&gt;
&lt;br /&gt;
===Official Launcher===&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/smealum/3ds_hb_menu Homebrew Launcher]&lt;br /&gt;
| Run homebrew on your 3DS!&lt;br /&gt;
| [[User:smea|smea]]&lt;br /&gt;
| [https://smealum.github.io/ninjhax2/boot.3dsx Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/3ds_hb_menu Homebrew Starter Pack]&lt;br /&gt;
| Everything to get you started.&lt;br /&gt;
| [[User:smea|smea]]&lt;br /&gt;
| [https://smealum.github.io/ninjhax2/starter.zip Here]&lt;br /&gt;
| Yes&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;
!  width=&amp;quot;10%&amp;quot; | Last Updated&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;
|-&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;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/videahs-various-stuff.397562/ 3dsfetch]&lt;br /&gt;
| Small 3DS version of a popular Linux ricing script called screenfetch&lt;br /&gt;
| [[User:VideahGams|VideahGams]]&lt;br /&gt;
| [https://github.com/VideahGams/3dsfetch Here]&lt;br /&gt;
| [https://github.com/VideahGams/3dsfetch Yes]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/S3r1alpari4h/Brainfudge3DS Brainfudge]&lt;br /&gt;
| Alpha brainfuck interpreter&lt;br /&gt;
| [[User:s3r1alpari4h|V0idst4r]]&lt;br /&gt;
| [https://github.com/s3r1alpari4h/Brainfudge3DS/releases/ Here]&lt;br /&gt;
| [https://github.com/S3r1alpari4h/Brainfudge3DS Yes]&lt;br /&gt;
|&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;
|-&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;
|-&lt;br /&gt;
| [https://github.com/Rinnegatamante/CHMM2 Custom Home Menu Manager 2]&lt;br /&gt;
| Theme manager for Nintendo 3DS&lt;br /&gt;
| [[User:Rinnegatamante|Rinnegatamante]]&lt;br /&gt;
| [http://rinnegatamante.it/CHMM2.rar Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/DownloadMii/DownloadMii DownloadMii]&lt;br /&gt;
| This is a WIP homebrew online store. (Download not currently working)&lt;br /&gt;
| [[User:filfat|filfat]]&lt;br /&gt;
| [https://homebrew.filfatstudios.com/download/ Latest]&lt;br /&gt;
| Yes&lt;br /&gt;
|&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;
| [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;
|-&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;
|-&lt;br /&gt;
| [https://github.com/SciresM/ScreenInfo ScreenInfo]&lt;br /&gt;
| Identify whether N3DS LCD panels are TN or IPS.&lt;br /&gt;
| [[User:SciresM|SciresM]]&lt;br /&gt;
| [https://github.com/SciresM/ScreenInfo/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 2016-9-4 (1.01)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Game Engines===&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;
!  width=&amp;quot;10%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/release-l%C3%B6vepotion-l%C3%96ve-api-for-3ds-homebrew-beta.397559/ LövePotion]&lt;br /&gt;
| An unofficial work in progress implementation of the LÖVE API for 3DS Homebrew&lt;br /&gt;
| [[User:VideahGams|VideahGams]]&lt;br /&gt;
| [https://github.com/VideahGams/LovePotion/releases Here]&lt;br /&gt;
| [https://github.com/VideahGams/LovePotion Yes]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://ctrulua.github.io/ ctrµLua]&lt;br /&gt;
| A Lua interpreter for 3DS brought to life by the remnants of the µLua community&lt;br /&gt;
| [[User:Firew0lf|Firew0lf]], Reuh, Negi&lt;br /&gt;
| [https://github.com/ctruLua/ctruLua/releases Here]&lt;br /&gt;
| [https://github.com/ctruLua/ctruLua Yes]&lt;br /&gt;
|&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;
!  width=&amp;quot;10%&amp;quot; | Last Updated&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;
|-&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;
|-&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;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/preview-ld-34-port-antibounce.406361 Antibounce]&lt;br /&gt;
| Move your player to bounce around and collect coins. Go between screens through the holes in the sides of the floor. 3D can also be enabled.&lt;br /&gt;
| TurtleP&lt;br /&gt;
| [https://github.com/TurtleP/Antibounce/releases Here]&lt;br /&gt;
| [https://github.com/TurtleP/Antibounce Yes]&lt;br /&gt;
|&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;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/release-drawattack-networked-drawing-game.402291/ DrawAttack]&lt;br /&gt;
| Online multiplayer drawing game like pictionary.&lt;br /&gt;
| [[User:Cruel|Cruel]]&lt;br /&gt;
| [https://github.com/Cruel/DrawAttack/releases/latest Here]&lt;br /&gt;
| [https://github.com/Cruel/DrawAttack Yes]&lt;br /&gt;
| 16/Nov/15&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;
|-&lt;br /&gt;
| [https://github.com/BHSPitMonkey/Helii3DS Helii]&lt;br /&gt;
| Fly a helicopter through a 2D tunnel! Ported from the Wii.&lt;br /&gt;
| [[User:BHSPitMonkey|BHSPitMonkey]]&lt;br /&gt;
| [https://github.com/BHSPitMonkey/Helii3DS/releases/ Here]&lt;br /&gt;
| [https://github.com/BHSPitMonkey/Helii3DS Yes]&lt;br /&gt;
| 18/Sep/15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gowengamedev.com/insectoid-defense/ Insectoid Defense]&lt;br /&gt;
| A Sci-Fi Tower Defense game. This is merely a port of the Android/iOS/Windows Phone version.&lt;br /&gt;
| [http://www.3dbrew.org/wiki/User:Sgowen sgowen]&lt;br /&gt;
| [https://github.com/GowenGameDevOpenSource/insectoid-defense/releases/download/v1.0-all/insectoid-defense-3DS.zip Here]&lt;br /&gt;
| [https://github.com/GowenGameDevOpenSource/insectoid-defense Yes]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/videahs-various-stuff.397562/ NumberFucker3DS]&lt;br /&gt;
| Simple math game, originally used as a debug game for LövePotion&lt;br /&gt;
| [[User:VideahGams|VideahGams]]&lt;br /&gt;
| [https://github.com/VideahGams/NumberFucker3DS Here]&lt;br /&gt;
| [https://github.com/VideahGams/NumberFucker3DS Yes]&lt;br /&gt;
|&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;
|-&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;
|-&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;
|-&lt;br /&gt;
| [http://david.dantoine.org/proyecto/26/ Pituka Classics]&lt;br /&gt;
| The goal is to bring CPC classics using my [http://david.dantoine.org/proyecto/4/ Pituka Emulator-Core] as base with new features to your 3DS.&lt;br /&gt;
| [[User:D_Skywalk|D_Skywalk]]&lt;br /&gt;
| [http://david.dantoine.org/descargas/72 Here]&lt;br /&gt;
| Yes (see core)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gbatemp.net/threads/release-pixel-shuffle-2ds.398540/ Pixel Shuffle 2DS]&lt;br /&gt;
| Puzzle game.&lt;br /&gt;
| [[User:Cid2mizard|Cid2mizard]]&lt;br /&gt;
| [http://3ds.nintendomax.com/Homebrews/Jeux/PixelShuffle2DS/Pixel_Shuffle_2DS.rar Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gbatemp.net/threads/release-pixel-swap-2ds.395749/ Pixel Swap 2DS]&lt;br /&gt;
| Relaxing Puzzle game.&lt;br /&gt;
| [[User:Cid2mizard|Cid2mizard]]&lt;br /&gt;
| [http://3ds.nintendomax.com/Homebrews/Jeux/PixelSwap2DS/Pixel_Swap_2DS.rar Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&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;
| [http://www.mediafire.com/file/yo463wt6y4tybch/portal3DS.rar Here]&lt;br /&gt;
| [https://github.com/smealum/portal3DS Yes]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/release-reversi-othello-for-3ds.395442/ Reversi]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Reversi Reversi] for the 3DS.&lt;br /&gt;
| [[User:MrJPGames|Jasper Peters]]&lt;br /&gt;
| [https://github.com/MrJPGames/Othello-3DS/releases Here]&lt;br /&gt;
| [https://github.com/MrJPGames/Othello-3DS Yes]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/release-space-fruit.399088/ Space Fruit]&lt;br /&gt;
| Hackathon game by 4 friends ported to 3DS. Asteroids but with fruit (kinda)&lt;br /&gt;
| TurtleP&lt;br /&gt;
| [https://github.com/TurtleP/Space_Fruit/releases Here]&lt;br /&gt;
| [https://github.com/TurtleP/Space_Fruit/tree/3DS Yes]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gowengamedev.com/tappy-plane/ Tappy Plane]&lt;br /&gt;
| A Flappy Bird clone, but with a colorful plane. This is merely a port of the Android/iOS/Windows Phone version.&lt;br /&gt;
| [http://www.3dbrew.org/wiki/User:Sgowen sgowen]&lt;br /&gt;
| [https://github.com/GowenGameDevOpenSource/tappy-plane/releases/download/v1.0-all/tappy-plane-3DS.zip Here]&lt;br /&gt;
| [https://github.com/GowenGameDevOpenSource/tappy-plane Yes]&lt;br /&gt;
|&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;
|-&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;
|-&lt;br /&gt;
| [http://gbatemp.net/threads/trucmuche-2ds-09.404859// Trucmuche 2DS 09]&lt;br /&gt;
| Hidden Objects.&lt;br /&gt;
| [[User:Cid2mizard|Cid2mizard]]&lt;br /&gt;
| [http://3ds.nintendomax.com/Homebrews/Jeux/Trucmuche2DS09/Trucmuche_2DS_09.rar Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&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://github.com/Steveice10/WorldOf3DSand/releases/ Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&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;
| [https://github.com/masterfeizz/ctrQuake ctrQuake]&lt;br /&gt;
| Unofficial port of Quake for the 3DS, fully playable.&lt;br /&gt;
| [https://twitter.com/masterfeizz MasterFeizz]&lt;br /&gt;
| [https://github.com/masterfeizz/ctrQuake/releases/ Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/masterfeizz/EDuke3D EDuke3D]&lt;br /&gt;
| Unofficial port of EDuke32 for the Nintendo 3DS&lt;br /&gt;
| [https://twitter.com/masterfeizz MasterFeizz]&lt;br /&gt;
| [https://github.com/masterfeizz/EDuke3D/releases/ Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/landm2000/sokoban Sokoban]&lt;br /&gt;
| Puzzle game. Unofficial port of Sokoban for the Nintendo 3DS&lt;br /&gt;
| [https://www.3dbrew.org/wiki/User:Landm Landm]&lt;br /&gt;
| [https://github.com/landm2000/sokoban Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Kaisogen/CookieCollector-3DS- Cookie Collector]&lt;br /&gt;
| Cookie Collector game. Very tiny and not much in it. Good car trip or time waster game. On version 1.2 as of now.&lt;br /&gt;
| [https://twitter.com/Kaisogen Kaisogen]&lt;br /&gt;
| [http://www.mediafire.com/download/qpojx6avkm6oo18/CookieCollector.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 4/5/2016&lt;br /&gt;
|-&lt;br /&gt;
| [https://thp.itch.io/tetrepetete-3ds Tetrepetete 3DS]&lt;br /&gt;
| A game with blocks.&lt;br /&gt;
| [[User:thp|thp]]&lt;br /&gt;
| [https://thp.itch.io/tetrepetete-3ds Here]&lt;br /&gt;
| No&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://thp.itch.io/that-rabbit-game-3ds That Rabbit Game 3DS]&lt;br /&gt;
| Inverse duck hunt with accelerometer input and stereoscopic 3D.&lt;br /&gt;
| [[User:thp|thp]]&lt;br /&gt;
| [https://thp.itch.io/that-rabbit-game-3ds Here]&lt;br /&gt;
| No&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://pyug.at/PyWeek/2012-09 One Whale Trip]&lt;br /&gt;
| Five-lane underwater whale swimming/pearl pickup adventure game in Python.&lt;br /&gt;
| [[User:thp|thp]]&lt;br /&gt;
| [https://bitbucket.org/pyugat/pyweek1209/downloads/OneWhaleTrip-2016-07-18-3DS.zip Here]&lt;br /&gt;
| [https://bitbucket.org/pyugat/pyweek1209/src/default/3ds/ Yes]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/TheMachinumps/Cookie_Clicker_3DS/ Cookie Clicker 3DS]&lt;br /&gt;
| A simple Cookie Clicker type of game inspired by [https://twitter.com/Kaisogen Kaisogen]&#039;s Cookie Collector&lt;br /&gt;
| [[User:TheMachinumps|TheMachinumps]]&lt;br /&gt;
| [https://github.com/TheMachinumps/Cookie_Clicker_3DS/releases/download/v1.0/Cookie.Clicker.3DS.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&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;
!  width=&amp;quot;10%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/st4rk/3DNES 3DNES]&lt;br /&gt;
| An NES emulator. (No longer being worked on)&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;
| March 2015&lt;br /&gt;
|-&lt;br /&gt;
| [http://asie.pl/homebrew atari800-3DS]&lt;br /&gt;
| An Atari 8-bit home computer emulator.&lt;br /&gt;
| asie&lt;br /&gt;
| [http://asie.pl/homebrew Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 2016-7-23 (0.1.1)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/StapleButter/blargSnes blargSnes]&lt;br /&gt;
| A Super Nintendo emulator. A compatibility list can be found [http://wiki.gbatemp.net/wiki/BlargSnes_Compatibility_List here].&lt;br /&gt;
| StapleButter&lt;br /&gt;
| [http://kuribo64.net/get.php?id=fYRTHLeS0pR3DXFw Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| May 2015&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;
| March 2015&lt;br /&gt;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/chip8-3ds.434425/ CHIP8-3DS]&lt;br /&gt;
| CHIP-8 emulator with savestates and touch controls.&lt;br /&gt;
| xerpi&lt;br /&gt;
| [https://github.com/nopy4869/CHIP8-2DS/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 2016-7-20&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;
| September 2015&lt;br /&gt;
|-&lt;br /&gt;
| [https://easy-rpg.org/blog/2016/05/player-for-nintendo-3ds/ EasyRPG Player]&lt;br /&gt;
| RPG Maker 2000/2003 interpreter&lt;br /&gt;
| Rinnegatamante &amp;amp; EasyRPG Team&lt;br /&gt;
| [https://easy-rpg.org/player/downloads/ Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| May 2016&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Steveice10/GameYob/ GameYob]&lt;br /&gt;
| A Game Boy (Color) emulator. A compatibility list can be found [http://wiki.gbatemp.net/wiki/GameYob_3DS_Compatibility_List here].&lt;br /&gt;
| Drenn/Steveice10&lt;br /&gt;
| [https://github.com/Steveice10/GameYob/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| November 2015&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mrdanielps/r3Ddragon r3Ddragon]&lt;br /&gt;
| A virtual boy emulator.&lt;br /&gt;
| mrdanielps&lt;br /&gt;
| [https://github.com/mrdanielps/r3Ddragon/releases/download/v0.85-preview.1/r3Ddragon.cia Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| October 2015&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/libretro/RetroArch RetroArch]&lt;br /&gt;
| A multisystem emulator. (GB, GBA, SNES, Genesis, CPS1, CPS2, etc.)&lt;br /&gt;
| libretro&lt;br /&gt;
| [http://buildbot.libretro.com/nightly/nintendo/3ds/ Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| Undergoing rapid development.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/bubble2k16/snes9x_3ds SNES9x for 3DS]&lt;br /&gt;
| A SNES emulator for the old 3DS / 2DS. Optimised from Snes9x 1.43 and runs many games at full speed. Compatibility list [http://wiki.gbatemp.net/wiki/Snes9x_for_3DS here]&lt;br /&gt;
| bubble2k16&lt;br /&gt;
| [https://github.com/bubble2k16/snes9x_3ds/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| Sep 2016. Active development&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mgba-emu/mgba mGBA]&lt;br /&gt;
| A GBA emulator that runs well without kernel hax.&lt;br /&gt;
| endrift&lt;br /&gt;
| [https://mgba.io/downloads.html Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| Sep 2016. Active development&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Title managers===&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;
!  width=&amp;quot;10%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Steveice10/FBI FBI]&lt;br /&gt;
| Open source CIA (un)installer and launcher.&lt;br /&gt;
| [[User:Steveice10|Steveice10]]&lt;br /&gt;
| [https://github.com/Steveice10/FBI/releases?after=2.0.0 Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 2015-12-2 (1.4.17)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Steveice10/FBI FBI 2]&lt;br /&gt;
| Multipurpose file/title/ticket/save manager&lt;br /&gt;
| [[User:Steveice10|Steveice10]]&lt;br /&gt;
| [https://github.com/Steveice10/FBI/releases/ Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| Undergoing rapid development.&lt;br /&gt;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/release-nasa-universal-cia-manager-for-fw-4-1-10-3.409806/ NASA]&lt;br /&gt;
| Universal CIA Manager for FWs 4.1 - 10.7&lt;br /&gt;
| [[User:Rinnegatamante|Rinnegatamante]]&lt;br /&gt;
| [http://rinnegatamante.it/site/3ds_hbs.php Here]&lt;br /&gt;
| No&lt;br /&gt;
| 2016-4-13 (1.6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Save managers===&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;
!  width=&amp;quot;10%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| save_manager&lt;br /&gt;
| Proof of concept save exporter/importer&lt;br /&gt;
| [[User:profi200|profi200]]&lt;br /&gt;
| [http://gbatemp.net/attachments/save_manager_-with_smdh-zip.24349/ Here]&lt;br /&gt;
| [https://gist.github.com/profi200/d0d092c11d0eb0692748 Yes]&lt;br /&gt;
| 2015-9-13&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/meladroit/svdt svdt]&lt;br /&gt;
| Save Data Explorer/Manager&lt;br /&gt;
| [[User:meladroit|meladroit]]&lt;br /&gt;
| [https://github.com/meladroit/svdt/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 2015-10-16 (0.10.42d)&lt;br /&gt;
|-&lt;br /&gt;
| [https://gbatemp.net/threads/release-jks-savemanager-homebrew-cia-save-manager.413143/ JK&#039;s Save Manager]&lt;br /&gt;
| Save/Extdata Manager&lt;br /&gt;
| JK_&lt;br /&gt;
| [https://github.com/J-D-K/JKSM/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 2016-6-30&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===File servers===&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;
!  width=&amp;quot;10%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mtheall/ftpd ftpd (ftBrony)]&lt;br /&gt;
| A FTP server.&lt;br /&gt;
| [https://github.com/mtheall mtheall]&lt;br /&gt;
| [https://github.com/mtheall/ftpd/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|&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;
|-&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;
|}&lt;br /&gt;
&lt;br /&gt;
===Icon Packs===&lt;br /&gt;
Icon Packs are SMDH Packs for homebrew apps&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; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
|Simplok&lt;br /&gt;
|The first 3DS Icon pack.&lt;br /&gt;
|link6155&lt;br /&gt;
|[http://1drv.ms/1EJCq2e Download]&lt;br /&gt;
| 7 September 2015&lt;br /&gt;
|-&lt;br /&gt;
|1LP&lt;br /&gt;
|Cool Icon Pack!.&lt;br /&gt;
|[[User:100pcrack|100pcrack]]&lt;br /&gt;
|[http://github.com/100pcrack/1LP/releases Releases]&lt;br /&gt;
| 27 November 2015&lt;br /&gt;
|-&lt;br /&gt;
|Modern UI&lt;br /&gt;
|A simple icon pack with a flat and minimalist design.&lt;br /&gt;
|[https://gbatemp.net/members/louch-%E9%9B%AA-daishiteru.371920/ LouchDaishiteru]&lt;br /&gt;
|[https://gbatemp.net/threads/icon-pack-modern-ui.404366/ Download]&lt;br /&gt;
| 20 January 2016&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;
!  width=&amp;quot;10%&amp;quot; | Last Updated&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;br /&gt;
|-&lt;br /&gt;
| Spine 2D&lt;br /&gt;
| Demo of [http://esotericsoftware.com/ Spine] 2D skeletal animations&lt;br /&gt;
| [[User:Cruel|Cruel]]&lt;br /&gt;
| [https://mega.nz/#!Xg411B5R!kcVHP69Ilggmjh4q5OYmr2cFvf5UGdHWA98-_VttDTo 3DSX] [https://mega.nz/#!z8gxHSQb!H0as1A4wqYrdKBhXJwdYik7nPd_msXJhz5N1CeZm1Iw CIA]&lt;br /&gt;
| No&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| demo ou mourir&lt;br /&gt;
| Small demo for the 3DS with music and 2D effects&lt;br /&gt;
| Desire&lt;br /&gt;
| [http://www.pouet.net/prod.php?which=66607 Pouet]&lt;br /&gt;
| No&lt;br /&gt;
| November 2015&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Alternate Launchers===&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;
| Mashers HBL&lt;br /&gt;
| Homebrew Launcher with a grid and folders support.&lt;br /&gt;
| [[User:Mashers|Mashers]]&lt;br /&gt;
| [http://gbatemp.net/threads/release-homebrew-launcher-with-grid-layout.397527/ Here]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TheProgramerEX</name></author>
	</entry>
</feed>