#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "utils/logger.h" #include "utils/utils.h" #include "ElfUtils.h" #include "ios_exploit.h" #include "gx2sploit.h" #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif bool CheckRunning() { switch(ProcUIProcessMessages(true)) { case PROCUI_STATUS_EXITING: { return false; } case PROCUI_STATUS_RELEASE_FOREGROUND: { ProcUIDrawDoneRelease(); break; } case PROCUI_STATUS_IN_FOREGROUND: { break; } case PROCUI_STATUS_IN_BACKGROUND: default: break; } return true; } extern "C" uint64_t _SYSGetSystemApplicationTitleId(int); int main(int argc, char **argv) { WHBLogUdpInit(); WHBLogPrintf("Hello!"); VPADReadError err; VPADStatus vpad_data; VPADRead(VPAD_CHAN_0, &vpad_data, 1, &err); uint32_t btn = vpad_data.hold | vpad_data.trigger; bool loadWithoutHacks = false; bool kernelDone = false; if((btn & VPAD_BUTTON_ZR) == VPAD_BUTTON_ZR) { loadWithoutHacks = true; } if((btn & VPAD_BUTTON_ZL) == VPAD_BUTTON_ZL) { // In case that fopen check is not working... WHBLogPrintf("Force kernel exploit"); kernelDone = true; DoKernelExploit(); } if(!kernelDone) { if(fopen("fs:/vol/external01/wiiu/payload.elf", "r") != NULL) { WHBLogPrintf("We need the kernel exploit to load the payload"); DoKernelExploit(); } } if(!loadWithoutHacks) { uint32_t entryPoint = load_loader_elf_from_sd(0, "wiiu/payload.elf"); if(entryPoint != 0) { WHBLogPrintf("New entrypoint: %08X", entryPoint); int res = ((int (*)(int, char **))entryPoint)(argc, argv); if(res > 0) { WHBLogPrintf("Returning..."); WHBLogUdpDeinit(); return 0; } } else { loadWithoutHacks = true; } } ProcUIInit(OSSavesDone_ReadyToRelease); DEBUG_FUNCTION_LINE("ProcUIInit done"); if(loadWithoutHacks) { DEBUG_FUNCTION_LINE("Load system menu"); // Restore the default title id to the normal wii u menu. unsigned long long sysmenuIdUll = _SYSGetSystemApplicationTitleId(0); memcpy((void*)0xF417FFF0, &sysmenuIdUll, 8); DCStoreRange((void*)0xF417FFF0,0x8); DEBUG_FUNCTION_LINE("THIS IS A TEST %016llX\n",sysmenuIdUll); ExecuteIOSExploit(); SYSLaunchMenu(); } while(CheckRunning()) { // wait. OSSleepTicks(OSMillisecondsToTicks(100)); } ProcUIShutdown(); DEBUG_FUNCTION_LINE("Bye!"); WHBLogUdpDeinit(); return 0; }