kartdlphax es un exploit semiprimario para la versión digital de Mario Kart 7 de Nintendo 3DS.
Se puede usar para ejecutar un payload en modo usuario en una Nintendo 3DS sin modificar conectándolo a través del juego de descarga a otra Nintendo 3DS con Custom Firmware ejecutando el exploit.
Instalación de Kartdlphax
El exploit usa un plugin 3GX en el sistema host. Por lo tanto, para usar este exploit es necesario instalar el fork 3GX Loader Luma3DS.
En la consola host coloca el archivo .3gx de Kartdlphax descargado desde aquí mismo en uno de los siguientes directorios, dependiendo de la región de tu juego:
- EUR: luma/plugins/0004000000030700
- JAP: luma/plugins/0004000000030600
- USA: luma/plugins/0004000000030800
(Las versiones TWN, CHN y KOR no han sido testeadas).
Por defecto, el plugin usará el payload otherapp que viene precargado (universal-otherap). Puedes colocar tu propio otherapp en la ruta /kartdlphax_otherapp.bin, pero ten en cuenta que otherapp hax 2.0 no funciona actualmente.
Uso de Kartdlphax
- On the host 3ds, make sure the plugin loader is enabled from the Rosalina menu (L+Down+Select), then launch the Mario Kart 7 game matching the region of the client 3ds(es). (You will see a confirmation message in the top screen once the game launches).
- On the client 3ds(es), launch the download play application.
- On the host 3ds, select Local Multiplayer then Create Group. After that, let the client 3ds(es) join the group.
- Once the multiplayer menu loads on the host 3ds, select Grand Prix then 50cc then any driver combination and finally the Mushroom Cup. After a while the exploit will trigger on the client 3ds(es).
Keep in mind that while you can send the exploit to 8 consoles at the same time, the success rate seems to decrease for each console added.
Technical Details
This exploit consists of 3 stages + the otherapp.
- Vtable pwn exploit: The download play child application doesn't have the course files stored in its romfs, so it has to ask the host to send them when needed. Since this data is not part of the child .cia and is not signed, we can send anything arbitrary. Furthermore, the client sets up a buffer to recieve the data from the host, but it never checks the incoming data size, so we can produce a buffer overflow which overwrites important data after the recieve buffer. By overwriting a vtable, we can produce an arbitrary jump in the main thread and eventually jump to the ROP chain.
- ROP chain: From the rop chain and using yellows8's 3ds ropkit as a base, we can terminate some problematic threads and replace the area at 0x100000 with the next stage using gspwn. We can't load otherapp directly from ROP because some gadgets and important functions are in the same area as the otherapp target address, so a small helper payload is needed first.
- Miniapp payload: This asm payload based on luigialma's version from nitpic3d is responsable of terminating the rest of the problematic threads, reconstructing the partitioned otherapp from the recieved buffer, mapping it to 0x101000 with gspwn and finally launching it.
You can find more in-depth details in the comments inside the plugin and miniapp source files.
Credits
- 3ds ropkit (by yellows8).
- universal-otherapp (Copyright (c) 2020 TuxSH).
- CTRPF (by Nanquitas).
- nitpic3d's developer luigoalma for his huge help.
- Kartic for his huge help and all the people from his development discord server.
Notice
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
by PabloMK7.
Que novedades incluye la versión 1.3.2
Released
- Se han solucionado todos los problemas relacionados con la versión 11.17 del firmware.