no message
This commit is contained in:
parent
f0d0cbddc4
commit
f211760752
437
app/main.c
437
app/main.c
|
@ -102,234 +102,247 @@ int CopyFile(char *src, char *dst)
|
||||||
|
|
||||||
int restore_act()
|
int restore_act()
|
||||||
{
|
{
|
||||||
printf("Activation Data not Found! 0x%x\nChecking for backup...",ret);
|
printf("Activation Data not Found!\nChecking for backup...");
|
||||||
int is_ux0 = getFileSize("ux0:/data/act.dat") > 0;
|
int is_ux0 = getFileSize("ux0:/data/act.dat") >= 0;
|
||||||
int is_pd0 = getFileSize("pd0:/data/act.dat") > 0;
|
int is_pd0 = getFileSize("pd0:/data/act.dat") >= 0;
|
||||||
|
|
||||||
if( is_ux0 || is_pd0 )
|
sceIoMkdir("tm0:/activate", 0777);
|
||||||
|
|
||||||
|
if( (is_ux0) || (is_pd0) )
|
||||||
{
|
{
|
||||||
printf("Activation Data backup found!\n");
|
printf("Activation Data backup found!\n");
|
||||||
printf("Press any key to restore (existing activation data will be overwritten)\n");
|
printf("Press any key to restore (existing activation data will be overwritten)\n");
|
||||||
get_key();
|
get_key();
|
||||||
if(is_ux0)
|
if(is_ux0)
|
||||||
{
|
{
|
||||||
CopyFile("ux0:/data/act.dat","tm0:/activate/act.dat");
|
CopyFile("ux0:/data/act.dat","tm0:/activate/act.dat");
|
||||||
CopyFile("ux0:/data/actsig.dat","tm0:/activate/actsig.dat");
|
CopyFile("ux0:/data/actsig.dat","tm0:/activate/actsig.dat");
|
||||||
CopyFile("ux0:/data/act.dat","tm0:/activate/act.dat");
|
CopyFile("ux0:/data/act.dat","tm0:/activate/act.dat");
|
||||||
ret = silRestoreNvsAct(0x1);
|
ret = silRestoreNvsAct(0x1);
|
||||||
}
|
}
|
||||||
else if(is_pd0)
|
else if(is_pd0)
|
||||||
{
|
{
|
||||||
|
|
||||||
CopyFile("pd0:/data/act.dat","tm0:/activate/act.dat");
|
CopyFile("pd0:/data/act.dat","tm0:/activate/act.dat");
|
||||||
CopyFile("pd0:/data/actsig.dat","tm0:/activate/actsig.dat");
|
CopyFile("pd0:/data/actsig.dat","tm0:/activate/actsig.dat");
|
||||||
CopyFile("pd0:/data/act.dat","tm0:/activate/act.dat");
|
CopyFile("pd0:/data/act.dat","tm0:/activate/act.dat");
|
||||||
ret = silRestoreNvsAct(0x0);
|
ret = silRestoreNvsAct(0x0);
|
||||||
}
|
}
|
||||||
// Check Success
|
|
||||||
if(ret <= -1)
|
// Check Success
|
||||||
{
|
if(ret <= -1)
|
||||||
printf("ksceSblNvsWriteData failed 0x%x",ret);
|
{
|
||||||
}
|
printf("ksceSblNvsWriteData failed 0x%x",ret);
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("Activation data restored!");
|
|
||||||
get_key();
|
|
||||||
sceKernelExitProcess(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("No backup data found.\n");
|
printf("Activation data restored!");
|
||||||
printf("if you have a backup of Activation Data please place it in ux0:/data\n\n");
|
|
||||||
printf(" - ux0:/data/act.dat\n");
|
|
||||||
printf(" - ux0:/data/actsig.dat\n");
|
|
||||||
printf(" - ux0:/data/act-nvs.dat\n");
|
|
||||||
|
|
||||||
get_key();
|
get_key();
|
||||||
sceKernelExitProcess(0);
|
sceKernelExitProcess(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("No backup data found.\n");
|
||||||
|
printf("if you have a backup of Activation Data please place it in ux0:/data\n\n");
|
||||||
|
printf(" - ux0:/data/act.dat\n");
|
||||||
|
printf(" - ux0:/data/actsig.dat\n");
|
||||||
|
printf(" - ux0:/data/act-nvs.dat\n");
|
||||||
|
|
||||||
|
get_key();
|
||||||
|
sceKernelExitProcess(0);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int backup_act()
|
||||||
|
{
|
||||||
|
printf("Backing up activation files...\n");
|
||||||
|
|
||||||
|
uint32_t buf[3];
|
||||||
|
buf[0] = 0x00;
|
||||||
|
buf[1] = 0x00;
|
||||||
|
buf[2] = 0x00;
|
||||||
|
|
||||||
|
vshIoUmount(0xC00, 0, 0, 0);
|
||||||
|
vshIoUmount(0xC00, 1, 0, 0);
|
||||||
|
_vshIoMount(0xC00, 0, 2, buf);
|
||||||
|
|
||||||
|
sceIoMkdir("ux0:/data", 0777);
|
||||||
|
sceIoMkdir("pd0:/data", 0777);
|
||||||
|
|
||||||
|
//backup actdat
|
||||||
|
CopyFile("tm0:/activate/act.dat","ux0:/data/act.dat");
|
||||||
|
CopyFile("tm0:/activate/act.dat","pd0:/data/act.dat");
|
||||||
|
|
||||||
|
//backup actsig
|
||||||
|
CopyFile("tm0:/activate/actsig.dat","ux0:/data/actsig.dat");
|
||||||
|
CopyFile("tm0:/activate/actsig.dat","pd0:/data/actsig.dat");
|
||||||
|
|
||||||
|
|
||||||
|
ret = silDumpNvsAct(0x0);
|
||||||
|
if (ret <= -1){
|
||||||
|
printf("ksceSblNvsReadData failed 0x%x\n",ret);
|
||||||
|
}
|
||||||
|
ret = silDumpNvsAct(0x1);
|
||||||
|
if (ret <= -1){
|
||||||
|
printf("ksceSblNvsReadData failed 0x%x\n",ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
vshIoUmount(0xC00, 0, 0, 0);
|
||||||
|
vshIoUmount(0xC00, 1, 0, 0);
|
||||||
|
_vshIoMount(0xC00, 0, 1, buf);
|
||||||
|
|
||||||
|
printf("Done, backup at pd0:/data and ux0:/data\n\nPLEASE KEEP THESE FILES SAFE!!!");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
|
||||||
psvDebugScreenInit();
|
psvDebugScreenInit();
|
||||||
|
|
||||||
|
if(vshSblAimgrIsCEX())
|
||||||
if(vshSblAimgrIsCEX())
|
{
|
||||||
{
|
printf("This is not a test/dev kit . . . \n");
|
||||||
printf("This is not a test/dev kit . . . \n");
|
get_key();
|
||||||
get_key();
|
sceKernelExitProcess(0);
|
||||||
sceKernelExitProcess(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
char kplugin_path[0x200];
|
|
||||||
memset(kplugin_path,0x00,0x200);
|
|
||||||
|
|
||||||
char uplugin_path[0x200];
|
|
||||||
memset(uplugin_path,0x00,0x200);
|
|
||||||
|
|
||||||
char titleid[12];
|
|
||||||
sceAppMgrUmount("app0:");
|
|
||||||
|
|
||||||
printf("Loading kmodule...");
|
|
||||||
|
|
||||||
sceAppMgrAppParamGetString(0, 12, titleid , 256);
|
|
||||||
sprintf(kplugin_path, "ux0:app/%s/kern_clockset.skprx", titleid);
|
|
||||||
int kernel_modid = 0;
|
|
||||||
kernel_modid = taiLoadStartKernelModule(kplugin_path, 0, NULL, 0);
|
|
||||||
|
|
||||||
|
|
||||||
if(kernel_modid <= 0 && kernel_modid != 0x8002d013 && kernel_modid != 0x8002d004)
|
|
||||||
{
|
|
||||||
printf("Error cannot load kern_clockset.skprx error 0x%x\n",kernel_modid);
|
|
||||||
get_key();
|
|
||||||
sceKernelExitProcess(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("OK\n");
|
|
||||||
|
|
||||||
printf("Loading umodule...");
|
|
||||||
|
|
||||||
sceAppMgrAppParamGetString(0, 12, titleid , 256);
|
|
||||||
sprintf(uplugin_path, "ux0:app/%s/user_clockset.suprx", titleid);
|
|
||||||
int user_modid = 0;
|
|
||||||
user_modid = sceKernelLoadStartModule(uplugin_path, 0, NULL, 0, NULL, NULL);
|
|
||||||
|
|
||||||
|
|
||||||
if(user_modid <= 0)
|
|
||||||
{
|
|
||||||
printf("Error cannot load user_clockset.suprx error 0x%x\n",user_modid);
|
|
||||||
get_key();
|
|
||||||
sceKernelExitProcess(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("OK\n");
|
|
||||||
|
|
||||||
printf("Finding expiration start date...");
|
|
||||||
|
|
||||||
unsigned char startDate[0x4];
|
|
||||||
fd = sceIoOpen("tm0:/activate/act.dat",SCE_O_RDONLY, 0444);
|
|
||||||
if(fd <= -1)
|
|
||||||
{
|
|
||||||
restore_act();
|
|
||||||
}
|
|
||||||
|
|
||||||
sceIoLseek(fd,0xC,SCE_SEEK_SET);
|
|
||||||
sceIoRead(fd,&startDate,0x04);
|
|
||||||
sceIoClose(fd);
|
|
||||||
|
|
||||||
fd = sceIoOpen("tm0:/activate/actsig.dat",SCE_O_RDONLY, 0444);
|
|
||||||
if(fd <= -1)
|
|
||||||
{
|
|
||||||
restore_act();
|
|
||||||
}
|
|
||||||
sceIoClose(fd);
|
|
||||||
|
|
||||||
printf(" found: 0x%02X%02X%02X%02X\n",startDate[0],startDate[1],startDate[2],startDate[3]);
|
|
||||||
printf("Backing up activation files...\n");
|
|
||||||
|
|
||||||
uint32_t buf[3];
|
|
||||||
buf[0] = 0x00;
|
|
||||||
buf[1] = 0x00;
|
|
||||||
buf[2] = 0x00;
|
|
||||||
|
|
||||||
vshIoUmount(0xC00, 0, 0, 0);
|
|
||||||
vshIoUmount(0xC00, 1, 0, 0);
|
|
||||||
_vshIoMount(0xC00, 0, 2, buf);
|
|
||||||
|
|
||||||
//backup actdat
|
|
||||||
CopyFile("tm0:/activate/act.dat","ux0:/data/act.dat");
|
|
||||||
CopyFile("tm0:/activate/act.dat","pd0:/data/act.dat");
|
|
||||||
|
|
||||||
//backup actsig
|
|
||||||
CopyFile("tm0:/activate/actsig.dat","ux0:/data/actsig.dat");
|
|
||||||
CopyFile("tm0:/activate/actsig.dat","pd0:/data/actsig.dat");
|
|
||||||
|
|
||||||
|
|
||||||
ret = silDumpNvsAct(0x0);
|
|
||||||
if (ret <= -1){
|
|
||||||
printf("ksceSblNvsReadData failed 0x%x\n",ret);
|
|
||||||
}
|
|
||||||
ret = silDumpNvsAct(0x1);
|
|
||||||
if (ret <= -1){
|
|
||||||
printf("ksceSblNvsReadData failed 0x%x\n",ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
vshIoUmount(0xC00, 0, 0, 0);
|
|
||||||
vshIoUmount(0xC00, 1, 0, 0);
|
|
||||||
_vshIoMount(0xC00, 0, 1, buf);
|
|
||||||
|
|
||||||
printf("Done, backup at pd0:/data and ux0:/data\n\nPLEASE KEEP THESE FILES SAFE!!!");
|
|
||||||
|
|
||||||
|
|
||||||
if(vshSblAimgrIsTool())
|
|
||||||
{
|
|
||||||
unsigned int timestamp = *((unsigned int*)&startDate);
|
|
||||||
printf("Updating CPRTC to %x\n",timestamp);
|
|
||||||
ret = silSblPostSsMgrSetCpRtc(timestamp);
|
|
||||||
sceRegMgrSetKeyInt("/CONFIG/DATE", "set_automatically", 0);
|
|
||||||
printf("has ret 0x%x\n",ret);
|
|
||||||
}
|
|
||||||
else if(vshSblAimgrIsDEX())
|
|
||||||
{
|
|
||||||
printf("Calculating PSTime: ");
|
|
||||||
unsigned int _startDate = *((unsigned int*)&startDate);
|
|
||||||
|
|
||||||
|
|
||||||
uint64_t timestamp = 0;
|
|
||||||
timestamp = ((_startDate * 1000) + 62135596800000) * 1000;
|
|
||||||
printf("PSTIME: %llx\n",timestamp);
|
|
||||||
|
|
||||||
if(_startDate < 1420070400);
|
|
||||||
{
|
|
||||||
printf("Warn: Start Date is Before 1/1/2015\n");
|
|
||||||
printf("It's impossible to set the time before 1/1/2015.\n");
|
|
||||||
printf("However i can cause an overflow when reading to make it *appear* as 1/1/2015\n");
|
|
||||||
printf("doing this will break trophy earning though.\n");
|
|
||||||
printf("\nPress any key to continue\n");
|
|
||||||
|
|
||||||
get_key();
|
|
||||||
timestamp = 0xFFEEDDCCBBAA9988ull;
|
|
||||||
//printf("NEW PSTIME: %llx\n",timestamp);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
printf("Creating splits..\n");
|
|
||||||
|
|
||||||
unsigned int split1 = timestamp >> 32;
|
|
||||||
unsigned int split2 = timestamp & 0xffffffff;
|
|
||||||
|
|
||||||
|
|
||||||
printf("Split1: %x\n",split1);
|
|
||||||
printf("Split2: %x\n",split2);
|
|
||||||
|
|
||||||
printf("Updating SecureTick.. ");
|
|
||||||
ret = silRtcSetCurrentSecureTick(split2,split1);
|
|
||||||
printf("has ret 0x%x\n",ret);
|
|
||||||
|
|
||||||
sceRegMgrSetKeyInt("/CONFIG/DATE", "set_automatically", 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(ret == 0)
|
|
||||||
{
|
|
||||||
printf("\n\nYour PSVITA Test/Dev Kit has been activated!\n");
|
|
||||||
printf("\n");
|
|
||||||
printf("Deactivate by holding START + SELECT + PS + POWER\n\n");
|
|
||||||
printf("Press any key to turn off console");
|
|
||||||
get_key();
|
|
||||||
scePowerRequestSuspend();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("Error: 0x%x\n",ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
get_key();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char kplugin_path[0x200];
|
||||||
|
memset(kplugin_path,0x00,0x200);
|
||||||
|
|
||||||
|
char uplugin_path[0x200];
|
||||||
|
memset(uplugin_path,0x00,0x200);
|
||||||
|
|
||||||
|
char titleid[12];
|
||||||
|
sceAppMgrUmount("app0:");
|
||||||
|
|
||||||
|
printf("Loading kmodule...");
|
||||||
|
|
||||||
|
sceAppMgrAppParamGetString(0, 12, titleid , 256);
|
||||||
|
sprintf(kplugin_path, "ux0:app/%s/kern_clockset.skprx", titleid);
|
||||||
|
int kernel_modid = 0;
|
||||||
|
kernel_modid = taiLoadStartKernelModule(kplugin_path, 0, NULL, 0);
|
||||||
|
|
||||||
|
|
||||||
|
if(kernel_modid <= 0 && kernel_modid != 0x8002d013 && kernel_modid != 0x8002d004)
|
||||||
|
{
|
||||||
|
printf("Error cannot load kern_clockset.skprx error 0x%x\n",kernel_modid);
|
||||||
|
get_key();
|
||||||
|
sceKernelExitProcess(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("OK\n");
|
||||||
|
|
||||||
|
printf("Loading umodule...");
|
||||||
|
|
||||||
|
sceAppMgrAppParamGetString(0, 12, titleid , 256);
|
||||||
|
sprintf(uplugin_path, "ux0:app/%s/user_clockset.suprx", titleid);
|
||||||
|
int user_modid = 0;
|
||||||
|
user_modid = sceKernelLoadStartModule(uplugin_path, 0, NULL, 0, NULL, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
if(user_modid <= 0)
|
||||||
|
{
|
||||||
|
printf("Error cannot load user_clockset.suprx error 0x%x\n",user_modid);
|
||||||
|
get_key();
|
||||||
|
sceKernelExitProcess(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("OK\n");
|
||||||
|
|
||||||
|
//Check act data exists
|
||||||
|
|
||||||
|
ret = getFileSize("tm0:/activate/act.dat");
|
||||||
|
if(ret <= -1)
|
||||||
|
{
|
||||||
|
restore_act();
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = getFileSize("tm0:/activate/actsig.dat");
|
||||||
|
if(ret <= -1)
|
||||||
|
{
|
||||||
|
restore_act();
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Finding expiration start date...");
|
||||||
|
|
||||||
|
unsigned char startDate[0x4];
|
||||||
|
fd = sceIoOpen("tm0:/activate/act.dat",SCE_O_RDONLY, 0444);
|
||||||
|
if(fd <= -1)
|
||||||
|
{
|
||||||
|
printf("Failed to read act.dat 0x%x",fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
sceIoLseek(fd,0xC,SCE_SEEK_SET);
|
||||||
|
sceIoRead(fd,&startDate,0x04);
|
||||||
|
sceIoClose(fd);
|
||||||
|
|
||||||
|
|
||||||
|
printf(" found: 0x%02X%02X%02X%02X\n",startDate[0],startDate[1],startDate[2],startDate[3]);
|
||||||
|
backup_act();
|
||||||
|
|
||||||
|
if(vshSblAimgrIsTool())
|
||||||
|
{
|
||||||
|
unsigned int timestamp = *((unsigned int*)&startDate);
|
||||||
|
printf("Updating CPRTC to %x\n",timestamp);
|
||||||
|
ret = silSblPostSsMgrSetCpRtc(timestamp);
|
||||||
|
sceRegMgrSetKeyInt("/CONFIG/DATE", "set_automatically", 0);
|
||||||
|
printf("has ret 0x%x\n",ret);
|
||||||
|
}
|
||||||
|
else if(vshSblAimgrIsDEX())
|
||||||
|
{
|
||||||
|
printf("Calculating PSTime: ");
|
||||||
|
unsigned int _startDate = *((unsigned int*)&startDate);
|
||||||
|
|
||||||
|
uint64_t timestamp = 0;
|
||||||
|
timestamp = ((_startDate * 1000) + 62135596800000) * 1000;
|
||||||
|
printf("PSTIME: %llx\n",timestamp);
|
||||||
|
|
||||||
|
if(_startDate < 1420070400);
|
||||||
|
{
|
||||||
|
printf("Warn: Start Date is Before 1/1/2015\n");
|
||||||
|
printf("It's impossible to set the time before 1/1/2015.\n");
|
||||||
|
printf("However i can cause an overflow when reading to make it *appear* as 1/1/2015\n");
|
||||||
|
printf("doing this will break trophy earning though.\n");
|
||||||
|
printf("\nPress any key to continue\n");
|
||||||
|
|
||||||
|
get_key();
|
||||||
|
timestamp = 0xFFEEDDCCBBAA9988ull;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Creating splits..\n");
|
||||||
|
|
||||||
|
unsigned int split1 = timestamp >> 32;
|
||||||
|
unsigned int split2 = timestamp & 0xffffffff;
|
||||||
|
|
||||||
|
|
||||||
|
printf("Split1: %x\n",split1);
|
||||||
|
printf("Split2: %x\n",split2);
|
||||||
|
|
||||||
|
printf("Updating SecureTick.. ");
|
||||||
|
ret = silRtcSetCurrentSecureTick(split2,split1);
|
||||||
|
printf("has ret 0x%x\n",ret);
|
||||||
|
|
||||||
|
sceRegMgrSetKeyInt("/CONFIG/DATE", "set_automatically", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(ret == 0)
|
||||||
|
{
|
||||||
|
printf("\n\nYour PSVITA Test/Dev Kit has been activated!\n");
|
||||||
|
printf("\n");
|
||||||
|
printf("Deactivate by holding START + SELECT + PS + POWER\n\n");
|
||||||
|
printf("Press any key to turn off console");
|
||||||
|
get_key();
|
||||||
|
scePowerRequestSuspend();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Error: 0x%x\n",ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
get_key();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue