diff --git a/app/main.c b/app/main.c index 1b42df9..88457a6 100644 --- a/app/main.c +++ b/app/main.c @@ -102,234 +102,247 @@ int CopyFile(char *src, char *dst) int restore_act() { - printf("Activation Data not Found! 0x%x\nChecking for backup...",ret); - int is_ux0 = getFileSize("ux0:/data/act.dat") > 0; - int is_pd0 = getFileSize("pd0:/data/act.dat") > 0; + printf("Activation Data not Found!\nChecking for backup..."); + int is_ux0 = getFileSize("ux0:/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("Press any key to restore (existing activation data will be overwritten)\n"); get_key(); - if(is_ux0) - { - CopyFile("ux0:/data/act.dat","tm0:/activate/act.dat"); - CopyFile("ux0:/data/actsig.dat","tm0:/activate/actsig.dat"); - CopyFile("ux0:/data/act.dat","tm0:/activate/act.dat"); - ret = silRestoreNvsAct(0x1); - } - else if(is_pd0) - { - - CopyFile("pd0:/data/act.dat","tm0:/activate/act.dat"); - CopyFile("pd0:/data/actsig.dat","tm0:/activate/actsig.dat"); - CopyFile("pd0:/data/act.dat","tm0:/activate/act.dat"); - ret = silRestoreNvsAct(0x0); - } - // Check Success - if(ret <= -1) - { - printf("ksceSblNvsWriteData failed 0x%x",ret); - } - else - { - printf("Activation data restored!"); - get_key(); - sceKernelExitProcess(0); - } + if(is_ux0) + { + CopyFile("ux0:/data/act.dat","tm0:/activate/act.dat"); + CopyFile("ux0:/data/actsig.dat","tm0:/activate/actsig.dat"); + CopyFile("ux0:/data/act.dat","tm0:/activate/act.dat"); + ret = silRestoreNvsAct(0x1); + } + else if(is_pd0) + { + + CopyFile("pd0:/data/act.dat","tm0:/activate/act.dat"); + CopyFile("pd0:/data/actsig.dat","tm0:/activate/actsig.dat"); + CopyFile("pd0:/data/act.dat","tm0:/activate/act.dat"); + ret = silRestoreNvsAct(0x0); + } + + // Check Success + if(ret <= -1) + { + printf("ksceSblNvsWriteData failed 0x%x",ret); } 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"); - + printf("Activation data restored!"); get_key(); 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; } +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() { - psvDebugScreenInit(); - - - if(vshSblAimgrIsCEX()) - { - printf("This is not a test/dev kit . . . \n"); - get_key(); - 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(); + psvDebugScreenInit(); + + if(vshSblAimgrIsCEX()) + { + printf("This is not a test/dev kit . . . \n"); + get_key(); + 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"); + + //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(); +}