From d7df66655f4f9082978076f2b7d6ce687af56753 Mon Sep 17 00:00:00 2001 From: Naim2000 Date: Wed, 20 Dec 2023 14:23:21 -0500 Subject: [PATCH] fix emergency region detection --- include/runtimeiospatch.h | 143 ++++++++++++++++++++++++++++++++++++++ lib/libruntimeiospatch.a | Bin 0 -> 29610 bytes source/detect_settings.c | 20 ++++-- 3 files changed, 156 insertions(+), 7 deletions(-) create mode 100644 include/runtimeiospatch.h create mode 100644 lib/libruntimeiospatch.a diff --git a/include/runtimeiospatch.h b/include/runtimeiospatch.h new file mode 100644 index 0000000..4bcdfbc --- /dev/null +++ b/include/runtimeiospatch.h @@ -0,0 +1,143 @@ +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// Copyright (C) 2010 Joseph Jordan +// Copyright (C) 2012-2013 damysteryman +// Copyright (C) 2012-2015 Christopher Bratusek +// Copyright (C) 2013 DarkMatterCore +// Copyright (C) 2014 megazig +// Copyright (C) 2015 FIX94 + +#ifndef __RUNTIMEIOSPATCH_H__ +#define __RUNTIMEIOSPATCH_H__ + +/** + * Version information for Libruntimeiospatch. + */ +#define LIB_RUNTIMEIOSPATCH_VERSION "1.5.4" + +//============================================================================== +// HW_RVL header +//============================================================================== +#if defined(HW_RVL) /* defined(HW_RVL) */ + +/** + *Returns true when HW_AHBPROT access can be applied + */ +#define AHBPROT_DISABLED (*(vu32*)0xcd800064 == 0xFFFFFFFF) + +//============================================================================== +// Error code definitions: +//============================================================================== +#define ERROR_AHBPROT -5 +#define ERROR_PATCH -7 + +//============================================================================== +// C++ header +//============================================================================== +#ifdef __cplusplus +extern "C" { +#endif +/* __cplusplus */ + +//============================================================================== +// Patchsets: +//============================================================================== +/* +Wii: + * DI Readlimit + * ISFS Permissions + * ES SetUID + * ES SetIdentify + * Hash Check (aka Trucha) + * New Hash Check (aka New Trucha) + * SSL patches + +Sciifii: + * MEM2 Prot + * ES OpenTitleContent 1 & 2 + * ES ReadContent Prot + * ES CloseContent + * ES TitleVersionCheck + * ES TitleDeleteCheck + +vWii: + * Kill Anti-SystemTitle-Install 1, 2, 3, 4 & 5 +*/ + + +//============================================================================== +// Functions: +//============================================================================== + +/** + * This function can be used to keep HW_AHBPROT access when going to reload IOS + * @param verbose Flag determing whether or not to print messages on-screen + * @example + * if(AHBPROT_DISABLED) { + * s32 ret; + * ret = IosPatch_AHBPROT(false); + * if (ret) { + * IOS_ReloadIOS(36); + * } else { + * printf("IosPatch_AHBPROT failed."); + * } + * } + * @return Signed 32bit integer representing code + * > 0 : Success - return equals to number of applied patches + * ERROR_AHBPROT : Error - No HW_AHBPROT access + */ +s32 IosPatch_AHBPROT(bool verbose); + + +/** + * This function applies patches on current IOS + * @see Patchsets + * @param wii Flag determing whether or not to apply Wii patches. + * @param sciifii Flag determing whether or not to apply extra Sciifii patches. + * @param vwii Flag determing whether or not to apply extra vWii patches. + * @param verbose Flag determing whether or not to print messages on-screen. + * @example if(AHBPROT_DISABLED) IosPatch_FULL(true, false, false, false); + * @return Signed 32bit integer representing code + * > 0 : Success - return equals to number of applied patches + * ERROR_AHBPROT : Error - No HW_AHBPROT access + * ERROR_PATCH : Error - Patching HW_AHBPROT access failed + */ +s32 IosPatch_RUNTIME(bool wii, bool sciifii, bool vwii, bool verbose); + + +/** + * This function combines IosPatch_AHBPROT + IOS_ReloadIOS + IosPatch_RUNTIME + * @see Patchsets + * @param wii Flag determing whether or not to apply Wii patches. + * @param sciifii Flag determing whether or not to apply extra Sciifii patches. + * @param vwii Flag determing whether or not to apply extra vWii patches. + * @param verbose Flag determing whether or not to print messages on-screen. + * @param IOS Which IOS to reload into. + * @example if(AHBPROT_DISABLED) IosPatch_FULL(true, false, false, false, 58); + * @return Signed 32bit integer representing code + * > 0 : Success - return equals to number of applied patches + * ERROR_AHBPROT : Error - No HW_AHBPROT access + * ERROR_PATCH : Error - Patching HW_AHBPROT access failed + */ +s32 IosPatch_FULL(bool wii, bool sciifii, bool vwii, bool verbose, int IOS); + +//============================================================================== +// C++ footer +//============================================================================== +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +//============================================================================== +// HW_RVL footer +//============================================================================== +#endif /* defined(HW_RVL) */ + +#endif diff --git a/lib/libruntimeiospatch.a b/lib/libruntimeiospatch.a new file mode 100644 index 0000000000000000000000000000000000000000..2181a9a6b14df34cd00f7fb6f0ab815a397d4e54 GIT binary patch literal 29610 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

@Y6;dcQ4O3Rz5Bf7S7 z4pBdTsYyTP5nVSqehV0JlZ>4Me3tMLUO;NndmQ*O;r9d2*77OCfv*z&7T_h~3pEl5 z34bRr`phwq&355$2aalf;Ag3m85)PUJhVRru&*0Jezl$CwAc zFZ{j0F9;v9fdj%H0DfKUF9SX-e6$Dtp!tF0!1!=}2!AMchT+kpCH$kn0nN8J0OxAH zf%cR_&G#UmDPu(bB=AhlH(@UY<3aZ6`C`gK&G&5wzE=2Yz!9-O9{6VAqdrsCYrd5U ze3$Ucf$!D)0Bol`EPT{Sip*2%E#U77zXAA%THbgW7-PWkpng)G75)z3Ukbkk_}7~6 zzZCdw;r9T)Cw|Wc{*&;dz<+(KH5{;girBA zG(Ye=VA!G>^I)E(Zqu0le<1b88XNx(jQZm`{1xyq!4~j8L>~2@mLvQXz$0-jh0Q<( z@I~120n>VwcCld8KpOhRHIF`~%@IE0OQ(M)>GsT1fD>fHB@=$M-xi z`bfSEA8@D0peEDS2_N$!4eJui%m+rU8DlKc?h_1N+C$o=`CDN4V40_Zza#i5;K!to zn}PQV-UfV7@ButZ95>PJ3A|cl{sR03Ekn=C(`IZg-e!(8#H^t@= z-~o|G?CF0HnJnP{5{&CqI((2XYdr8rg2&-;J?v8L`H_PRTnl1&l*mj6zeq4@Gvflm z$bCk!;0oZWqT2_IT-dNlM+WlGHa7rct}(`#W?(!R?*zuW5W|q;IIjf%cEPB&Y7JdQv69fl=r)g}J0be2VJ;3e4Ujf`F{Efih7CvFr3HNIo z@O#345*W3@{GIrp2#goSW1${0F)qx9OeS(fd^-~uHOKtDz?+0$0Svp$#~jRjLHMYL z%r}G&n^~wiwsRja`pojkM;7KI^Y;K_?h&7!|75KZ{xRU&g%7=~A85X}02pf}%Ljpx zf3o9U4h*}@Ux3@_vBF1PWFv>nhfFr+GRr>(+#!6Nv+o!FLEuM)5C7RR?monpeOUPY z_^)5g4YK1a0X|#!$Y&15i1{mk;g9_yZ#nCPzXcfco%zRsvBt4H@{seA=F{_^oWBYG zDE^DsEBsR6Nt*9RA9E`-pPuvNRtx_=;ALWe0`O;rkJxiji{zK?^>d?|A0QdT#_^!< zx#%;kdkSNoi@8IwVF*?3w)k3?i~MjsLofGxf-!EnKa}-kBrwK^WzfIe=LP>5_*Y^R zeat-|@{@t3K0U-gBK%6={}J7nfKLeiIsQHiV&e4>GI;^vV{OaBxUk>XfeXY}DKP4s z<*x?D`o%K82X@va_|L;y#Qcwerwc|+<;@g34Z!myhZVp}{{k@TjqG?=0e_@rtbgDU6#B+|)J8t$0Aq|r zKJrX<=-NkrMVk0NV*U>Vj|WEonO_c!F^=KGqI(Q{)G*um6R_l&?j7?b&%O_Vk!RLL9Sz6W^V~$P zhGYIPA2l#s)-huRFmlCw*dJcz!t=E+zZd+g1Y5w+rx^TMz}E{N28_Is9a?9G_X$QH zhof$o9|V@Zn~Q+^g-`hVVh1q}|Dj;i*znyh{vH?qInix^406i$n}ClB?g0L~#%de3 zulX9&J$S)+l9MsO6Ggrh81s>Hh4C$zC;T2@)CTiQfa_)4F)s^Xi|Wey58$we8g4oBjKY@1<)rM`~hQCfH}o|*$XUV>c0>eE5C6a}wJGD8Sc6 z6ek^-+73YzIU&D%z^{pM<72zV{M!cfhxp`IAwI?%F$b>KI8dRABWqiuwRJe-SC)Kk zau9wmS6dvVUt$;YI}XKlk%%hpY$t-mCl{AGB+ew<5U%T5iJx&cwnK$+Z5`g-T&Fvi<}G2d99+S2eDCp0G;wlJp?4ri=rO#S$LlH6p- zkj@l*aF9K7vBvyOeyP1e&Ztj1(rA3Yt}%Z*{kRg869XXa+Y3=cvBPPb1CFb|%bKvZ zpT19;xu`W^;QA5Pm!kPZgC@HTY+^CCkhr>)0@0jGX|uOL3o;mEB4 z!xdlaUeH+YI6llpZln0_#K+MAEF~FSGh&C+whbHy1D1Xn@y(7&#oHbP&+YdRX!1jK zkRfeE@5G1fVcnvm{B?{S)rNCW8-0E(XOXKO1U;18b0R0>d&PLDZwJpgC?-1g;Ny<( z2hJ6P_20kmkrtpET3 literal 0 HcmV?d00001 diff --git a/source/detect_settings.c b/source/detect_settings.c index 76b0b21..b6c6ef5 100644 --- a/source/detect_settings.c +++ b/source/detect_settings.c @@ -32,6 +32,7 @@ distribution. #include #include #include +#include #include "detect_settings.h" #include "wiibasics.h" @@ -207,16 +208,17 @@ char get_sysmenu_region(void) default: printf("Infected system menu (version number is %hu)\n", version); + printf("Press HOME to exit, any other button to try plan B.\n"); wait_anyKey(); break; } // Plan B - tikview view ATTRIBUTE_ALIGN(32) = {}; + tikview view ATTRIBUTE_ALIGN(0x20) = {}; s32 cfd; char region = 0; - unsigned char buffer[0x1000] = {}; - const char search[] = "\\ipl\\bin\\RVL\\Final_"; + unsigned char buffer[0x2000] ATTRIBUTE_ALIGN(0x20) = {}; + const char search[] = "ipl\\bin\\RVL\\Final_"; ret = ES_GetTicketViews(TITLE_ID(1, 2), &view, 1); if (ret < 0) @@ -237,15 +239,19 @@ char get_sysmenu_region(void) while (true) { - ret = ES_ReadContent(cfd, buffer, sizeof(buffer)); + ret = ES_ReadContent(cfd, buffer, sizeof(buffer) / 2); if (ret <= 0) break; - for (int i = 0; i < (ret - sizeof(search)); i++) + for (int i = 0; i < ret; i++) // Ok this is really bad. What if it cuts off at the 4kb boundary........ i have an idea { - // Not looking for the null byte!!!! - if (memcmp(buffer, search, sizeof(search) - 1) == 0) + if (memcmp(buffer + i, search, MIN(sizeof(search) - 1, (ret - i))) == 0) { + if ((ret - i) < sizeof(search)) + // printf("Region string was in the middle of the 4KB boundary.\nFilling in the other 4kb.\n"); + ES_ReadContent(cfd, buffer + ret, sizeof(buffer) / 2); + + printf("%s\n", buffer + i); region = *(buffer + i + strlen(search)); break; }