├── .gitignore ├── CMakeLists.txt ├── DolcePolce.c ├── DolcePolce.yml ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Object files 5 | *.o 6 | *.ko 7 | *.obj 8 | *.elf 9 | 10 | # Linker output 11 | *.ilk 12 | *.map 13 | *.exp 14 | 15 | # Precompiled Headers 16 | *.gch 17 | *.pch 18 | 19 | # Libraries 20 | *.lib 21 | *.a 22 | *.la 23 | *.lo 24 | 25 | # Shared objects (inc. Windows DLLs) 26 | *.dll 27 | *.so 28 | *.so.* 29 | *.dylib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.i*86 36 | *.x86_64 37 | *.hex 38 | 39 | # Debug files 40 | *.dSYM/ 41 | *.su 42 | *.idb 43 | *.pdb 44 | 45 | # Kernel Module Compile Results 46 | *.mod* 47 | *.cmd 48 | .tmp_versions/ 49 | modules.order 50 | Module.symvers 51 | Mkfile.old 52 | dkms.conf 53 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8) 2 | 3 | if(NOT DEFINED CMAKE_TOOLCHAIN_FILE) 4 | if(DEFINED ENV{VITASDK}) 5 | set(CMAKE_TOOLCHAIN_FILE "$ENV{VITASDK}/share/vita.toolchain.cmake" CACHE PATH "toolchain file") 6 | else() 7 | message(FATAL_ERROR "Please define VITASDK to point to your SDK path!") 8 | endif() 9 | endif() 10 | 11 | project(DolcePolce) 12 | include("${VITASDK}/share/vita.cmake" REQUIRED) 13 | 14 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-q -Wall -O3 -std=gnu99") 15 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-rtti -fno-exceptions") 16 | 17 | include_directories( 18 | ) 19 | 20 | link_directories( 21 | ${CMAKE_CURRENT_BINARY_DIR} 22 | ) 23 | 24 | if (NOT ${RELEASE}) 25 | add_definitions(-DENABLE_LOGGING) 26 | endif() 27 | 28 | add_executable(DolcePolce 29 | DolcePolce.c 30 | ) 31 | 32 | target_link_libraries(DolcePolce 33 | taihen_stub 34 | SceLibKernel_stub 35 | SceAppMgr_stub 36 | SceLibc_stub 37 | SceIofilemgr_stub 38 | ) 39 | 40 | set_target_properties(DolcePolce 41 | PROPERTIES LINK_FLAGS "-nostdlib" 42 | ) 43 | 44 | vita_create_self(DolcePolce.suprx DolcePolce 45 | CONFIG ${CMAKE_SOURCE_DIR}/DolcePolce.yml 46 | ) -------------------------------------------------------------------------------- /DolcePolce.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | static SceUID check_psm_allowed_hook = -1; 8 | static tai_hook_ref_t check_psm_allowed_hook_ref; 9 | 10 | static SceUID check_vita_allowed_hook = -1; 11 | static tai_hook_ref_t check_vita_allowed_hook_ref; 12 | 13 | static SceUID check_pspemu_allowed_hook = -1; 14 | static tai_hook_ref_t check_pspemu_allowed_hook_ref; 15 | 16 | 17 | static int check_psm_allowed(char **game, int *is_allowed, int *unk) { 18 | int ret = TAI_CONTINUE(int, check_psm_allowed_hook_ref,game, is_allowed, unk); 19 | if(*is_allowed != 0x1) 20 | { 21 | sceClibPrintf("[DolcePolce] check_psm_allowed: %s is blacklisted... launching anyway!\n",*game); 22 | *is_allowed = 0x1; 23 | } 24 | 25 | return ret; 26 | } 27 | 28 | static int check_vita_allowed(char **game, int *is_allowed, int *unk) { 29 | int ret = TAI_CONTINUE(int, check_vita_allowed_hook_ref, game, is_allowed, unk); 30 | if(*is_allowed != 0x1) 31 | { 32 | sceClibPrintf("[DolcePolce] check_vita_allowed: %s is blacklisted... launching anyway!\n",*game); 33 | *is_allowed = 0x1; 34 | } 35 | 36 | return ret; 37 | } 38 | 39 | static int check_pspemu_allowed(char **game, int *is_allowed, int *unk) { 40 | int ret = TAI_CONTINUE(int, check_pspemu_allowed_hook_ref, game, is_allowed, unk); 41 | if(*is_allowed != 0x1000001) 42 | { 43 | sceClibPrintf("[DolcePolce] check_pspemu_allowed %s is blacklisted... launching anyway!\n",*game); 44 | *is_allowed = 0x1000001; 45 | } 46 | 47 | return ret; 48 | } 49 | 50 | 51 | 52 | 53 | void _start() __attribute__ ((weak, alias ("module_start"))); 54 | int module_start(SceSize argc, const void *args) { 55 | sceClibPrintf("[DolcePolce] La Dolce Vita!\n"); 56 | 57 | 58 | tai_module_info_t tai_info; 59 | tai_info.size = sizeof(tai_module_info_t); 60 | taiGetModuleInfo("SceShell", &tai_info); 61 | 62 | /* 63 | * This HookFunctionOffset thing is really getting old but whatever .-. 64 | */ 65 | 66 | switch (tai_info.module_nid) { 67 | case 0x6CB01295: // devkit 3.60 SceShell 68 | case 0x232D733B: // devkit 3.61 SceShell 69 | case 0xE541DB9B: // devkit 3.63 SceShell 70 | check_psm_allowed_hook = taiHookFunctionOffset(&check_psm_allowed_hook_ref, tai_info.modid,0,0x2E782,1, check_psm_allowed); 71 | check_vita_allowed_hook = taiHookFunctionOffset(&check_vita_allowed_hook_ref, tai_info.modid,0,0x2E2DA,1, check_vita_allowed); 72 | check_pspemu_allowed_hook = taiHookFunctionOffset(&check_pspemu_allowed_hook_ref, tai_info.modid,0,0x2E5E6,1, check_pspemu_allowed); 73 | break; 74 | case 0xE6A02F2B: //devkit 3.65 SceShell 75 | case 0xAB5C2A00: //devkit 3.67 SceShell 76 | case 0x4FE7C671: //devkit 3.68 SceShell 77 | case 0xC5B7C871: //devkit 3.71 SceShell 78 | check_psm_allowed_hook = taiHookFunctionOffset(&check_psm_allowed_hook_ref, tai_info.modid,0,0x2E7DA,1, check_psm_allowed); 79 | check_vita_allowed_hook = taiHookFunctionOffset(&check_vita_allowed_hook_ref, tai_info.modid,0,0x2E332,1, check_vita_allowed); 80 | check_pspemu_allowed_hook = taiHookFunctionOffset(&check_pspemu_allowed_hook_ref, tai_info.modid,0,0x2E63E,1, check_pspemu_allowed); 81 | break; 82 | case 0xEAB89D5C: // testkit 3.60 SceShell 83 | case 0x7A5F8457: // testkit 3.61 SceShell 84 | case 0xE7C5011A: // testkit 3.63 SceShell 85 | check_psm_allowed_hook = taiHookFunctionOffset(&check_psm_allowed_hook_ref, tai_info.modid,0,0x2EBD8,1, check_psm_allowed); 86 | check_vita_allowed_hook = taiHookFunctionOffset(&check_vita_allowed_hook_ref, tai_info.modid,0,0x2E730,1, check_vita_allowed); 87 | check_pspemu_allowed_hook = taiHookFunctionOffset(&check_pspemu_allowed_hook_ref, tai_info.modid,0,0x2EA3C,1, check_pspemu_allowed); 88 | break; 89 | case 0x587F9CED: // testkit 3.65 SceShell 90 | case 0x3C652B1A: // testkit 3.67 SceShell 91 | case 0x4DF04256: // testkit 3.68 SceShell 92 | check_psm_allowed_hook = taiHookFunctionOffset(&check_psm_allowed_hook_ref, tai_info.modid,0,0x2EC30,1, check_psm_allowed); 93 | check_vita_allowed_hook = taiHookFunctionOffset(&check_vita_allowed_hook_ref, tai_info.modid,0,0x2E788,1, check_vita_allowed); 94 | check_pspemu_allowed_hook = taiHookFunctionOffset(&check_pspemu_allowed_hook_ref, tai_info.modid,0,0x2EA94,1, check_pspemu_allowed); 95 | break; 96 | case 0x0552F692: // retail 3.60 SceShell 97 | case 0x532155E5: // retail 3.61 SceShell 98 | case 0xBB4B0A3E: // retail 3.63 SceShell 99 | check_psm_allowed_hook = taiHookFunctionOffset(&check_psm_allowed_hook_ref, tai_info.modid,0,0x2E8D0,1, check_psm_allowed); 100 | check_vita_allowed_hook = taiHookFunctionOffset(&check_vita_allowed_hook_ref, tai_info.modid,0,0x2E428,1, check_vita_allowed); 101 | check_pspemu_allowed_hook = taiHookFunctionOffset(&check_pspemu_allowed_hook_ref, tai_info.modid,0,0x2E734,1, check_pspemu_allowed); 102 | break; 103 | case 0x5549BF1F: // retail 3.65 SceShell 104 | case 0x34B4D82E: // retail 3.67 SceShell 105 | case 0x12DAC0F3: // retail 3.68 SceShell 106 | case 0x0703C828: // retail 3.69 SceShell 107 | case 0x2053B5A5: // retail 3.70 SceShell 108 | case 0xF476E785: // retail 3.71 SceShell 109 | case 0x939FFBE9: // retail 3.72 SceShell 110 | case 0x734D476A: // retail 3.73 SceShell 111 | default: 112 | check_psm_allowed_hook = taiHookFunctionOffset(&check_psm_allowed_hook_ref, tai_info.modid,0,0x2E928,1, check_psm_allowed); 113 | check_vita_allowed_hook = taiHookFunctionOffset(&check_vita_allowed_hook_ref, tai_info.modid,0,0x2E480,1, check_vita_allowed); 114 | check_pspemu_allowed_hook = taiHookFunctionOffset(&check_pspemu_allowed_hook_ref, tai_info.modid,0,0x2E78C,1, check_pspemu_allowed); 115 | break; 116 | } 117 | 118 | return SCE_KERNEL_START_SUCCESS; 119 | 120 | } 121 | 122 | int module_stop(SceSize argc, const void *args) { 123 | 124 | // release hooks 125 | if (check_psm_allowed_hook >= 0) taiHookRelease(check_psm_allowed_hook, check_psm_allowed_hook_ref); 126 | if (check_vita_allowed_hook >= 0) taiHookRelease(check_vita_allowed_hook, check_vita_allowed_hook_ref); 127 | if (check_pspemu_allowed_hook >= 0) taiHookRelease(check_pspemu_allowed_hook, check_pspemu_allowed_hook_ref); 128 | 129 | 130 | return SCE_KERNEL_STOP_SUCCESS; 131 | } 132 | -------------------------------------------------------------------------------- /DolcePolce.yml: -------------------------------------------------------------------------------- 1 | DolcePolce: 2 | attributes: 0 3 | version: 4 | major: 1 5 | minor: 1 6 | main: 7 | start: module_start 8 | stop: module_stop 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Bluzume 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This repository is no longer used. Any further development will occur at https://silica.codes/Li/dolcepolce. 2 | 3 | # DolcePolce 4 | 5 | This is a plugin that patches the PSTV Blacklist checks directly from SceShell, 6 | no more living like its 3.51 .. 7 | 8 | No more messing with app.db- no modding list_launch_vita.dat- 9 | 10 | NONE OF THAT. you can download updates- you can install DLC- 11 | you can rebuild your database- *whatever it is this plugin has you covered* 12 | 13 | Better than all previous "whitelist" hacks. 14 | (btw its a blacklist. not a whitelist..) 15 | 16 | Works on *ALL* PSV/PSP/PS1/PSM Content on 3.60-3.73 17 | 18 | Place under your ``*main`` entry in ``config.txt`` 19 | 20 | **La Dolce Vita!** 21 | 22 | UPDATE: This also allows you to run PSVita blacklisted titles such as "torne(トルネ)™ PlayStation®Vita TV" 23 | which normally will only run on PlayStation TV - i didnt even intend for this. but hey ill take it! 24 | 25 | PS remove old whitelister v2 or your dlc & updates will still be broken.. 26 | 27 | # Credits 28 | Developers: 29 | SilicaAndPina 30 | 31 | Beta Testers: 32 | Zodasaur 33 | marburg 34 | IcySon55 35 | froid_san 36 | kirilldevchroma 37 | SilicaAndPina 38 | --------------------------------------------------------------------------------