From 7b0b83c1cc3150c7529ec881dd831f19a2576135 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sat, 21 Aug 2021 18:49:39 +1200 Subject: [PATCH] Update code --- app/CMakeLists.txt | 2 +- app/main.c | 62 ++++++++++++++++++++++++++--------------- app/rtcUserBridge.h | 4 ++- app/sce_sys/icon0.png | Bin 2202 -> 1447 bytes kern/CMakeLists.txt | 1 + kern/exports.yml | 4 ++- kern/kern_clockset.c | 50 ++++++++++++++++++++++++++++----- kern/rtcKernelBridge.h | 4 ++- user/exports.yml | 4 ++- user/rtcKernelBridge.h | 4 ++- user/user_clockset.c | 9 ++++++ 11 files changed, 108 insertions(+), 36 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index df54a2a..9ff6aa5 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -16,6 +16,7 @@ add_executable(${PROJECT_NAME}.elf ) target_link_libraries(${PROJECT_NAME}.elf + user_clockset_stub_weak SceDisplay_stub SceCtrl_stub SceVshBridge_stub @@ -24,7 +25,6 @@ target_link_libraries(${PROJECT_NAME}.elf ScePower_stub SceRegistryMgr_stub taihen_stub - user_clockset_stub_weak ) add_custom_target(${PROJECT_NAME}.vpk ALL diff --git a/app/main.c b/app/main.c index 41ad882..14dbdd6 100644 --- a/app/main.c +++ b/app/main.c @@ -12,8 +12,10 @@ #define printf psvDebugScreenPrintf -int ret; -SceUID fd; + +int ret = 0x00; +SceUID fd = 0x00; +int backup_pd0 = 0x00; int get_key(void) { static unsigned buttons[] = { @@ -155,46 +157,53 @@ int restore_act() 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); + if(backup_pd0){ + silIoUmount(0xC00, 0); + silIoMount(0xC00, 2); + } sceIoMkdir("ux0:/data", 0777); - sceIoMkdir("pd0:/data", 0777); + if(backup_pd0) + sceIoMkdir("pd0:/data", 0777); //backup actdat CopyFile("tm0:/activate/act.dat","ux0:/data/act.dat"); - CopyFile("tm0:/activate/act.dat","pd0:/data/act.dat"); + if(backup_pd0) + 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"); + if(backup_pd0) + CopyFile("tm0:/activate/actsig.dat","pd0:/data/actsig.dat"); - - ret = silDumpNvsAct(0x0); - if (ret <= -1){ - printf("ksceSblNvsReadData failed 0x%x\n",ret); + if(backup_pd0) + { + 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\nPLEASE KEEP THESE FILES SAFE!!!\n\n"); + if(backup_pd0) + { + silIoUmount(0xC00, 0); + silIoMount(0xC00, 1); + } + printf("Done, backup at "); + if(backup_pd0) + printf("pd0:/data and "); + printf("ux0:/data\nPLEASE KEEP THESE FILES SAFE!!!\n\n"); return ret; } @@ -282,6 +291,13 @@ void main() { sceIoClose(fd); printf(" found: %x\n",startDate); + printf("\n\nWould you like to backup activation data to pd0:/data\nThis area is Read-Only and is not touched by system updates\nso it would be very hard to accidentally remove it\nX: Yes Backup to pd0:/data\nO: No just backup to ux0:/data\n"); + + int button = get_key(); + if(button == SCE_CTRL_CROSS) + backup_pd0 = 1; + else + backup_pd0 = 0; backup_act(); @@ -308,7 +324,7 @@ void main() { printf("\nPress any key to continue\n"); get_key(); - timestamp = 0xFFEEDDCCBBAA9988ull; + timestamp += 0xAFEE8AFE9EEEF1FFull; // a really big number. } diff --git a/app/rtcUserBridge.h b/app/rtcUserBridge.h index 87b5deb..4dab7f3 100644 --- a/app/rtcUserBridge.h +++ b/app/rtcUserBridge.h @@ -3,4 +3,6 @@ int silRtcSetCurrentNetworkTick(unsigned int timestamp1, unsigned int timestamp2 int silRtcSetCurrentSecureTick(unsigned int timestamp1, unsigned int timestamp2); int silSblPostSsMgrSetCpRtc(unsigned int timestamp); int silDumpNvsAct(unsigned int fileno); -int silRestoreNvsAct(unsigned int fileno); \ No newline at end of file +int silRestoreNvsAct(unsigned int fileno); +int silIoMount(int id, int permission); +int silIoUmount(int id, int force); \ No newline at end of file diff --git a/app/sce_sys/icon0.png b/app/sce_sys/icon0.png index 140b9369dcdd429141f4f9a925d8df9806d47a46..ac7909e24973fc7e5bbef5ea8533d751f721ee2d 100644 GIT binary patch delta 1183 zcmbOwxSV@}3KwH>kh>GZx^prwCn^fpp9$~@ab;j&;NjuX)YLRLH+OJwu(P$*)z!7L zvkeRg$jeE~Oiz@SmJSRIEGjChudi=tXsEBREzC>z@pcmw6pW4x_4IJ9uPJP9C{0UA zNQ{qdYHI4~>FMt7ZfR+0Y;2r5b?X2B|7Xpb)!N#6`}XZCSFTK%GG)@FNi$~5xN)QY zMrUVdM@Pr?>(|@b+WPzZr%#{$>({T}zkhdibzQh{;nJl`g?VY$u3hWx?LBwyoR7DA zd0FB4^XDf{oOt!>RbOwn$&)7+7UXED$%Tf7*49*+nizKejkW-Kh_k>WvY3H^?=T26 z9?xHq!oa{dH8UilB*NFnDmgz_FEJ%Q$uU*0BDVmjoPoi{zM>#8IXksPAt^OIGtXA( z{qFrr3YjUkO5vuy2EGN(sTr9bRYj@6RemAKRoTgwDN6Qsyj&AwY?*-MY-bSpP;oLJ zqYjWY*^W`Co|j7j2yFC=QqrtkQj3#|G7CyF^Yeh3V4^`TZa|)meuWj#6}hP;i69=_ z9jSRh%Zq@vIN#$+V_;x9?CIhdQW5udR&MZR2Z4s!+nAD0i`E>^L$)1>%`QUD4#vqLs7t_NrcH!`G+~H)4F;`p~eY<8yL7%1aIu# z|DWNtd6Kw9uXUlqktZKsC~o_ZEG*&J`p!m4GJ?e|@Rqj+n^>dav-0PLW*-x|T%;QW z+HV|b*A&QSc*JS;abm~=O|y>&naceY9;sz)=TPQbaMvuQalfuWF>hBoP@$ecF@x}_ z)sv<$P0>EUw9Da&>5Y0fg=Y*$ir+j`UC59ryhKDHmQm~i%c8ud+MI{W^$f(0>rXpg zInzG&f6#=Duh`EA8VF@(2Z*1D7dz@Xv)-zDscB=x(O)vG#uLj}dpPeT%ze2=Bkpix zQ%|S_Q(BUDHb@sK8LmB3|Y&uu-)AMimwi7eT z#jgn2CpW9~k*)t@J*i z#qc$3(*;u*jRuCK*p@7%NQb{4WLV7jw}yW7jnCY-eBrzwvaiiI%R2tdN~tOOuXQ^}DsVfBF7O@c#CUs1JJ5 qr`sO`qlYs#| z0tz6LzX3x73Lqep1Og!p3LqdLARr(hARr(hlO+Ny1PUM^Ad^!9ECUK4Ad`Ut7JmvL zARs(1a%5&YQba~R3Op}(I(ThxZDn*}J_=02Cs_ah0ijS#R7C&)0JF2Rw6wINqoc5} zu(GkT|NsB3t*x%EuCK4JwY9aRq@<;#rKhK-tgNi7tE-}-qM)FlsHmu!nVElof2O9U znwpxQpP#n2w(;@tmzS5Fot>$vsehcDoVT~P)YR1a`udKJj*pLzfPjFOmX_`9?R$HB zm6etI`}=%+e0_a=^z`)d^76#Q#BOeGf`Wpco}T{x{>R71xVX4$YioglfdK&lWo2b= zZ*O{fdUA4dXJ=<|adGG8=bM|Gb#--gbaZobb8v8Ql$4b3@9$=2X5!-FZGUZTk&%(Z z!^6$Z&1h(7X=!O{YHHQh)m>d(gM)*NjEv#o;raRby}iBm_V!|8Vq|1w?Ck7!cXwlB zW9#edIXO8@OiVK~Gv?;zT3T8f8X9?ddCtzx9UUD=NJxu|i-v}V+}zxdkdXKH_vz{B zK|w*m!NJJL$YEh&UteD?E`Kg3Cnq*GHZLzPBO@bRTwF&-M?gS8S65dbA0LvEk`xpa zii(OuLqj1UAyZRR4h{|p2?-e)8H9v{c6N3*H#c~Acq%F?EG#S+7Z+C&FGTX@8TZZAR0kd(U*Q zzq)r40*wQ7jOXUP`@HWHW}NP$AE(7R7Nbxo6bgkxp-?Ck%KwxHcR#*)^UkgHoknB- z;Bdv}@bKVZf4|Xa?Ch*VZmoZNZ*2X4o#iD-GEK=WnnlQRad{ani$xQ@;vkulzBs1- zKg$&vm$(}Y60ac?YxpekrlQGfjDhtUg6t9oQW;rQsNR;#V9u9iv@kZQF$YcuU| z`>QWwu{AP*O$!*njnOM0oi#WH?X`Ry?JXR~i7=wr8791BTz~kE(BK`Q$ci1gPf~f+ zIVuJN51^)V++^ZXG4~Bw1#T;;Xs}tNm}LTi-Te06lc}>)Zq9beqq68dVfQ+7GmJnm3Rd=x_bQc2xm?a? zGTCgiiN5xFJ!hvriAF-9&}`NL-{rjBma%Q@=W&zZw9%*-qPrS&*@4E9iDKHz_Go8t z{qxI2lR&FbpqH^M73t#W}vU;h1pFDZq2_)b09- zMBqqjtqBvZ6~0HXFeDXVxZ!9QgzGGs%i|Iddp>OwCle64E^#kMx!xI0U^Old38qf` z6%ql=CS%j50;0QwA0@1SAO_Pyh@1c<6)3^`0<}eQGzbFsoCzdHFK~hE&S=B}@Ft2( zAbFw!6MtNCbR7>QAgZGlP*q{;WCfA}Sp~EctpK_`AF%*j;ns;(KzqI_P)%Cahy^T7 zeSxR~*61rRkbod0eZPvqSFo@5g-l>pwe%4S=oZOWFq`Zzpt!%{z(f$R1`>Gb<8ldI^LZk_k*hf%bZU`WAdRzl7Bz;M@NmyrcnfnH-E&`=ph;N2YhU3vfkPeX%r40r|RCD|CL0-lC|tOAzd6-dnS zELNb`UJz(#7&@7N(pt}r_pYK%;aDTw#|@R05!k&T&=3mj63iEPDv;ynolSA?jy)S` zI=A9#=uSA?&`^w>=mP6NaVwBeWF9@t^M7H1#7qmEK%k+_8uz0M{H(AY0VTzwbIV1H zfD2y0*N|o9htUQ8F39!)6x9$O?9$9!;{9SkV7`|?xFM^QACSyk0=ojQTs?OVU2vqN z50+B_0rZ|rNFdyh1%HvuSUk;UGa>TjN~M)@r7U~MyHU5ov;$r=HLwu*n*Pe3-(mwzFhyhWdX__%HWLs4K9=gI>^``R4$6g39MWbG;O z USERLAND SceRtc BRIDGE -* -*/ +/* +* +* SILICAANDPINA +* +* KERNEL < - > USERLAND SceRtc BRIDGE +* +*/ #include #include @@ -13,6 +13,10 @@ #include #include "rtc.h" +int module_get_export_func(SceUID pid, const char *modname, uint32_t libnid, uint32_t funcnid, uintptr_t *func); +void (*sceIoMount)(int id, const char *path, int permission, int a4, int a5, int a6); +void (*sceIoUmount)(int id, int a2, int a3, int a4); + int WriteFile(char *file, void *buf, int size) { SceUID fd = ksceIoOpen(file, SCE_O_RDWR | SCE_O_CREAT, 0777); if (fd < 0) @@ -128,6 +132,37 @@ int ksilRestoreNvsAct(int fileno) return ret; } +int ksilIoUmount(int id, int force){ + sceIoUmount(id, force, 0, 0); + return 0; +} + +int ksilIoMount(int id, int permission){ + sceIoMount(id, NULL, permission, 0, 0, 0); + return 0; +} + +#pragma GCC optimize ("O0") +int get_functions() // Bypass vitashell memes +{ + int obfuscateNid = 0xCD4AA9E6; + obfuscateNid += 0x3261262; // Equals (ksceIoMount) + + int obfuscateNid2 = 0x1E212AED; + obfuscateNid2 += 0x2361613; // Equals (ksceIoUmount) + + int obfuscateLib = 0xF9A13B2; + obfuscateLib += 0x31631615; // Equals (SceIofilemgrForDriver) + + + module_get_export_func(KERNEL_PID, "SceIofilemgr", obfuscateLib, obfuscateNid, (uintptr_t *)&sceIoMount); + module_get_export_func(KERNEL_PID, "SceIofilemgr", obfuscateLib, obfuscateNid2, (uintptr_t *)&sceIoUmount); + ksceDebugPrintf("sceIoMount:%p\n", sceIoMount); + ksceDebugPrintf("sceIoUmount:%p\n", sceIoUmount); + return 0; +} +#pragma GCC optimize ("O3") + void _start() __attribute__ ((weak, alias ("module_start"))); int module_start(SceSize argc, const void *args) @@ -148,6 +183,7 @@ int module_start(SceSize argc, const void *args) uint32_t patched_instruction = 0xBF00BF00; //NOP taiInjectDataForKernel(KERNEL_PID, info.modid, 0, 0x93C, &patched_instruction, 0x4); //bcs.w LAB_81000a64 -> NOP (SetCurrentSecureTick) taiInjectDataForKernel(KERNEL_PID, info.modid, 0, 0xA94, &patched_instruction, 0x4); //bcs.w LAB_81000bbc -> NOP (SetCurrentNetworkTick) + get_functions(); return SCE_KERNEL_START_SUCCESS; } diff --git a/kern/rtcKernelBridge.h b/kern/rtcKernelBridge.h index c67aa80..ba641eb 100644 --- a/kern/rtcKernelBridge.h +++ b/kern/rtcKernelBridge.h @@ -3,4 +3,6 @@ int ksilRtcSetCurrentNetworkTick(unsigned int timestamp1, unsigned int timestamp int ksilRtcSetCurrentSecureTick(unsigned int timestamp1, unsigned int timestamp2); int ksilSblPostSsMgrSetCpRtc(unsigned int timestamp); int ksilDumpNvsAct(unsigned int fileno); -int ksilRestoreNvsAct(unsigned int fileno); \ No newline at end of file +int ksilRestoreNvsAct(unsigned int fileno); +int ksilIoMount(int id, int permission); +int ksilIoUmount(int id, int force); \ No newline at end of file diff --git a/user/exports.yml b/user/exports.yml index 31ec936..68ad031 100644 --- a/user/exports.yml +++ b/user/exports.yml @@ -15,4 +15,6 @@ user_clockset: - silRtcSetCurrentSecureTick - silSblPostSsMgrSetCpRtc - silDumpNvsAct - - silRestoreNvsAct \ No newline at end of file + - silRestoreNvsAct + - silIoUmount + - silIoMount \ No newline at end of file diff --git a/user/rtcKernelBridge.h b/user/rtcKernelBridge.h index c67aa80..ba641eb 100644 --- a/user/rtcKernelBridge.h +++ b/user/rtcKernelBridge.h @@ -3,4 +3,6 @@ int ksilRtcSetCurrentNetworkTick(unsigned int timestamp1, unsigned int timestamp int ksilRtcSetCurrentSecureTick(unsigned int timestamp1, unsigned int timestamp2); int ksilSblPostSsMgrSetCpRtc(unsigned int timestamp); int ksilDumpNvsAct(unsigned int fileno); -int ksilRestoreNvsAct(unsigned int fileno); \ No newline at end of file +int ksilRestoreNvsAct(unsigned int fileno); +int ksilIoMount(int id, int permission); +int ksilIoUmount(int id, int force); \ No newline at end of file diff --git a/user/user_clockset.c b/user/user_clockset.c index 23172c6..b559cd6 100644 --- a/user/user_clockset.c +++ b/user/user_clockset.c @@ -35,6 +35,15 @@ int silRestoreNvsAct(unsigned int fileno) { return ksilRestoreNvsAct(fileno); } +int silIoMount(int id, int permission) +{ + return ksilIoMount(id, permission); +} +int silIoUmount(int id, int force) +{ + return ksilIoUmount(id, force); +} + void _start() __attribute__ ((weak, alias ("module_start"))); int module_start(SceSize argc, const void *args) { return SCE_KERNEL_START_SUCCESS;