From d4021ee02b2cf9fb1243b4bc9dd181816839acde Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Mon, 11 Nov 2019 04:24:12 +1300 Subject: [PATCH] Backup act data from NVS --- app/main.c | 17 ++++++++++++----- app/rtcUserBridge.h | 3 ++- kern/CMakeLists.txt | 1 + kern/exports.yml | 3 ++- kern/kern_clockset.c | 31 ++++++++++++++++++++++++++++++- kern/rtc.h | 4 +++- kern/rtcKernelBridge.h | 3 ++- user/exports.yml | 1 + user/rtcKernelBridge.h | 3 ++- user/rtcUserBridge.h | 3 --- user/user_clockset.c | 4 ++++ 11 files changed, 59 insertions(+), 14 deletions(-) delete mode 100644 user/rtcUserBridge.h diff --git a/app/main.c b/app/main.c index 8bf1481..ddbd018 100644 --- a/app/main.c +++ b/app/main.c @@ -225,11 +225,22 @@ void main() { } } + //backup nvs + + 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"); + printf("Done, backup at pd0:/data and ux0:/data\n\nPLEASE KEEP THESE FILES SAFE!!!"); if(vshSblAimgrIsTool()) @@ -270,10 +281,6 @@ void main() { ret = silRtcSetCurrentSecureTick(split2,split1); printf("has ret 0x%x\n",ret); - printf("Updating NetworkTick.. "); - ret = silRtcSetCurrentNetworkTick(0xe256fc7,0x8eba240); - printf("has ret 0x%x\n",ret); - sceRegMgrSetKeyInt("/CONFIG/DATE", "set_automatically", 0); } diff --git a/app/rtcUserBridge.h b/app/rtcUserBridge.h index 60bc83d..d7d3e3b 100644 --- a/app/rtcUserBridge.h +++ b/app/rtcUserBridge.h @@ -1,4 +1,5 @@ int silRtcSetCurrentTick(unsigned int timestamp1, unsigned int timestamp2); int silRtcSetCurrentNetworkTick(unsigned int timestamp1, unsigned int timestamp2); int silRtcSetCurrentSecureTick(unsigned int timestamp1, unsigned int timestamp2); -int silSblPostSsMgrSetCpRtc(unsigned int timestamp); \ No newline at end of file +int silSblPostSsMgrSetCpRtc(unsigned int timestamp); +int silDumpNvsAct(unsigned int filenos); \ No newline at end of file diff --git a/kern/CMakeLists.txt b/kern/CMakeLists.txt index 11f27ae..570b019 100644 --- a/kern/CMakeLists.txt +++ b/kern/CMakeLists.txt @@ -33,6 +33,7 @@ target_link_libraries(${PROJECT_NAME} SceRtcForDriver_stub SceSblPostSsMgrForDriver_stub SceCpuForDriver_stub + SceSblSsMgrForKernel_stub taihenForKernel_stub gcc -nostdlib diff --git a/kern/exports.yml b/kern/exports.yml index 2cdaf11..026584e 100644 --- a/kern/exports.yml +++ b/kern/exports.yml @@ -13,4 +13,5 @@ kern_clockset: - ksilRtcSetCurrentSecureTick - ksilRtcSetCurrentNetworkTick - ksilRtcSetCurrentTick - - ksilSblPostSsMgrSetCpRtc \ No newline at end of file + - ksilSblPostSsMgrSetCpRtc + - ksilDumpNvsAct \ No newline at end of file diff --git a/kern/kern_clockset.c b/kern/kern_clockset.c index 47971f0..6100344 100644 --- a/kern/kern_clockset.c +++ b/kern/kern_clockset.c @@ -9,10 +9,21 @@ #include #include #include -#include +#include #include #include "rtc.h" +int WriteFile(char *file, void *buf, int size) { + SceUID fd = ksceIoOpen(file, SCE_O_RDWR | SCE_O_CREAT, 0777); + if (fd < 0) + return fd; + + int written = ksceIoWrite(fd, buf, size); + + ksceIoClose(fd); + return written; +} + int ksilRtcSetCurrentTick(unsigned int timestamp1,unsigned int timestamp2) { unsigned int timestamp[2]; @@ -48,6 +59,22 @@ int ksilSblPostSsMgrSetCpRtc(unsigned int timestamp) return ksceSblPostSsMgrSetCpRtc(timestamp); } +int ksilDumpNvsAct(int fileno) +{ + char nvsBuf[0x20]; + memset(nvsBuf,0x00,0x520); + + int ret = ksceSblNvsReadData(0x520,nvsBuf,0x20); + if(fileno == 1) + { + WriteFile("ux0:/data/act-nvs.dat",nvsBuf,0x20); + } + else + { + WriteFile("pd0:/data/act-nvs.dat",nvsBuf,0x20); + } + return ret; +} void _start() __attribute__ ((weak, alias ("module_start"))); @@ -55,6 +82,8 @@ int module_start(SceSize argc, const void *args) { /* * 1/1/2015 check BTFO'd + * + * Vita checks elsewhere though :'( */ tai_module_info_t info; diff --git a/kern/rtc.h b/kern/rtc.h index 2f22a45..6c2a680 100644 --- a/kern/rtc.h +++ b/kern/rtc.h @@ -2,4 +2,6 @@ int ksceRtcSetCurrentTick(unsigned int* timestamp); int ksceRtcSetCurrentNetworkTick(unsigned int* timestamp); int ksceRtcSetCurrentSecureTick(unsigned int* timestamp); -int ksceSblPostSsMgrSetCpRtc(unsigned int timestamp); \ No newline at end of file +int ksceSblPostSsMgrSetCpRtc(unsigned int timestamp); + +int ksceSblNvsReadData(int offset,void* buffer,int size); \ No newline at end of file diff --git a/kern/rtcKernelBridge.h b/kern/rtcKernelBridge.h index 24949a8..d1712b5 100644 --- a/kern/rtcKernelBridge.h +++ b/kern/rtcKernelBridge.h @@ -1,4 +1,5 @@ int ksilRtcSetCurrentTick(unsigned int timestamp1, unsigned int timestamp2); int ksilRtcSetCurrentNetworkTick(unsigned int timestamp1, unsigned int timestamp2); int ksilRtcSetCurrentSecureTick(unsigned int timestamp1, unsigned int timestamp2); -int ksilSblPostSsMgrSetCpRtc(unsigned int timestamp); \ No newline at end of file +int ksilSblPostSsMgrSetCpRtc(unsigned int timestamp); +int ksilDumpNvsAct(unsigned int fileno); \ No newline at end of file diff --git a/user/exports.yml b/user/exports.yml index 9e2f3a0..bfcba60 100644 --- a/user/exports.yml +++ b/user/exports.yml @@ -14,3 +14,4 @@ user_clockset: - silRtcSetCurrentTick - silRtcSetCurrentSecureTick - silSblPostSsMgrSetCpRtc + - silDumpNvsAct diff --git a/user/rtcKernelBridge.h b/user/rtcKernelBridge.h index 24949a8..d1712b5 100644 --- a/user/rtcKernelBridge.h +++ b/user/rtcKernelBridge.h @@ -1,4 +1,5 @@ int ksilRtcSetCurrentTick(unsigned int timestamp1, unsigned int timestamp2); int ksilRtcSetCurrentNetworkTick(unsigned int timestamp1, unsigned int timestamp2); int ksilRtcSetCurrentSecureTick(unsigned int timestamp1, unsigned int timestamp2); -int ksilSblPostSsMgrSetCpRtc(unsigned int timestamp); \ No newline at end of file +int ksilSblPostSsMgrSetCpRtc(unsigned int timestamp); +int ksilDumpNvsAct(unsigned int fileno); \ No newline at end of file diff --git a/user/rtcUserBridge.h b/user/rtcUserBridge.h deleted file mode 100644 index 9a85632..0000000 --- a/user/rtcUserBridge.h +++ /dev/null @@ -1,3 +0,0 @@ -int ksilRtcSetCurrentTick(unsigned int timestamp1, unsigned int timestamp2); -int ksilRtcSetCurrentNetworkTick(unsigned int timestamp1, unsigned int timestamp2); -int ksilRtcSetCurrentSecureTick(unsigned int timestamp1, unsigned int timestamp2); \ No newline at end of file diff --git a/user/user_clockset.c b/user/user_clockset.c index 3d42146..9e10f36 100644 --- a/user/user_clockset.c +++ b/user/user_clockset.c @@ -27,6 +27,10 @@ int silSblPostSsMgrSetCpRtc(unsigned int timestamp) return ksilSblPostSsMgrSetCpRtc(timestamp); } +int silDumpNvsAct(unsigned int fileno) +{ + return ksilDumpNvsAct(fileno); +} int module_start(SceSize argc, const void *args) { return SCE_KERNEL_START_SUCCESS;