Compare commits

...

37 Commits
v1.2 ... master

Author SHA1 Message Date
random() f0c0fadd27 Update README.md 2023-11-10 07:25:37 +00:00
random() 5e4077f119 Update README.md 2023-10-31 04:53:16 +00:00
random() 33e88b4c67 Update README.md 2023-10-31 04:39:09 +00:00
random() 95392076e0 Update LICENSE 2023-10-31 04:34:15 +00:00
SilicaAndPina 4fe45136d4 README.md edited online with Bitbucket 2020-04-18 23:39:49 +00:00
SilicaAndPina c10076e0d1 README.md edited online with Bitbucket 2020-04-18 23:39:11 +00:00
SilicaAndPina 66ec55606e README.md edited online with Bitbucket 2020-04-18 23:38:18 +00:00
SilicaAndPina 3a238c4492 README.md edited online with Bitbucket 2020-04-18 23:37:37 +00:00
SilicaAndPina b7e5595058 Fix Unity 2020-04-06 18:29:28 +12:00
SilicaAndPina f9c0272e81 Patch out project_name check. 2020-04-05 18:15:06 +12:00
SilicaAndPina 950e17fa13 README.md edited online with Bitbucket 2019-05-19 04:39:28 +00:00
SilicaAndPina a3a5e0647c README.md edited online with Bitbucket 2019-04-26 09:57:12 +00:00
SilicaAndPina 5681679d79 README.md edited online with Bitbucket 2019-04-26 09:54:37 +00:00
SilicaAndPina f7d307ba3d README.md edited online with Bitbucket 2019-04-26 09:51:07 +00:00
SilicaAndPina 884868f487 README.md edited online with Bitbucket 2019-04-26 09:44:26 +00:00
SilicaAndPina 12362e1668 README.md edited online with Bitbucket 2019-04-26 09:39:17 +00:00
SilicaAndPina d94da651a0 README.md edited online with Bitbucket 2019-04-26 09:38:29 +00:00
SilicaAndPina 691ccd6697 README.md edited online with Bitbucket 2019-04-26 09:37:35 +00:00
SilicaAndPina b8d972dda2 README.md edited online with Bitbucket 2019-04-26 09:27:53 +00:00
AtelierWindows 952c439df7 no message 2019-04-26 21:26:15 +12:00
AtelierWindows f7cd62d71d no message 2019-04-26 21:25:34 +12:00
AtelierWindows 794eb0d626 Add new readme 2019-04-26 21:24:49 +12:00
AtelierWindows 0c8b48cc12 Switch to user plugin. 2019-04-26 21:18:48 +12:00
SilicaAndPina c5b5af679a README.md edited online with Bitbucket 2019-01-11 01:04:52 +00:00
AtelierWindows\SilicaAndPina 1238e5e777 no message 2019-01-11 14:00:23 +13:00
AtelierWindows\SilicaAndPina 355f463e00 add reF00D Support. 2019-01-11 13:54:09 +13:00
AtelierWindows\SilicaAndPina a138f9ba7d Erh forgot one thing 2019-01-06 20:41:39 +13:00
AtelierWindows\SilicaAndPina d50d2ee2e4 Merge branch 'master' of https://bitbucket.org/SilicaAndPina/makepsmgreatagain 2019-01-06 20:39:09 +13:00
AtelierWindows\SilicaAndPina bafebe6853 HotFix lol 2019-01-06 20:38:56 +13:00
SilicaAndPina bb67543c5f README.md edited online with Bitbucket 2019-01-06 05:43:05 +00:00
SilicaAndPina 75eb152c69 README.md edited online with Bitbucket 2019-01-06 05:39:18 +00:00
AtelierWindows\SilicaAndPina 72b9f34c22 Merge branch 'master' of https://bitbucket.org/SilicaAndPina/makepsmgreatagain 2019-01-06 18:33:20 +13:00
SilicaAndPina 6790b2ae05 README.md edited online with Bitbucket 2019-01-04 11:13:28 +00:00
SilicaAndPina 995f21b0dc README.md edited online with Bitbucket 2019-01-04 11:11:18 +00:00
SilicaAndPina d8f9ca4966 README.md edited online with Bitbucket 2019-01-04 11:10:47 +00:00
SilicaAndPina 6c2fe08323 README.md edited online with Bitbucket 2019-01-04 11:06:51 +00:00
SilicaAndPina c47aded2a8 README.md edited online with Bitbucket 2019-01-04 10:21:53 +00:00
6 changed files with 303 additions and 103 deletions

View File

@ -31,9 +31,9 @@ add_executable(MakePsmGreatAgain
target_link_libraries(MakePsmGreatAgain
taihen_stub
SceLibc_stub
SceAppMgr_stub
SceLibKernel_stub
SceAppMgr_stub
SceLibc_stub
SceIofilemgr_stub
)
@ -42,5 +42,5 @@ set_target_properties(MakePsmGreatAgain
)
vita_create_self(MakePsmGreatAgain.suprx MakePsmGreatAgain
CONFIG ${CMAKE_SOURCE_DIR}/exports.yml
CONFIG ${CMAKE_SOURCE_DIR}/MakePsmGreatAgain.yml
)

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 Li
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,27 +1,34 @@
//MakePsmGreatAgain
//We need to build a wall and make SONY pay for it (with all the money they stole from deleting our PSM Purchases!)
//MakePSMGreatAgain
//Build a wall and make Sony pay for it!
//Probably with he money they stole from us
//by deleting our PSM Purchases
#include <psp2/kernel/modulemgr.h>
#include <taihen.h>
#include <string.h>
#include <vitasdk.h>
#include "licenseinfo.h"
#define printf sceClibPrintf
static SceUID mountCacheHook;
static tai_hook_ref_t ref_mountCacheHook;
static SceUID CacheMounted;
static tai_hook_ref_t CacheMounted_ref;
static SceUID mountCacheHook;
static tai_hook_ref_t ref_mountCacheHook;
static SceUID SuiteCheckDrm;
static tai_hook_ref_t SuiteCheckDrm_ref;
static SceUID tickHook;
static tai_hook_ref_t ref_tickHook;
static SceUID UnityCheckDrm;
static tai_hook_ref_t UnityCheckDrm_ref;
static SceUID networkHook;
static tai_hook_ref_t ref_networkHook;
static SceUID SecurityCritical;
static tai_hook_ref_t SecurityCritical_ref;
int ret;
int UNITY = 0;
int SUITE = 0;
static SceUID PeekPositive;
static tai_hook_ref_t PeekPositive_ref;
static SceUID LoadModuleHook = -1;
static tai_hook_ref_t LoadModuleHook_ref;
char titleid[12];
int getFileSize(const char *file) {
@ -44,21 +51,6 @@ int fileExists(const char *file) {
}
}
int sceRtcGetCurrentNetworkTick_patch(SceRtcTick *ptick)
{
ret = TAI_CONTINUE(int, ref_networkHook, ptick);
printf("getCurrentNetworkTick %llx",ptick->tick);
if(UNITY)
{
ptick->tick = UNITY_LICENSE_VALID;
}
else
{
ptick->tick = SUITE_LICENSE_VALID;
}
return ret;
}
int ReadFile(char *file, void *buf, int size) {
SceUID fd = sceIoOpen(file, SCE_O_WRONLY | SCE_O_CREAT | SCE_O_TRUNC, 0777);
@ -83,102 +75,270 @@ int WriteFile(char *file, void *buf, int size) {
return written;
}
void _start() __attribute__ ((weak, alias ("module_start")));
static int sceCtrlPeekBufferPositive_patched(int port, SceCtrlData *ctrl, int count) {
int ret = TAI_CONTINUE(int, PeekPositive_ref, port, ctrl, count);
if((ctrl->buttons & (SCE_CTRL_START|SCE_CTRL_UP)) == (SCE_CTRL_START|SCE_CTRL_UP))
{
sceAppMgrSetInfobarState(0, 0, 0);
sceAppMgrLoadExec("app0:/eboot.bin", 0, 0);
}
return ret;
}
int sceAppUtilCacheMount_patch()
{
ret = TAI_CONTINUE(int,ref_mountCacheHook);
//Create Publishing License if it Doesnt Exist
if(UNITY)
{
sceIoMkdir("cache0:/_System",6);
int sceAppUtilCacheMount_patched(){
int ret;
ret = TAI_CONTINUE(int, CacheMounted_ref);
if(!fileExists("cache0:/_System/Code"))
{
printf("Writing 'Code'\n");
WriteFile("cache0:/_System/Code",&UNITY_CODE,sizeof(UNITY_CODE));
}
if(!fileExists("cache0:/_System/target_kdbg_list.dat"))
{
printf("Writing 'target_kdbg_list'\n");
WriteFile("cache0:/_System/target_kdbg_list.dat",&UNITY_TARGET,sizeof(UNITY_TARGET));
}
if(!fileExists("cache0:/_System/vseed.dat"))
{
printf("Writing 'vseed'\n");
WriteFile("cache0:/_System/vseed.dat",&UNITY_VSEED,sizeof(UNITY_VSEED));
}
//Write Protected KConsole and PSMDrmBoot
printf("Writing 'protected_kconsole_cache'\n");
WriteFile("cache0:/_System/protected_kconsole_cache.dat",&UNITY_KCONSOLE, sizeof(UNITY_KCONSOLE));
printf("Writing 'psmdrmboot'\n");
WriteFile("cache0:/_System/psmdrmboot.dat",&UNITY_PSMDRMBOOT, sizeof(UNITY_PSMDRMBOOT));
}
else
{
sceIoMkdir("cache0:/_System",6);
if(!fileExists("cache0:/_System/Code"))
{
printf("Writing 'Code'\n");
WriteFile("cache0:/_System/Code",&SUITE_CODE,sizeof(SUITE_CODE));
sceClibPrintf("Writing 'Code'\n");
if(!strcmp(titleid,"PCSI00007"))
WriteFile("cache0:/_System/Code",&SUITE_CODE,sizeof(SUITE_CODE));
else
WriteFile("cache0:/_System/Code",&UNITY_CODE,sizeof(UNITY_CODE));
}
if(!fileExists("cache0:/_System/target_kdbg_list.dat"))
{
printf("Writing 'target_kdbg_list'\n");
WriteFile("cache0:/_System/target_kdbg_list.dat",&SUITE_TARGET,sizeof(SUITE_TARGET));
sceClibPrintf("Writing 'target_kdbg_list'\n");
if(!strcmp(titleid,"PCSI00007"))
WriteFile("cache0:/_System/target_kdbg_list.dat",&SUITE_TARGET,sizeof(SUITE_TARGET));
else
WriteFile("cache0:/_System/target_kdbg_list.dat",&UNITY_TARGET,sizeof(UNITY_TARGET));
}
if(!fileExists("cache0:/_System/vseed.dat"))
{
printf("Writing 'vseed'\n");
WriteFile("cache0:/_System/vseed.dat",&SUITE_VSEED,sizeof(SUITE_VSEED));
sceClibPrintf("Writing 'vseed'\n");
if(!strcmp(titleid,"PCSI00007"))
WriteFile("cache0:/_System/vseed.dat",&SUITE_VSEED,sizeof(SUITE_VSEED));
else
WriteFile("cache0:/_System/vseed.dat",&UNITY_VSEED,sizeof(UNITY_VSEED));
}
//Write Protected KConsole and PSMDrmBoot
printf("Writing 'protected_kconsole_cache'\n");
WriteFile("cache0:/_System/protected_kconsole_cache.dat",&SUITE_KCONSOLE, sizeof(SUITE_KCONSOLE));
printf("Writing 'psmdrmboot'\n");
WriteFile("cache0:/_System/psmdrmboot.dat",&SUITE_PSMDRMBOOT, sizeof(SUITE_PSMDRMBOOT));
if(!fileExists("cache0:/_System/protected_kconsole_cache.dat"))
{
sceClibPrintf("Writing 'protected_kconsole_cache'\n");
if(!strcmp(titleid,"PCSI00007"))
WriteFile("cache0:/_System/protected_kconsole_cache.dat",&SUITE_KCONSOLE, sizeof(SUITE_KCONSOLE));
else
WriteFile("cache0:/_System/protected_kconsole_cache.dat",&UNITY_KCONSOLE, sizeof(UNITY_KCONSOLE));
}
if(!fileExists("cache0:/_System/psmdrmboot.dat"))
{
sceClibPrintf("Writing 'psmdrmboot'\n");
if(!strcmp(titleid,"PCSI00007"))
WriteFile("cache0:/_System/psmdrmboot.dat",&SUITE_PSMDRMBOOT, sizeof(SUITE_PSMDRMBOOT));
else
WriteFile("cache0:/_System/psmdrmboot.dat",&UNITY_PSMDRMBOOT, sizeof(UNITY_PSMDRMBOOT));
}
return ret;
}
int ret0 (int *args)
{
return 0;
}
SceUID sceKernelLoadStartModule_patched(char *path, SceSize args, void *argp, int flags, SceKernelLMOption *option, int *status)
{
SceUID ret;
ret = TAI_CONTINUE(SceUID, LoadModuleHook_ref, path, args, argp, flags, option, status);
if(strstr(path,"libmono.suprx")) //PSM
{
SecurityCritical = taiHookFunctionExport(&SecurityCritical_ref,
"SceLibMono",
TAI_ANY_LIBRARY,
0x02A867BC, //mono_security_enable_core_clr
ret0);
sceClibPrintf("SecurityCritical: %x\n",SecurityCritical);
}
if(strstr(path,"libmono_bridge.suprx")) //PSM
{
/*
int SceLibMonoBridge_70493FB9
(char *sdk_version,undefined4 param_2,uint param_3,uint param_4,char *project_name,
undefined4 param_6,void *output)
find offset by following the 5th paramater, into 3 different functions.
you'll come accross a strcmp, lower down is a if(*unk_whatever = 1)
thats the jump you wnat to patch.
*/
tai_module_info_t info;
info.size = sizeof(tai_module_info_t);
taiGetModuleInfo("SceLibMonoBridge", &info);
uint16_t patched_instruction = 0xBF00; //ARM9 "NO OPERATION"
int ret = 0;
sceClibPrintf("%s: nid 0x%x\n",path,info.module_nid);
switch(info.module_nid)
{
case 0x28D9013B: //SDK 2.00
ret = taiInjectData(info.modid, 0, 0x132F8, &patched_instruction, 0x2);
sceClibPrintf("TaiInjectData (sdk2.00) %x\n",ret);
break;
case 0x88B67542: //SDK 1.21
ret = taiInjectData(info.modid, 0, 0x12e48, &patched_instruction, 0x2);
sceClibPrintf("TaiInjectData (sdk1.21) %x\n",ret);
break;
}
}
if(strstr(path,"libpsm.suprx")) //PSM
{
PeekPositive = taiHookFunctionImport(&PeekPositive_ref,
"SceLibPsm",
TAI_ANY_LIBRARY,
0xA9C3CED6, // sceCtrlPeekBufferPositive
sceCtrlPeekBufferPositive_patched);
sceClibPrintf("PeekPositive: %x\n",PeekPositive);
}
if(strstr(path,"libScePsmEdata.suprx")) //PSM Unity
{
/*
finding offsets for project_name
look at int ScePsmEdata_2EC7439C(int param_1,undefined4 param_2,uint param_3,uint param_4,char *project_name)
find offset by following the 5th paramater, into 3 different functions.
you'll come accross a strcmp, lower down is a if(*unk_whatever = 1)
thats the jump you wnat to patch.
for UnityCheckDrm look for sceIoGetStat,
look at all cross references and the function
that contiains one that has arg1 "cache0:/_System"
is UnityCheckDrm().
*/
tai_module_info_t info;
info.size = sizeof(tai_module_info_t);
taiGetModuleInfo("ScePsmEdata", &info);
uint16_t patched_instruction = 0xBF00; //ARM9 "NO OPERATION"
int ret = 0;
sceClibPrintf("%s: nid 0x%x\n",path,info.module_nid);
switch(info.module_nid)
{
case 0xB4657632: //Unity 4.3.7.0
ret = taiInjectData(info.modid, 0, 0x3b50, &patched_instruction, 0x2); //allow for all project_name
sceClibPrintf("TaiInjectData (unity4.3.7.0) %x\n",ret);
UnityCheckDrm = taiHookFunctionOffset(&UnityCheckDrm_ref,
info.modid,
0,
0x5a62, //PsmDrmBootCheck
1,
ret0);
sceClibPrintf("UnityCheckDrm: %x\n",UnityCheckDrm);
break;
case 0x21AE6754: //Unity Base
ret = taiInjectData(info.modid, 0, 0x10f9c, &patched_instruction, 0x2); //allow for all project_name
sceClibPrintf("TaiInjectData (unity base) %x\n",ret);
UnityCheckDrm = taiHookFunctionOffset(&UnityCheckDrm_ref,
info.modid,
0,
0x12eb2, //PsmDrmBootCheck
1,
ret0);
sceClibPrintf("UnityCheckDrm: %x\n",UnityCheckDrm);
break;
}
}
return ret;
}
int module_start(SceSize argc, const void *args) {
char titleid[12];
sceAppMgrAppParamGetString(0, 12, titleid, 256); //Which devagent is this?
if(!strcmp(titleid,"PCSI00007")) //SUITE
void _start() __attribute__ ((weak, alias ("module_start")));
void module_start(SceSize argc, const void *args) {
sceAppMgrAppParamGetString(0, 12, titleid, 256);
if(!strcmp(titleid,"PCSI00007"))
{
SUITE = 1;
UNITY = 0;
tai_module_info_t tai_info;
tai_info.size = sizeof(tai_module_info_t);
taiGetModuleInfo("ScePsmDev", &tai_info);
SuiteCheckDrm = taiHookFunctionOffset(&SuiteCheckDrm_ref,
tai_info.modid,
0,
0xbe2, //SuiteCheckDrm
1,
ret0);
sceClibPrintf("SuiteCheckDrmHook: %x\n",SuiteCheckDrm);
}
if(!strcmp(titleid,"PCSI00009")) //UNITY
if(!strcmp(titleid,"PCSI00009"))
{
SUITE = 0;
UNITY = 1;
tai_module_info_t tai_info;
tai_info.size = sizeof(tai_module_info_t);
taiGetModuleInfo(TAI_MAIN_MODULE, &tai_info);
if(strstr(tai_info.name, "Unity"))
{
PeekPositive = taiHookFunctionImport(&PeekPositive_ref,
TAI_MAIN_MODULE,
TAI_ANY_LIBRARY,
0x15F81E8C, // sceCtrlPeekBufferPositive2
sceCtrlPeekBufferPositive_patched);
sceClibPrintf("PeekPositive: %x\n",PeekPositive);
}
}
sceClibPrintf("Running on %s",titleid);
mountCacheHook = taiHookFunctionImport(&ref_mountCacheHook,
TAI_MAIN_MODULE,
TAI_ANY_LIBRARY,
0x0AA56143, // sceAppUtilCacheMount
sceAppUtilCacheMount_patch);
ksceUdcdStopCurrentInternal(2);
return SCE_KERNEL_START_SUCCESS;
if(!strcmp(titleid,"PCSI00007") || !strcmp(titleid,"PCSI00009")) // PSM Runtime & PSM Unity Runtime
{
sceClibPrintf("Silca: I like to see girls die :3\n");
sceClibPrintf("Loaded!\n");
sceClibPrintf("Running on %s\n",titleid);
CacheMounted = taiHookFunctionImport(&CacheMounted_ref,
TAI_MAIN_MODULE,
TAI_ANY_LIBRARY,
0x0AA56143, //sceAppUtilCacheMount
sceAppUtilCacheMount_patched);
LoadModuleHook = taiHookFunctionImport(&LoadModuleHook_ref,
TAI_MAIN_MODULE,
TAI_ANY_LIBRARY,
0x2DCC4AFA, //sceKernelLoadStartModule
sceKernelLoadStartModule_patched);
sceClibPrintf("LoadModuleHook: %x\n",LoadModuleHook);
}
}
int module_stop(SceSize argc, const void *args) {
// release hooks
if (mountCacheHook >= 0) taiHookRelease(mountCacheHook, ref_mountCacheHook);
if (CacheMounted >= 0) taiHookRelease(CacheMounted, CacheMounted_ref);
if (SuiteCheckDrm >= 0) taiHookRelease(SuiteCheckDrm, SuiteCheckDrm_ref);
if (UnityCheckDrm >= 0) taiHookRelease(UnityCheckDrm, UnityCheckDrm_ref);
if (SecurityCritical >= 0) taiHookRelease(SecurityCritical, SecurityCritical_ref);
if (PeekPositive >= 0) taiHookRelease(PeekPositive, PeekPositive_ref);
if (LoadModuleHook >= 0) taiHookRelease(LoadModuleHook, LoadModuleHook_ref);
return SCE_KERNEL_STOP_SUCCESS;
}

View File

@ -1,9 +1,29 @@
# MakePsmGreatAgain
Modifications to the PSM Developer applications
# v1.0 -
Automatically creates publishing license (if not allready created) and PSM Dev bootup (still need psm+ for development!)
Re-Enable's SceUsbSerial for ALL applications (yes, if u want to use it on your own homebrew, YOU CAN!)
Spoofs SecureTick to allways be within the valid period for the PsmDrmBoot and KConsole Cache (no need to "Refresh PSM+ License")
Features:
+ Never-Ending Publishing License. - While MakePsmGreatAgain is active, you dont have to "Refresh License" with PSM+
+ USB Serial Mode Re-Enabled - Can connect PC to Development Assistant via USB
+ PSMPlus Publishing Keys - Apps signed with PSMPlus Keys will work all consoles with MakePsmGreatAgain
+ Exit with Start+Up - While a PSM app is running, You can press Start+Up to return back to Developer Assistant
+ All applications are "SecurityCritcal" - Enables ALL .NET functions, including ones marked 'unsafe'
+ app.info "project_name" check patched (runtime only) - Enables games to run regardless of if "project_name" is set to "*"
(Note: As PSM Dev is revoked in f00d you need reF00D/0syscall6 or rePatch with a compati pack in order to run it)
# Installation
```
*PCSI00007
ur0:/tai/MakePsmGreatAgain-v1.5.suprx
*PCSI00009
ur0:/tai/MakePsmGreatAgain-v1.5.suprx
```
(use ur0 if prefered)
# FAQ
[How do i install PSM Dev?](https://www.youtube.com/watch?v=CuxaVTyAVn8)
[How do i install the PSM SDK?](https://www.youtube.com/watch?v=KoZ1xVNTjUc)

File diff suppressed because one or more lines are too long