From c287250b88f86f4c36b0c71f6e44f8ad02bfe8e3 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Mon, 24 Oct 2022 21:57:58 +1100 Subject: [PATCH] Meowth v0.1 --- .github/workflows/ci.yml | 8 +- .gitignore | 1 + Inkay-pretendo.wps | Bin 87216 -> 0 bytes Makefile | 2 +- src/main.cpp | 137 +++----------------------------- src/patcher/ingame.cpp | 4 +- src/patcher/patcher.cpp | 17 ++++ src/patcher/patcher.h | 2 + src/patcher/patches/nn_olv.cpp | 30 ------- src/patcher/patches/nn_olv.h | 8 -- src/patcher/patches/youtube.cpp | 25 ++++++ src/patcher/patches/youtube.h | 12 +++ src/patcher/rplinfo.cpp | 20 +---- src/url_patches.h | 44 ---------- 14 files changed, 76 insertions(+), 234 deletions(-) delete mode 100644 Inkay-pretendo.wps delete mode 100644 src/patcher/patches/nn_olv.cpp delete mode 100644 src/patcher/patches/nn_olv.h create mode 100644 src/patcher/patches/youtube.cpp create mode 100644 src/patcher/patches/youtube.h delete mode 100644 src/url_patches.h diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index adfbbeb..3af1753 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,18 +1,18 @@ -name: Inkay-CI +name: wups-CI on: push jobs: - build-inkay: + build-wups: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 - name: build toolchain container run: docker build . -t builder - uses: ammaraskar/gcc-problem-matcher@master - - name: build Inkay + - name: build WUPS plugin run: docker run --rm -v ${PWD}:/app -w /app builder - uses: actions/upload-artifact@master with: - name: inkay + name: plugin path: "*.wps" diff --git a/.gitignore b/.gitignore index 74caf8d..fa7ebaa 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .idea/ /build *.elf +*.wps diff --git a/Inkay-pretendo.wps b/Inkay-pretendo.wps deleted file mode 100644 index 71555e584899c3aef0ef3c8448e8aaf131b78e78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87216 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 z 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 diff --git a/Makefile b/Makefile index 1ae0b48..a59b5ca 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ WUMS_ROOT := $(DEVKITPRO)/wums # DATA is a list of directories containing data files # INCLUDES is a list of directories containing header files #------------------------------------------------------------------------------- -TARGET := Inkay-pretendo +TARGET := meowth-ssl BUILD := build SOURCES := src src/utils src/patcher src/patcher/patches DATA := data diff --git a/src/main.cpp b/src/main.cpp index 41cc333..72c7797 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -28,50 +27,21 @@ #include #include "wut_extra.h" #include -#include "url_patches.h" #include "patcher/ingame.h" /** Mandatory plugin information. If not set correctly, the loader will refuse to use the plugin. **/ -WUPS_PLUGIN_NAME("Inkay"); -WUPS_PLUGIN_DESCRIPTION("Pretendo Network Patcher"); -WUPS_PLUGIN_VERSION("v2.1"); -WUPS_PLUGIN_AUTHOR("Pretendo contributors"); +WUPS_PLUGIN_NAME("Meowth"); +WUPS_PLUGIN_DESCRIPTION("SSL Patcher"); +WUPS_PLUGIN_VERSION("v0.1"); +WUPS_PLUGIN_AUTHOR("quarky + Pretendo contributors"); WUPS_PLUGIN_LICENSE("ISC"); -WUPS_USE_STORAGE("inkay"); - -bool skipPatches = false; -bool prevSkipValue = false; - #include #include -//thanks @Gary#4139 :p -static void write_string(uint32_t addr, const char* str) -{ - int len = strlen(str) + 1; - int remaining = len % 4; - int num = len - remaining; - - for (int i = 0; i < (num / 4); i++) { - Mocha_IOSUKernelWrite32(addr + i * 4, *(uint32_t*)(str + i * 4)); - } - - if (remaining > 0) { - uint8_t buf[4]; - Mocha_IOSUKernelRead32(addr + num, (uint32_t*)&buf); - - for (int i = 0; i < remaining; i++) { - buf[i] = *(str + num + i); - } - - Mocha_IOSUKernelWrite32(addr + num, *(uint32_t*)&buf); - } -} - static bool is555(MCP_SystemVersion version) { return (version.major == 5) && (version.minor == 5) && (version.patch >= 5); } @@ -79,30 +49,6 @@ static bool is555(MCP_SystemVersion version) { INITIALIZE_PLUGIN() { WHBLogUdpInit(); - WUPSStorageError storageRes = WUPS_OpenStorage(); - if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) { - DEBUG_FUNCTION_LINE("Failed to open storage %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes); - } - else { - // Try to get value from storage - if ((storageRes = WUPS_GetBool(nullptr, "skipPatches", &skipPatches)) == WUPS_STORAGE_ERROR_NOT_FOUND) { - // Add the value to the storage if it's missing. - if (WUPS_StoreBool(nullptr, "skipPatches", skipPatches) != WUPS_STORAGE_ERROR_SUCCESS) { - DEBUG_FUNCTION_LINE("Failed to store bool"); - } - } - else if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) { - DEBUG_FUNCTION_LINE("Failed to get bool %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes); - } - - prevSkipValue = skipPatches; - - // Close storage - if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) { - DEBUG_FUNCTION_LINE("Failed to close storage"); - } - } - auto res = Mocha_InitLibrary(); if (res != MOCHA_RESULT_SUCCESS) { @@ -124,24 +70,12 @@ INITIALIZE_PLUGIN() { os_version.major, os_version.minor, os_version.patch, os_version.region ); - if (!skipPatches) { - if (is555(os_version)) { - Mocha_IOSUKernelWrite32(0xE1019F78, 0xE3A00001); // mov r0, #1 - } - else { - Mocha_IOSUKernelWrite32(0xE1019E84, 0xE3A00001); // mov r0, #1 - } - - for (const auto& patch : url_patches) { - write_string(patch.address, patch.url); - } - - DEBUG_FUNCTION_LINE("Pretendo URL and NoSSL patches applied successfully."); + // IOS-NSEC SSL patch + if (is555(os_version)) { + Mocha_IOSUKernelWrite32(0xE1019F78, 0xE3A00001); // mov r0, #1 + } else { + Mocha_IOSUKernelWrite32(0xE1019E84, 0xE3A00001); // mov r0, #1 } - else { - DEBUG_FUNCTION_LINE("Pretendo URL and NoSSL patches skipped."); - } - MCP_Close(mcp); } @@ -150,58 +84,9 @@ DEINITIALIZE_PLUGIN() { Mocha_DeInitLibrary(); } -void skipPatchesChanged(ConfigItemBoolean* item, bool newValue) { - DEBUG_FUNCTION_LINE("New value in skipPatchesChanged: %d", newValue); - skipPatches = newValue; - // If the value has changed, we store it in the storage. - WUPS_StoreInt(nullptr, "skipPatches", skipPatches); -} - -WUPS_GET_CONFIG() { - // We open the storage so we can persist the configuration the user did. - if (WUPS_OpenStorage() != WUPS_STORAGE_ERROR_SUCCESS) { - DEBUG_FUNCTION_LINE("Failed to open storage"); - return 0; - } - - WUPSConfigHandle config; - WUPSConfig_CreateHandled(&config, "Inkay"); - - WUPSConfigCategoryHandle cat; - WUPSConfig_AddCategoryByNameHandled(config, "Patching", &cat); - - WUPSConfigItemBoolean_AddToCategoryHandled(config, cat, "skipPatches", "Skip Pretendo Network patches", skipPatches, &skipPatchesChanged); - - return config; -} - -bool isRelaunching = false; - -WUPS_CONFIG_CLOSED() { - // Save all changes - if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) { - DEBUG_FUNCTION_LINE("Failed to close storage"); - } - - if (prevSkipValue != skipPatches) { - if (!isRelaunching) { - // Need to reload the console so the patches reset - OSForceFullRelaunch(); - SYSLaunchMenu(); - isRelaunching = true; - } - } - prevSkipValue = skipPatches; -} - ON_APPLICATION_START() { WHBLogUdpInit(); - - DEBUG_FUNCTION_LINE("Inkay: hewwo!\n"); - - if (!skipPatches) RunPatcher(); + RunPatcher(); } -ON_APPLICATION_ENDS() { - DEBUG_FUNCTION_LINE("Inkay: shutting down...\n"); -} +ON_APPLICATION_ENDS() {} diff --git a/src/patcher/ingame.cpp b/src/patcher/ingame.cpp index 473cd38..a198d58 100644 --- a/src/patcher/ingame.cpp +++ b/src/patcher/ingame.cpp @@ -18,7 +18,7 @@ #include -#include "patches/nn_olv.h" +#include "patches/youtube.h" void RunPatcher() { auto orplinfo = TryGetRPLInfo(); @@ -52,5 +52,5 @@ void RunPatcher() { auto titleVer = __OSGetTitleVersion(); // "always" patches - Patch_nn_olv(titleVer, titleId, rpls); + Patch_youtube(titleVer, titleId, rpls); } diff --git a/src/patcher/patcher.cpp b/src/patcher/patcher.cpp index 1bdfc6c..ebafada 100644 --- a/src/patcher/patcher.cpp +++ b/src/patcher/patcher.cpp @@ -4,6 +4,7 @@ #include #include +#include bool replace_string(uint32_t start, uint32_t size, const char* original_val, size_t original_val_sz, const char* new_val, size_t new_val_sz) { for (uint32_t addr = start; addr < start + size - original_val_sz; addr++) { @@ -18,3 +19,19 @@ bool replace_string(uint32_t start, uint32_t size, const char* original_val, siz return false; } + +bool PatchInstruction(void* instr, uint32_t original, uint32_t replacement) { + uint32_t current = *(uint32_t*)instr; + DEBUG_FUNCTION_LINE("current instr %08x", current); + if (current != original) return current == replacement; + + KernelCopyData(OSEffectiveToPhysical((uint32_t)instr), OSEffectiveToPhysical((uint32_t)&replacement), sizeof(replacement)); + //Only works on AROMA! WUPS 0.1's KernelCopyData is uncached, needs DCInvalidate here instead + DCFlushRange(instr, 4); + ICInvalidateRange(instr, 4); + + current = *(uint32_t*)instr; + DEBUG_FUNCTION_LINE("patched instr %08x", current); + + return true; +} diff --git a/src/patcher/patcher.h b/src/patcher/patcher.h index 4881854..0bfdec2 100644 --- a/src/patcher/patcher.h +++ b/src/patcher/patcher.h @@ -6,4 +6,6 @@ bool replace_string(uint32_t start, uint32_t size, const char* original_val, size_t original_val_sz, const char* new_val, size_t new_val_sz); +bool PatchInstruction(void* instr, uint32_t original, uint32_t replacement); + #endif //INKAY_PATCHER_H diff --git a/src/patcher/patches/nn_olv.cpp b/src/patcher/patches/nn_olv.cpp deleted file mode 100644 index e018130..0000000 --- a/src/patcher/patches/nn_olv.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "nn_olv.h" -#include "utils/logger.h" -#include "patcher/patcher.h" - -#include - -const char original_url[] = "discovery.olv.nintendo.net/v1/endpoint"; -const char new_url[] = "discovery.olv.pretendo.cc/v1/endpoint"; -_Static_assert(sizeof(original_url) > sizeof(new_url), - "new_url too long! Must be less than 38chars."); - -std::optional checkForOlvLibs(const rplinfo& rpls) { - auto res = FindRPL(rpls, "nn_olv.rpl"); - if (res) return res; - - res = FindRPL(rpls, "nn_olv2.rpl"); - if (res) return res; - - return std::nullopt; -} - -void Patch_nn_olv(uint32_t titleVer, uint64_t titleId, const rplinfo& rpls) { - auto olv_rpl = checkForOlvLibs(rpls); - if (!olv_rpl) { - DEBUG_FUNCTION_LINE("olv not loaded?"); - return; - } - - replace_string(olv_rpl->dataAddr, olv_rpl->dataSize, original_url, sizeof(original_url), new_url, sizeof(new_url)); -} diff --git a/src/patcher/patches/nn_olv.h b/src/patcher/patches/nn_olv.h deleted file mode 100644 index f31c773..0000000 --- a/src/patcher/patches/nn_olv.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _TPATCH_NN_OLV_H -#define _TPATCH_NN_OLV_H - -#include "patcher/rplinfo.h" - -void Patch_nn_olv(uint32_t titleVer, uint64_t titleId, const rplinfo& rpls); - -#endif //_TPATCH_NN_OLV_H diff --git a/src/patcher/patches/youtube.cpp b/src/patcher/patches/youtube.cpp new file mode 100644 index 0000000..57b1e88 --- /dev/null +++ b/src/patcher/patches/youtube.cpp @@ -0,0 +1,25 @@ +// +// Created by ash on 24/10/22. +// + +#include "youtube.h" +#include "utils/logger.h" +#include "patcher/patcher.h" + +#include + +void Patch_youtube(uint32_t titleVer, uint64_t titleId, const rplinfo& rpls) { + DEBUG_FUNCTION_LINE("YouTube %016llx v%d", titleId, titleVer); + if (titleId == 0x0005000010105700 && titleVer == 193) { + auto res = FindRPL(rpls, "lb_shell.rpx"); + if (!res) return; + + DEBUG_FUNCTION_LINE("patching..."); + // OpenSSL ssl_verify_cert_chain + PatchInstruction((void*)(res->textAddr + 0x8dfdbc), 0x40820020, 0x60000000); + PatchInstruction((void*)(res->textAddr + 0x8dfdd4), 0x38600000, 0x38600001); + // OpenSSL X509_verify_cert (called by cert_verify_proc_openssl.cc) + PatchInstruction((void*)(res->textAddr + 0x9208e8), 0x9421ffb8, 0x38600001); + PatchInstruction((void*)(res->textAddr + 0x9208ec), 0xbe410010, 0x4e800020); + } +} diff --git a/src/patcher/patches/youtube.h b/src/patcher/patches/youtube.h new file mode 100644 index 0000000..4085d75 --- /dev/null +++ b/src/patcher/patches/youtube.h @@ -0,0 +1,12 @@ +// +// Created by ash on 24/10/22. +// + +#ifndef INKAY_YOUTUBE_H +#define INKAY_YOUTUBE_H + +#include "patcher/rplinfo.h" + +void Patch_youtube(uint32_t titleVer, uint64_t titleId, const rplinfo& rpls); + +#endif //INKAY_YOUTUBE_H diff --git a/src/patcher/rplinfo.cpp b/src/patcher/rplinfo.cpp index f5b7e4f..cc273ea 100644 --- a/src/patcher/rplinfo.cpp +++ b/src/patcher/rplinfo.cpp @@ -14,12 +14,10 @@ #include "rplinfo.h" #include "utils/logger.h" +#include "patcher/patcher.h" #include -#include -#include - std::optional> TryGetRPLInfo() { int num_rpls = OSDynLoad_GetNumberOfRPLs(); if (num_rpls == 0) { @@ -39,22 +37,6 @@ std::optional> TryGetRPLInfo() { return rpls; } -bool PatchInstruction(void* instr, uint32_t original, uint32_t replacement) { - uint32_t current = *(uint32_t*)instr; - DEBUG_FUNCTION_LINE("current instr %08x", current); - if (current != original) return current == replacement; - - KernelCopyData(OSEffectiveToPhysical((uint32_t)instr), OSEffectiveToPhysical((uint32_t)&replacement), sizeof(replacement)); - //Only works on AROMA! WUPS 0.1's KernelCopyData is uncached, needs DCInvalidate here instead - DCFlushRange(instr, 4); - ICInvalidateRange(instr, 4); - - current = *(uint32_t*)instr; - DEBUG_FUNCTION_LINE("patched instr %08x", current); - - return true; -} - bool PatchDynLoadFunctions() { uint32_t *patch1 = ((uint32_t *) &OSDynLoad_GetNumberOfRPLs) + 6; uint32_t *patch2 = ((uint32_t *) &OSDynLoad_GetRPLInfo) + 22; diff --git a/src/url_patches.h b/src/url_patches.h deleted file mode 100644 index 8065f98..0000000 --- a/src/url_patches.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef _PATCHER_H -#define _PATCHER_H - -typedef struct URL_Patch -{ - unsigned int address; - char url[80]; -} URL_Patch; - -static const URL_Patch url_patches[] = { - //nim-boss .rodata - {0xE2282550, "http://pushmore.wup.shop.pretendo.cc/pushmore/r/%s"}, - {0xE229A0A0, "http://npns-dev.c.app.pretendo.cc/bst.dat"}, - {0xE229A0D0, "http://npns-dev.c.app.pretendo.cc/bst2.dat"}, - {0xE2281964, "https://tagaya.wup.shop.pretendo.cc/tagaya/versionlist/%s/%s/%s"}, - {0xE22819B4, "https://tagaya.wup.shop.pretendo.cc/tagaya/versionlist/%s/%s/latest_version"}, - {0xE2282584, "http://pushmo.wup.shop.pretendo.cc/pushmo/d/%s/%u"}, - {0xE22825B8, "http://pushmo.wup.shop.pretendo.cc/pushmo/c/%u/%u"}, - {0xE2282DB4, "https://ecs.wup.shop.pretendo.cc/ecs/services/ECommerceSOAP"}, - {0xE22830A0, "https://ecs.wup.shop.pretendo.cc/ecs/services/ECommerceSOAP"}, - {0xE22830E0, "https://nus.wup.shop.pretendo.cc/nus/services/NetUpdateSOAP"}, - {0xE2299990, "nppl.app.pretendo.cc"}, - {0xE229A600, "https://pls.wup.shop.pretendo.cc/pls/upload"}, - {0xE229A6AC, "https://npvk-dev.app.pretendo.cc/reports"}, - {0xE229A6D8, "https://npvk.app.pretendo.cc/reports"}, - {0xE229B1F4, "https://npts.app.pretendo.cc/p01/tasksheet/%s/%s/%s/%s?c=%s&l=%s"}, - {0xE229B238, "https://npts.app.pretendo.cc/p01/tasksheet/%s/%s/%s?c=%s&l=%s"}, - {0xE22AB2D8, "https://idbe-wup.cdn.pretendo.cc/icondata/%02X/%016llX.idbe"}, - {0xE22AB318, "https://idbe-ctr.cdn.pretendo.cc/icondata/%02X/%016llX.idbe"}, - {0xE22AB358, "https://idbe-wup.cdn.pretendo.cc/icondata/%02X/%016llX-%d.idbe"}, - {0xE22AB398, "https://idbe-ctr.cdn.pretendo.cc/icondata/%02X/%016llX-%d.idbe"}, - {0xE22B3EF8, "https://ecs.c.shop.pretendo.cc"}, - {0xE22B3F30, "https://ecs.c.shop.pretendo.cc/ecs/services/ECommerceSOAP"}, - {0xE22B3F70, "https://ias.c.shop.pretendo.cc/ias/services/IdentityAuthenticationSOAP"}, - {0xE22B3FBC, "https://cas.c.shop.pretendo.cc/cas/services/CatalogingSOAP"}, - {0xE22B3FFC, "https://nus.c.shop.pretendo.cc/nus/services/NetUpdateSOAP"}, - {0xE229DE0C, "n.app.pretendo.cc"}, - //nim-boss .bss - {0xE24B8A24, "https://nppl.app.pretendo.cc/p01/policylist/1/1/UNK"}, //bit of a hack - {0xE31930D4, "https://%s%saccount.pretendo.cc/v%u/api/"} - -}; - -#endif