Hacking Hack SXOS

  • Thread starter Thread starter Reacher17
  • Start date Start date
  • Views Views 481,265
  • Replies Replies 1,578
  • Likes Likes 63
LAST EDIT!
Fix the problem by resetting the console without clearing the save data, from the ADVANCED MENU.

i5C5Fw3.jpg


Don't ask me why it was solved, I don't know exactly. Ah to be trash files or that generated conflict internally in the console.

Games that already work in .xci:
Go vacation
Star War Republic Commando

The Witcher 3 continues to bother, I will try without the Update, or installing the Update having only the Base as .xci

UPDATE: I found out the possible issue of The Witcher 3: DEfinitive Edition not being able to load in XCI with SXOS. Apparently the version of Definitive Edition contains an Update that would be 3.2, and when containing it with the most recent Update (3.7) a "virtual" cartridge error bounces when trying to mount it. You would have to install Update 3.7 on the console or extract or replace 3.2 with 3.7 contained in the Base game.
 
Last edited by Naminave,
9yap.bmp
j3dk.bmp
bu5q.bmp
uz06.bmp
b93s.bmp
lohz.bmp
1tau.bmp
uz74.bmp
r4og.bmp
9e5d.bmp
wxmj.bmp


Code:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>


const char gfxin[11][20] = {{"menu_bg.bmp"},
							{"bootcfw.bmp"},
							{"bootofw.bmp"},
							{"options.bmp"},
							{"core.bmp"},
							{"autorcm.bmp"},
							{"nand.bmp"},
							{"emunand.bmp"},
							{"repair.bmp"},
							{"launch.bmp"},
							{"poweroff.bmp"}};
						
const char gfxout[11][20] =    {{"menu_bg_out.bin"},
								{"bootcfw_out.bin"},
								{"bootofw_out.bin"},
								{"options_out.bin"},
								{"core_out.bin"},
								{"autorcm_out.bin"},
								{"nand_out.bin"},
								{"emunand_out.bin"},
								{"repair_out.bin"},
								{"launch_out.bin"},
								{"poweroff_out.bin"}};
	
const char gfxout2[11][20] =   {{"menu_bg_out.bmp"},
								{"bootcfw_out.bmp"},
								{"bootofw_out.bmp"},
								{"options_out.bmp"},
								{"core_out.bmp"},
								{"autorcm_out.bmp"},
								{"nand_out.bmp"},
								{"emunand_out.bmp"},
								{"repair_out.bmp"},
								{"launch_out.bmp"},
								{"poweroff_out.bmp"}};
int size_gfx[11] = {0x3c008a,0x4008a,0x4008a,0x4008a,0x408a,0x408a,0x408a,0x408a,0x408a,0x408a,0x408a};
int size_gfx_reso[11] = {0xC00,0x400,0x400,0x400,0x100,0x100,0x100,0x100,0x100,0x100,0x100};
int size_gfx_reso_bg = 0x1400;


int main()
{

	int count;
	
	for(count=0; count<11; count++)
	{
		int i;
		int j;
		int x;
		int y;
		int z;
		
		char *tmp_in;
		char *tmp_out;
		
		FILE * file_in;
		FILE * file_out;
		
		file_in = fopen(gfxin[count],"rb");
		file_out = fopen(gfxout[count],"wb");
		
		tmp_in = (char*)malloc(size_gfx[count] * sizeof(char));
		tmp_out = (char*)malloc(size_gfx[count] * sizeof(char));
		
		fread(tmp_in, size_gfx[count], 1, file_in);
		
		
		for(j = 0; j < 0x8A; j++)tmp_out[j] = tmp_in[j];
		y = 0x8a;
		
		if(count == 0)z = size_gfx_reso_bg;
		else z = size_gfx_reso[count];
		for(i = size_gfx[count]; i > 0x8A; i-=z)
		{
			for(x=0; x<z; x+=0x4){
				tmp_out[((i-z)+x)+0] = tmp_in[(y+x)+2];
				tmp_out[((i-z)+x)+1] = tmp_in[(y+x)+1];
				tmp_out[((i-z)+x)+2] = tmp_in[(y+x)+0];
				tmp_out[((i-z)+x)+3] = tmp_in[(y+x)+3];
			}
			y+=z;
		}
		
		fwrite(tmp_out, size_gfx[count], 1, file_out);
		
		
		
		fclose(file_out);
		fclose(file_in);
		free(tmp_in);
		free(tmp_out);
		rename(gfxout[count],gfxout2[count]);
	}
	printf("success !!!\n");
	system("pause");
}
 
Last edited by Reacher17,
UPDATE: I found out the possible issue of The Witcher 3: DEfinitive Edition not being able to load in XCI with SXOS. Apparently the version of Definitive Edition contains an Update that would be 3.2, and when containing it with the most recent Update (3.7) a "virtual" cartridge error bounces when trying to mount it. You would have to install Update 3.7 on the console or extract or replace 3.2 with 3.7 contained in the Base game.
The super xci is working fine with sxos (v3.7 definitive edition + all dlc)
 
  • Like
Reactions: Kioku
I think that, not just an updated SXOS, but even the source code should "leak". Most of the money TX can make with switch is already done, at least for unpatched Erista switches, while the newest selling point is the modchips themselves, which are already gone or to be gone soon. So I think they would have an elegant "ending" ( for this battle at least ) on the switch scene by releasing the sources and they wouldn't need to work on it anymore.
They will be able to make money by selling SXOS to Mariko users once clone chips are a thing. There is some strong evidence that some will be coming soon shipped with SpacecraftNX.
 
They will be able to make money by selling SXOS to Mariko users once clone chips are a thing. There is some strong evidence that some will be coming soon shipped with SpacecraftNX.
That's honestly very good news on the hardware front, can you elaborate on that ? Thank you.

About making money with SX OS, well, if that means renewed support and, let's call it that way, the comeback of SXOS, I am glad for that too, that would mean long live SXOS, good news indeed.
 
As above - You can make a small Emu nand, with only a 64 MB user partition for use with SXOS using NxNandManager - which only uses about 2 gig sd card space if space is an issue for you. I've got one of those and another small Emu nand for Atmos as well, both take up less than 5 gig out of my 256 Gig micro sd card. I use Atmos for most stuff, then for XCI I switch to SXOS using a payload switcher. This is not a big deal to set up and gives you ALL the features of both CFW.

Thats super small, how do you manage saves? I have the same setup but with 2 6gb emunands which gives me about 3.4gb user partition in each of them
 
Thats super small, how do you manage saves? I have the same setup but with 2 6gb emunands which gives me about 3.4gb user partition in each of them
I usually just use a full size hidden emunand partition for everything such as games/homebrew etc. And a small file CLEAN file based emunand for testing stuff and getting firmware or XCI game updates. (It's easily restored to sd card and compressed it's only 875 megs on my laptop and less than 3 gig on the Micro SD card).
 
Last edited by mrdude,
That's honestly very good news on the hardware front, can you elaborate on that ? Thank you.

About making money with SX OS, well, if that means renewed support and, let's call it that way, the comeback of SXOS, I am glad for that too, that would mean long live SXOS, good news indeed.
I don't know too much about it but I saw people talking about it in the TX Discord. There were images of chips and some videos of them being programmed with SpacecraftNX / booting Atmosphere. The chips are almost identical except for a small difference on the part that connects to the Nand. I've only seen them booting on full sized units so I don't know if they're also making SX Lite clones but I imagine they are if they've went this far with cloning the SX Core.
 
9yap.bmp
j3dk.bmp
bu5q.bmp
uz06.bmp
b93s.bmp
lohz.bmp
1tau.bmp
uz74.bmp
r4og.bmp
9e5d.bmp
wxmj.bmp


Code:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>


const char gfxin[11][20] = {{"menu_bg.bmp"},
                            {"bootcfw.bmp"},
                            {"bootofw.bmp"},
                            {"options.bmp"},
                            {"core.bmp"},
                            {"autorcm.bmp"},
                            {"nand.bmp"},
                            {"emunand.bmp"},
                            {"repair.bmp"},
                            {"launch.bmp"},
                            {"poweroff.bmp"}};
                    
const char gfxout[11][20] =    {{"menu_bg_out.bin"},
                                {"bootcfw_out.bin"},
                                {"bootofw_out.bin"},
                                {"options_out.bin"},
                                {"core_out.bin"},
                                {"autorcm_out.bin"},
                                {"nand_out.bin"},
                                {"emunand_out.bin"},
                                {"repair_out.bin"},
                                {"launch_out.bin"},
                                {"poweroff_out.bin"}};
 
const char gfxout2[11][20] =   {{"menu_bg_out.bmp"},
                                {"bootcfw_out.bmp"},
                                {"bootofw_out.bmp"},
                                {"options_out.bmp"},
                                {"core_out.bmp"},
                                {"autorcm_out.bmp"},
                                {"nand_out.bmp"},
                                {"emunand_out.bmp"},
                                {"repair_out.bmp"},
                                {"launch_out.bmp"},
                                {"poweroff_out.bmp"}};
int size_gfx[11] = {0x3c008a,0x4008a,0x4008a,0x4008a,0x408a,0x408a,0x408a,0x408a,0x408a,0x408a,0x408a};
int size_gfx_reso[11] = {0xC00,0x400,0x400,0x400,0x100,0x100,0x100,0x100,0x100,0x100,0x100};
int size_gfx_reso_bg = 0x1400;


int main()
{

    int count;
 
    for(count=0; count<11; count++)
    {
        int i;
        int j;
        int x;
        int y;
        int z;
    
        char *tmp_in;
        char *tmp_out;
    
        FILE * file_in;
        FILE * file_out;
    
        file_in = fopen(gfxin[count],"rb");
        file_out = fopen(gfxout[count],"wb");
    
        tmp_in = (char*)malloc(size_gfx[count] * sizeof(char));
        tmp_out = (char*)malloc(size_gfx[count] * sizeof(char));
    
        fread(tmp_in, size_gfx[count], 1, file_in);
    
    
        for(j = 0; j < 0x8A; j++)tmp_out[j] = tmp_in[j];
        y = 0x8a;
    
        if(count == 0)z = size_gfx_reso_bg;
        else z = size_gfx_reso[count];
        for(i = size_gfx[count]; i > 0x8A; i-=z)
        {
            for(x=0; x<z; x+=0x4){
                tmp_out[((i-z)+x)+0] = tmp_in[(y+x)+2];
                tmp_out[((i-z)+x)+1] = tmp_in[(y+x)+1];
                tmp_out[((i-z)+x)+2] = tmp_in[(y+x)+0];
                tmp_out[((i-z)+x)+3] = tmp_in[(y+x)+3];
            }
            y+=z;
        }
    
        fwrite(tmp_out, size_gfx[count], 1, file_out);
    
    
    
        fclose(file_out);
        fclose(file_in);
        free(tmp_in);
        free(tmp_out);
        rename(gfxout[count],gfxout2[count]);
    }
    printf("success !!!\n");
    system("pause");
}

Here's that program compiled for windows for those that don't know how to do that. The program basically converts bmp files into the correct format (BGR and rotates & flips them). You will still need a script to inject these images into SXOS - I take it this will be posted at some point?
 

Attachments

Last edited by mrdude,
script

menu_bg.bmp 1280x768

bootcfw.bmp bootofw.bmp options.bmp 256x256

core.bmp autorcm.bmp nand.bmp emunand.bmp repair.bmp launch.bmp poweroff.bmp 64x64

32bits ARGB

Code:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>

const char gfxin[11][20] = {{"menu_bg.bmp"},
                            {"bootcfw.bmp"},
                            {"bootofw.bmp"},
                            {"options.bmp"},
                            {"core.bmp"},
                            {"autorcm.bmp"},
                            {"nand.bmp"},
                            {"emunand.bmp"},
                            {"repair.bmp"},
                            {"launch.bmp"},
                            {"poweroff.bmp"}};
                       
const char gfxout[11][20] =    {{"out/menu_bg.bin"},
                                {"out/bootcfw.bin"},
                                {"out/bootofw.bin"},
                                {"out/options.bin"},
                                {"out/core.bin"},
                                {"out/autorcm.bin"},
                                {"out/nand.bin"},
                                {"out/emunand.bin"},
                                {"out/repair.bin"},
                                {"out/launch.bin"},
                                {"out/poweroff.bin"}};
   
int size_gfx[11] = {0x3c0000,0x40000,0x40000,0x40000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000};
int size_gfx_reso[11] = {0xC00,0x400,0x400,0x400,0x100,0x100,0x100,0x100,0x100,0x100,0x100};
int size_gfx_reso_bg = 0x1400;


int main()
{

    int count;
    mkdir("out",1);
    for(count=0; count<11; count++)
    {
        int i;
        int j;
        int x;
        int y;
        int z;
        int size_header;
        size_header = 0x8A;
        y = size_header;
       
        char *tmp_in;
        char *tmp_out;
       
        FILE * file_in;
        FILE * file_out;
       
        if((file_in = fopen(gfxin[count],"rb")) == NULL){printf("no file: %s \n", gfxin[count]); continue;}
        tmp_in = (char*)malloc(size_gfx[count]+size_header * sizeof(char));
        fread(tmp_in, size_gfx[count], 1, file_in);
        file_out = fopen(gfxout[count],"wb");
        tmp_out = (char*)malloc(size_gfx[count] * sizeof(char));
       
       
        if(count == 0)z = size_gfx_reso_bg;
        else z = size_gfx_reso[count];
       
        for(i = size_gfx[count]; i > size_header; i-=z)
        {
            for(x=0; x<z; x+=0x4){
                tmp_out[((i-z)+x)+0] = tmp_in[(y+x)+2];
                tmp_out[((i-z)+x)+1] = tmp_in[(y+x)+1];
                tmp_out[((i-z)+x)+2] = tmp_in[(y+x)+0];
                tmp_out[((i-z)+x)+3] = tmp_in[(y+x)+3];
            }
            y+=z;
        }
       
        fwrite(tmp_out, size_gfx[count], 1, file_out);
       
       
       
        fclose(file_out);
        fclose(file_in);
        free(tmp_in);
        free(tmp_out);
        //rename(gfxout[count],gfxout2[count]);
        printf("file convert succes : %s \n", gfxin[count]);
    }
    printf("success !!!\n");
   
}
 

Attachments

Last edited by Reacher17,
Code:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>

const char gfxin[11][20] = {{"menu_bg.bmp"},
{"bootcfw.bmp"},
{"bootofw.bmp"},
{"options.bmp"},
{"core.bmp"},
{"autorcm.bmp"},
{"nand.bmp"},
{"emunand.bmp"},
{"repair.bmp"},
{"launch.bmp"},
{"poweroff.bmp"}};

const char gfxout[11][20] =    {{"out/menu_bg.bin"},
{"out/bootcfw.bin"},
{"out/bootofw.bin"},
{"out/options.bin"},
{"out/core.bin"},
{"out/autorcm.bin"},
{"out/nand.bin"},
{"out/emunand.bin"},
{"out/repair.bin"},
{"out/launch.bin"},
{"out/poweroff.bin"}};

int size_gfx[11] = {0x3c0000,0x40000,0x40000,0x40000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000};
int size_gfx_reso[11] = {0xC00,0x400,0x400,0x400,0x100,0x100,0x100,0x100,0x100,0x100,0x100};
int size_gfx_reso_bg = 0x1400;

int main()
{

int count;
mkdir("out",1);
for(count=0; count<11; count++)
{
int i;
int j;
int x;
int y;
int z;
int size_header;

char *tmp_in;
char *tmp_out;

FILE * file_in;
FILE * file_out;

if((file_in = fopen(gfxin[count],"rb")) == NULL){printf("no file: %s \n", gfxin[count]); continue;}

int size;
fseek(file_in, 0, SEEK_END);
size = ftell(file_in);
fseek(file_in,0,SEEK_SET);

tmp_in = (char*)malloc(size * sizeof(char));

fread(tmp_in, size_gfx[count], 1, file_in);

size_header = tmp_in[0xa] & 0xff;

file_out = fopen(gfxout[count],"wb");
tmp_out = (char*)malloc(size_gfx[count] * sizeof(char));


if(count == 0)z = size_gfx_reso_bg;
else z = size_gfx_reso[count];
y = size_header;
for(i = size_gfx[count]; i > size_header; i-=z)
{
for(x=0; x<z; x+=0x4){
tmp_out[((i-z)+x)+0] = tmp_in[(y+x)+2];
tmp_out[((i-z)+x)+1] = tmp_in[(y+x)+1];
tmp_out[((i-z)+x)+2] = tmp_in[(y+x)+0];
tmp_out[((i-z)+x)+3] = tmp_in[(y+x)+3];
}
y+=z;
}

fwrite(tmp_out, size_gfx[count], 1, file_out);



fclose(file_out);
fclose(file_in);
free(tmp_in);
free(tmp_out);

printf("file convert succes : %s \n", gfxin[count]);
}
printf("success !!!\n");

}
 
Last edited by Reacher17,
  • Like
Reactions: chronoss
Sorry if my question is stupid. But, in the case that SX never updates again the CFW, could it be possible that someone could modify the cracked SX to work on OFW 12.x ?? I of course don´t know anything about how that works. Just a wild thought that crossed my mind, seeing that SX has been cracked. It would be very cool tho.

By the by, those splash screen and custom logos look pretty cool, great work.
 
  • Like
Reactions: chronoss
The super xci is working fine with sxos (v3.7 definitive edition + all dlc)
How do you create the Super XCI?
Are you using the version with the ID 00100BFE00E9CA00?

EDIT: At the end of moving so many games to .XCI, it ended up corrupting the base game of The Witcher. I also have problems with Smash Bros, it goes black and when you return to Home you see the exclamation icon of damaged data.

I think it would be better to go back to .NSZ and hope that one day SXOS supports NTFS or go to FAT32 which implies splitting the .XCI every 4GB.
 
Last edited by Naminave,

Site & Scene News

Popular threads in this forum