From 36ed28af3f15335374566d42bcb4156d1e74e39b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Furkan=20Mudanyal=C4=B1?= Date: Thu, 4 Jun 2020 04:42:44 +0300 Subject: [PATCH] Change by Graphene: Doesn't load in system/homebrew apps, only checks every 15 frames --- app/trophy_app.c | 63 ++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/app/trophy_app.c b/app/trophy_app.c index 085ab8f..9b639c6 100644 --- a/app/trophy_app.c +++ b/app/trophy_app.c @@ -14,11 +14,13 @@ int sceShellUtilTextClipboardRead(void* data, SceSize size, SceSize *textlen); int sceShellUtilTextClipboardWrite(const void* data, SceSize size); +int sceAppMgrIsGameProgram(int); int hook[2]; static tai_hook_ref_t screenshot_hook; static tai_hook_ref_t screen_disable_hook; const static int done_magic = DONE_MAGIC; +static int frames = 0; void sceScreenShotDisable_patched() { printf("INFO TrophyShot: Prevented disabling screenshot. \n"); @@ -26,22 +28,29 @@ void sceScreenShotDisable_patched() { int sceDisplaySetFrameBuf_patched(const SceDisplayFrameBuf* pParam, SceDisplaySetBufSync sync) { - int read_data; - sceShellUtilTextClipboardRead(&read_data, sizeof(int), NULL); - - if (read_data == TROPHY_MAGIC) { + int read_data, screenshot_ret; - printf("SHOOTING\n"); + if (frames == 15) { - SceScreenShotCaptureFileInfo captureFileInfo; - sceClibMemset(&captureFileInfo, 0, sizeof(captureFileInfo)); - int screenshot_ret = sceScreenShotCapture(1, &captureFileInfo, NULL, NULL); + frames = 0; + sceShellUtilTextClipboardRead(&read_data, sizeof(int), NULL); - printf("INFO TrophyShot: sceScreenShotCapture() : 0x%08x path='%s'\n", screenshot_ret, captureFileInfo.path); + if (read_data == TROPHY_MAGIC) { - sceShellUtilTextClipboardWrite(&done_magic, sizeof(int)); + printf("SHOOTING\n"); + + SceScreenShotCaptureFileInfo captureFileInfo; + sceClibMemset(&captureFileInfo, 0, sizeof(captureFileInfo)); + screenshot_ret = sceScreenShotCapture(1, &captureFileInfo, NULL, NULL); + + printf("INFO TrophyShot: sceScreenShotCapture() : 0x%08x path='%s'\n", screenshot_ret, captureFileInfo.path); + + sceShellUtilTextClipboardWrite(&done_magic, sizeof(int)); + } } + frames++; + return TAI_CONTINUE(int, screenshot_hook, pParam, sync); } @@ -49,22 +58,28 @@ void _start() __attribute__((weak, alias("module_start"))); int module_start(SceSize args, void *argp) { printf("TrophyShot APP PART 2.0 SALVO FIRE\n"); - sceSysmoduleLoadModule(SCE_SYSMODULE_SCREEN_SHOT); - hook[1] = taiHookFunctionExport( - &screen_disable_hook, - "SceScreenShot", - 0xF26FC97D, //SceScreenShot - 0x50AE9FF9, //SceScreenShotDisable - sceScreenShotDisable_patched); + int ret = sceAppMgrIsGameProgram(-2); + printf("APP TYPE: %d\n", ret); - hook[0] = taiHookFunctionImport( - &screenshot_hook, - TAI_MAIN_MODULE, - TAI_ANY_LIBRARY, //SceDisplayUser - 0x7A410B64, //sceDisplaySetFrameBuf - sceDisplaySetFrameBuf_patched); + if (ret == 1) { + sceSysmoduleLoadModule(SCE_SYSMODULE_SCREEN_SHOT); + hook[1] = taiHookFunctionExport( + &screen_disable_hook, + "SceScreenShot", + 0xF26FC97D, //SceScreenShot + 0x50AE9FF9, //SceScreenShotDisable + sceScreenShotDisable_patched); + + hook[0] = taiHookFunctionImport( + &screenshot_hook, + TAI_MAIN_MODULE, + TAI_ANY_LIBRARY, //SceDisplayUser + 0x7A410B64, //sceDisplaySetFrameBuf + sceDisplaySetFrameBuf_patched); + + printf("hooks: 0x%x 0x%x\n", hook[0], hook[1]); + } - printf("hooks: 0x%x 0x%x\n", hook[0], hook[1]); return SCE_KERNEL_START_SUCCESS; }