Hacking Vita Downgrade?

FaithWaith

New Member
Newbie
Joined
Nov 21, 2016
Messages
2
Trophies
0
Age
21
XP
51
Country
United States
thank you

--------------------- MERGED ---------------------------

i dont think downgrading is nessesarily possible
though..
but the update for HENkaku will come to 3.61 and 3.63

SOMEDAY...
someday
 

satan89

Well-Known Member
Member
Joined
Jan 30, 2014
Messages
424
Trophies
0
Location
Limbo
XP
805
Country
India
thank you

--------------------- MERGED ---------------------------

i dont think downgrading is nessesarily possible
though..
but the update for HENkaku will come to 3.61 and 3.63

SOMEDAY...
someday

Nobody is working on it (publicly) and I don't think anyone would waste an exploit this early even if they found one. Currently, new boxed vitas still ship with 3.60 and there are too few games requiring 3.61 and above so releasing an exploit that takes weeks of work finding and reversing is not justified as yet. Anybody on 3.61 should look for a used 3.60 or lower, they're dirt cheap most places, or even buy a boxed set if they're picky about buying used.

The only people who are missing out are those very new to hacking scene since people have been telling not to upgrade Vita firmware way before HENkaku, I think it started back with the PSP scene.
 
  • Like
Reactions: Tony_93

Tom Bombadildo

Dick, With Balls
Member
Joined
Jul 11, 2009
Messages
14,580
Trophies
2
Age
29
Location
I forgot
Website
POCKET.LIKEITS
XP
19,248
Country
United States
Why isn't vita downgrade available? What's the issue of its not being done?
There are multiple reasons why. The main one is that a downgrade would mainly require extensive kernel access which, at that point, would already allow Henkaku-levels of access to system. This would make a downgrade effectively useless, because we'd gain nothing from degrading as we already have the same or greater access on the newer firmware.

It's also suggested that the Vita's NAND encryption is device specific, meaning that unless you have a way to generate your Vita's specific encryption key (unlikely) or you have a previous NAND backup from your Vita, you wouldn't be able to just download a NAND backup from anywhere and install it no problem. It's also suggested that downgrading the NAND would require a hardmod as well, making it unavailable to people without extensive hardware modification experience. At that point, it'd simply be easier (and likely cheaper) to buy a replacement Vita motherboard that's easy to swap out than it would be to potentially ruin your system with a difficult hardmod.
 

DinohScene

Gay twink catboy
Global Moderator
Joined
Oct 11, 2011
Messages
22,552
Trophies
4
Location
Восторг
XP
22,808
Country
Antarctica
There are multiple reasons why. The main one is that a downgrade would mainly require extensive kernel access which, at that point, would already allow Henkaku-levels of access to system. This would make a downgrade effectively useless, because we'd gain nothing from degrading as we already have the same or greater access on the newer firmware.

It's also suggested that the Vita's NAND encryption is device specific, meaning that unless you have a way to generate your Vita's specific encryption key (unlikely) or you have a previous NAND backup from your Vita, you wouldn't be able to just download a NAND backup from anywhere and install it no problem. It's also suggested that downgrading the NAND would require a hardmod as well, making it unavailable to people without extensive hardware modification experience. At that point, it'd simply be easier (and likely cheaper) to buy a replacement Vita motherboard that's easy to swap out than it would be to potentially ruin your system with a difficult hardmod.

I should add that soldering NAND access wires to a Vita isn't that easy, let alone soldering anything to a Vita.
The points are incredibly tiny and unless you've got some impressive soldering skills, the chances of fucking it up is tremendous.

Like Tom suggested, the cheapest and easiest way to downgrade a Vita is to swap motherboards.
 

t0m_o4

New Member
Newbie
Joined
Feb 13, 2018
Messages
1
Trophies
0
Age
33
XP
51
Country
United Kingdom
Hi, is it possible to downgrade a ps vita by switching out the motherboard for one with a lower firmware????
 

Gnarmagon

Noob <3
Member
Joined
Dec 12, 2016
Messages
647
Trophies
0
Age
22
XP
794
Country
Germany
It's possible to downgrade from 3.60 to anything below that but I have no PSVita's to brick nor do I have the money or skills to install a NAND Mod with a microscope XD

https://wiki.henkaku.xyz/vita/index.php?title=Updater&mobileaction=toggle_view_mobile

int start_decryption1(int code1, unsigned char * buf, int buflen, int code2, int * phandle) {
int argst[11];
int res;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[1]=code1;
argst[2]=(int)buf;
argst[3]=buflen;
argst[4]=code2;
sceClibPrintf("Calling type 1 decryption with code1 = 0x%x buf = 0x%x buflen = 0x%x code2 = 0x%x
", code1, (int) buf, buflen, code2);
res=callKernelFunction(SceSblSsUpdateMgr_0x6E8DDAC4,code1,argst,phandle,0 );
return res;
}

int start_decryption2(int code1, unsigned char * buf, int buflen, int code2, int * phandle) {
int argst[11];
int res;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[1]=code1;
argst[2]=(int)buf;
argst[3]=buflen;
argst[4]=code2;
sceClibPrintf("Calling type 2 decryption with code1 = 0x%x buf = 0x%x buflen = 0x%x code2 = 0x%x
", code1, (int) buf, buflen, code2);
res=callKernelFunction(SceSblSsUpdateMgr_0x1A39F6EE,code1,argst,phandle,0 );
return res;
}

int start_decryption3(int code1, unsigned char * buf, int buflen, int code2, int * phandle) {
int argst[11];
int res;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[1]=code1;
argst[2]=(int)buf;
argst[3]=buflen;
argst[4]=code2;
sceClibPrintf("Calling type 3 decryption with code1 = 0x%x buf = 0x%x buflen = 0x%x code2 = 0x%x
", code1, (int) buf, buflen, code2);
res=callKernelFunction(SceSblSsUpdateMgr_0xC1792A1C,code1,argst,phandle,0 );
return res;
}

int check_decryption_status(int code,int handle,int * out1, int * out2, int * out3, int * out4) {
int argst[11];
int res;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[7]=(int)out1;
argst[8]=(int)out2;
argst[9]=(int)out3;
argst[10]=(int)out4;
sceClibPrintf("Calling status with code = 0x%x handle = 0x%x
", code, handle);
res=callKernelFunction(SceSblSsUpdateMgr_0xF403143E,code,handle,argst,0);
return res;
}
int get_final_size(unsigned char * buf) {
int * poffs;
int * psize;
poffs = (int *) (buf+0x10);
psize = (int *) (buf+(*poffs)+0x20);
return *psize;
}
int get_type(unsigned char * buf) {
int * poffs;
int * psize;
if ( *(int *)buf == 0x00454353 )
{
poffs = (int *) (buf+0x10);
psize = (int *) (buf+(*poffs)+4);
return *psize;
}
else
{
return -1;
}
}
unsigned char * get_data_offset(unsigned char * buf) {
int * poffs;
poffs = (int *) (buf+0x10);
return (buf+(*poffs)+0x80);

}

int complete_decryption(int code, int handle, unsigned char * buf, int maxlen) {
int argst[11];
int res;
unsigned char * payload;
int size;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[1]=code;
argst[5]=(int)buf;
argst[6]=maxlen;
sceClibPrintf("Calling complete decryption with code = 0x%x handle = 0x%x buf = 0x%x maxlen = 0x%x
", code, handle, (int) buf, maxlen);
res=callKernelFunction(SceSblSsUpdateMgr_0x4897AD56,code,handle,argst,0);
return res;
}

int
do_decrypt_file (const char *inpath, const char *outpath, const char *errpath, unsigned int size)
{
int fd;
int res;
int memid;
int read;
int maxlen=0x810000;
int argst[0x2c/4];
int id;
int type;
int code;
unsigned char * src, *outbuf;
unsigned int handle, p1,p2,p3,p4;
res=callKernelFunction(SceSblSsUpdateMgr_0x4C06F41C,size,&src,0,0);
sceClibPrintf("Allocation returned 0x%x addr 0x%x
", res, (int)src);
if(res) {
sceClibPrintf("Cannot allocate memory. (size 0x%x) fail.
", size);
return 0;
}
//sceClibPrintf("Loading Firmware pkg file from host0:");
fd= sceIoOpen(inpath,1,0);
read = 0;
while ((read = sceIoRead(fd,src,size-read)) > 0);
sceIoClose(fd);
code = get_type(src);
switch (code) {
case -1:
sceClibPrintf("Not an encrypted file.
");
goto ERROR;
case 3:
case 4:
case 0x1B:
type = 3;
res=start_decryption3(code,src,size,9,&handle);
break;
case 0:
case 2:
case 5:
case 6:
case 7:
case 0xE:
case 0x1A:
sceClibPrintf("Warning, code %x is unsupported!
", code);
default:
type = 2;
res=start_decryption2(code,src,size,9,&handle);
break;
}
if(res) {
sceClibPrintf("start_decryption failed. (0x%x)
", res);
goto ERROR;
}
for(;;) {
res=check_decryption_status(type,handle,&p1,&p2,&p3,&p4);
if(res) {
sceClibPrintf("check_decryption_status failed. (0x%x)
", res);
goto ERROR;
}
if(p3 == 5) {
break;
} else {
sceKernelDelayThread(0x7A120);
}
}
sceClibPrintf("p1= 0x%x p2 = 0x%x p3 = 0x%x p4 = 0x%x
", p1,p2,p3,p4);
if(p2 == 0) {
sceClibPrintf("Starting to write %s
", outpath);
fd= sceIoOpen(outpath,0x603,0x186);
read = get_final_size(src);
while ((read -= sceIoWrite(fd,get_data_offset(src),read)) > 0);
sceIoClose(fd);
} else {
sceClibPrintf("Error decrypting. Writing results to %s
", errpath);
fd= sceIoOpen(errpath,0x603,0x186);
read = get_final_size(src);
while ((read -= sceIoWrite(fd,get_data_offset(src),read)) > 0);
sceIoClose(fd);
goto ERROR;
}

res=complete_decryption(type,handle,src,maxlen);
if(res) {
sceClibPrintf("complete_decryption failed. (0x%x)
", res);
goto ERROR;
}

res=callKernelFunction(SceSblSsUpdateMgr_0xBD677F5A,src,0,0,0);
return 1;
ERROR:
res=callKernelFunction(SceSblSsUpdateMgr_0xBD677F5A,src,0,0,0);
return 0;
}

void
do_decrypt_dir (const char *path)
{
int fd;
SceIoDirent dir;
char input[256];
char output[256];
char errput[256];

if ((fd = sceIoDopen(path)) < 0)
{
sceClibPrintf("Error opening pkg dir.
");
return;
}

while (sceIoDread(fd, &dir) > 0)
{
sprintf(input, "%s/%s", path, dir.d_name);
sprintf(output, "%s/%s.dec", path, dir.d_name);
sprintf(errput, "%s/%s.err", path, dir.d_name);
sceClibPrintf("Decrypting %s (size 0x%x)
", input, (unsigned int)dir.d_stat.st_size);
if (do_decrypt_file(input, output, errput, (unsigned int)dir.d_stat.st_size))
sceClibPrintf("Decrypted to %s
", output);
else
sceClibPrintf("Failed to decrypt %s
", dir.d_name);
}

sceIoDclose(fd);
}

--------------------- MERGED ---------------------------

Hi, is it possible to downgrade a ps vita by switching out the motherboard for one with a lower firmware????
yes, did it myself XD because I bricked the original one
 
  • Like
Reactions: Deleted User

SKGleba

O ja pierdole!
Member
Joined
Nov 11, 2016
Messages
351
Trophies
0
Location
Warsaw
XP
747
Country
Poland
It's possible to downgrade from 3.60 to anything below that but I have no PSVita's to brick nor do I have the money or skills to install a NAND Mod with a microscope XD

https://wiki.henkaku.xyz/vita/index.php?title=Updater&mobileaction=toggle_view_mobile

int start_decryption1(int code1, unsigned char * buf, int buflen, int code2, int * phandle) {
int argst[11];
int res;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[1]=code1;
argst[2]=(int)buf;
argst[3]=buflen;
argst[4]=code2;
sceClibPrintf("Calling type 1 decryption with code1 = 0x%x buf = 0x%x buflen = 0x%x code2 = 0x%x
", code1, (int) buf, buflen, code2);
res=callKernelFunction(SceSblSsUpdateMgr_0x6E8DDAC4,code1,argst,phandle,0 );
return res;
}

int start_decryption2(int code1, unsigned char * buf, int buflen, int code2, int * phandle) {
int argst[11];
int res;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[1]=code1;
argst[2]=(int)buf;
argst[3]=buflen;
argst[4]=code2;
sceClibPrintf("Calling type 2 decryption with code1 = 0x%x buf = 0x%x buflen = 0x%x code2 = 0x%x
", code1, (int) buf, buflen, code2);
res=callKernelFunction(SceSblSsUpdateMgr_0x1A39F6EE,code1,argst,phandle,0 );
return res;
}

int start_decryption3(int code1, unsigned char * buf, int buflen, int code2, int * phandle) {
int argst[11];
int res;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[1]=code1;
argst[2]=(int)buf;
argst[3]=buflen;
argst[4]=code2;
sceClibPrintf("Calling type 3 decryption with code1 = 0x%x buf = 0x%x buflen = 0x%x code2 = 0x%x
", code1, (int) buf, buflen, code2);
res=callKernelFunction(SceSblSsUpdateMgr_0xC1792A1C,code1,argst,phandle,0 );
return res;
}

int check_decryption_status(int code,int handle,int * out1, int * out2, int * out3, int * out4) {
int argst[11];
int res;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[7]=(int)out1;
argst[8]=(int)out2;
argst[9]=(int)out3;
argst[10]=(int)out4;
sceClibPrintf("Calling status with code = 0x%x handle = 0x%x
", code, handle);
res=callKernelFunction(SceSblSsUpdateMgr_0xF403143E,code,handle,argst,0);
return res;
}
int get_final_size(unsigned char * buf) {
int * poffs;
int * psize;
poffs = (int *) (buf+0x10);
psize = (int *) (buf+(*poffs)+0x20);
return *psize;
}
int get_type(unsigned char * buf) {
int * poffs;
int * psize;
if ( *(int *)buf == 0x00454353 )
{
poffs = (int *) (buf+0x10);
psize = (int *) (buf+(*poffs)+4);
return *psize;
}
else
{
return -1;
}
}
unsigned char * get_data_offset(unsigned char * buf) {
int * poffs;
poffs = (int *) (buf+0x10);
return (buf+(*poffs)+0x80);

}

int complete_decryption(int code, int handle, unsigned char * buf, int maxlen) {
int argst[11];
int res;
unsigned char * payload;
int size;

memset(argst,0,0x2c);
argst[0]=0x2c;
argst[1]=code;
argst[5]=(int)buf;
argst[6]=maxlen;
sceClibPrintf("Calling complete decryption with code = 0x%x handle = 0x%x buf = 0x%x maxlen = 0x%x
", code, handle, (int) buf, maxlen);
res=callKernelFunction(SceSblSsUpdateMgr_0x4897AD56,code,handle,argst,0);
return res;
}

int
do_decrypt_file (const char *inpath, const char *outpath, const char *errpath, unsigned int size)
{
int fd;
int res;
int memid;
int read;
int maxlen=0x810000;
int argst[0x2c/4];
int id;
int type;
int code;
unsigned char * src, *outbuf;
unsigned int handle, p1,p2,p3,p4;
res=callKernelFunction(SceSblSsUpdateMgr_0x4C06F41C,size,&src,0,0);
sceClibPrintf("Allocation returned 0x%x addr 0x%x
", res, (int)src);
if(res) {
sceClibPrintf("Cannot allocate memory. (size 0x%x) fail.
", size);
return 0;
}
//sceClibPrintf("Loading Firmware pkg file from host0:");
fd= sceIoOpen(inpath,1,0);
read = 0;
while ((read = sceIoRead(fd,src,size-read)) > 0);
sceIoClose(fd);
code = get_type(src);
switch (code) {
case -1:
sceClibPrintf("Not an encrypted file.
");
goto ERROR;
case 3:
case 4:
case 0x1B:
type = 3;
res=start_decryption3(code,src,size,9,&handle);
break;
case 0:
case 2:
case 5:
case 6:
case 7:
case 0xE:
case 0x1A:
sceClibPrintf("Warning, code %x is unsupported!
", code);
default:
type = 2;
res=start_decryption2(code,src,size,9,&handle);
break;
}
if(res) {
sceClibPrintf("start_decryption failed. (0x%x)
", res);
goto ERROR;
}
for(;;) {
res=check_decryption_status(type,handle,&p1,&p2,&p3,&p4);
if(res) {
sceClibPrintf("check_decryption_status failed. (0x%x)
", res);
goto ERROR;
}
if(p3 == 5) {
break;
} else {
sceKernelDelayThread(0x7A120);
}
}
sceClibPrintf("p1= 0x%x p2 = 0x%x p3 = 0x%x p4 = 0x%x
", p1,p2,p3,p4);
if(p2 == 0) {
sceClibPrintf("Starting to write %s
", outpath);
fd= sceIoOpen(outpath,0x603,0x186);
read = get_final_size(src);
while ((read -= sceIoWrite(fd,get_data_offset(src),read)) > 0);
sceIoClose(fd);
} else {
sceClibPrintf("Error decrypting. Writing results to %s
", errpath);
fd= sceIoOpen(errpath,0x603,0x186);
read = get_final_size(src);
while ((read -= sceIoWrite(fd,get_data_offset(src),read)) > 0);
sceIoClose(fd);
goto ERROR;
}

res=complete_decryption(type,handle,src,maxlen);
if(res) {
sceClibPrintf("complete_decryption failed. (0x%x)
", res);
goto ERROR;
}

res=callKernelFunction(SceSblSsUpdateMgr_0xBD677F5A,src,0,0,0);
return 1;
ERROR:
res=callKernelFunction(SceSblSsUpdateMgr_0xBD677F5A,src,0,0,0);
return 0;
}

void
do_decrypt_dir (const char *path)
{
int fd;
SceIoDirent dir;
char input[256];
char output[256];
char errput[256];

if ((fd = sceIoDopen(path)) < 0)
{
sceClibPrintf("Error opening pkg dir.
");
return;
}

while (sceIoDread(fd, &dir) > 0)
{
sprintf(input, "%s/%s", path, dir.d_name);
sprintf(output, "%s/%s.dec", path, dir.d_name);
sprintf(errput, "%s/%s.err", path, dir.d_name);
sceClibPrintf("Decrypting %s (size 0x%x)
", input, (unsigned int)dir.d_stat.st_size);
if (do_decrypt_file(input, output, errput, (unsigned int)dir.d_stat.st_size))
sceClibPrintf("Decrypted to %s
", output);
else
sceClibPrintf("Failed to decrypt %s
", dir.d_name);
}

sceIoDclose(fd);
}

--------------------- MERGED ---------------------------


yes, did it myself XD because I bricked the original one
As i told you on discord , it is NOT possible to downgrade, at least not without a f00d hakk.
Flashing old NAND dump == brick.
Using the code you provided - fail at keys flashing& syscon ver flashing which results in a brick.
Ofc you may try to do whatever you want with this, but you have been warned what may (will) happen.
 
  • Like
Reactions: Deleted User
D

Deleted User

Guest
>no 3.61+ being worked on
id beg to differ
how else would daddy gleba get 3.67 files?

--------------------- MERGED ---------------------------

Hi, is it possible to downgrade a ps vita by switching out the motherboard for one with a lower firmware????
that's because the motherboard is pretty much the whole system...
 

Gnarmagon

Noob <3
Member
Joined
Dec 12, 2016
Messages
647
Trophies
0
Age
22
XP
794
Country
Germany
As i told you on discord , it is NOT possible to downgrade, at least not without a f00d hakk.
Flashing old NAND dump == brick.
Using the code you provided - fail at keys flashing& syscon ver flashing which results in a brick.
Ofc you may try to do whatever you want with this, but you have been warned what may (will) happen.
well, the post was created before I wrote about this on Discord ......, would have been too easy if you could downgrade without f00d XD
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • BigOnYa @ BigOnYa:
    I don't trust the free ones, but ipvanish I've used for couple years now, n like
  • Psionic Roshambo @ Psionic Roshambo:
    I wonder if they could get CPUs to run that hot then use the heat to power a steam turbine to power the CPUs....
  • BigOnYa @ BigOnYa:
    Good idea, or at least power the GPU
  • Psionic Roshambo @ Psionic Roshambo:
    It's not the movies or games downloads that I would worry about, like breaking into networks, downloading encrypted things, spying on network traffic. I have seen so many "Top Secret" seals on files when I was a kid
  • Psionic Roshambo @ Psionic Roshambo:
    I was obsessed with finding UFOs, a surprising amount of US files where stashed on computers in other countries, China back in the early 90s omg sooo much
  • BigOnYa @ BigOnYa:
    Yea that crazy, I've never tried hack into anything, I just pirate, and my ISP have send me 3-4 letters, so had to VPN it
  • Psionic Roshambo @ Psionic Roshambo:
    Ship to ship communication software for the Navy although without access to the encrypting chips it was mostly useless
  • Psionic Roshambo @ Psionic Roshambo:
    I bet now a 4090 could probably crack it? Hmmm maybe not even back then I'm pretty sure they where using like 1024 bit encryption
  • Psionic Roshambo @ Psionic Roshambo:
    Yayyy the one set finished 324GBs lol
  • Psionic Roshambo @ Psionic Roshambo:
    Compressed....
  • Psionic Roshambo @ Psionic Roshambo:
    I wonder how many years that would have taken on a 56K modem lol
  • Psionic Roshambo @ Psionic Roshambo:
    18000 hours lol
  • Psionic Roshambo @ Psionic Roshambo:
    750 days lol
    +1
  • Psionic Roshambo @ Psionic Roshambo:
    So Internet is very much faster now lol
  • BigOnYa @ BigOnYa:
    "Time Remaining- 2 years, 9 girlfriends, 6 hairstyles, please standby..."
    +1
  • Psionic Roshambo @ Psionic Roshambo:
    I remember one time I downloaded like a 500MB ISO file on 56K and that literally took like 2 days
  • Psionic Roshambo @ Psionic Roshambo:
    I had some sort of resume thing, I remember the software had chains
  • Psionic Roshambo @ Psionic Roshambo:
    Damned if I can't remember.the name though
  • Psionic Roshambo @ Psionic Roshambo:
    Some sort of download management app
  • BigOnYa @ BigOnYa:
    Ok good chatting, I'm off to the bar, to shoot some pool, nighty night.
    +1
  • BakerMan @ BakerMan:
    hey psi
  • BakerMan @ BakerMan:
    i call your girl lyndon the way she b on my johnson
    BakerMan @ BakerMan: i call your girl lyndon the way she b on my johnson