mirror of
https://github.com/modmii/Any-Region-Changer-ModMii-Edition.git
synced 2024-11-26 01:54:15 +01:00
fix emergency region detection
This commit is contained in:
parent
97e971d3a3
commit
d7df66655f
143
include/runtimeiospatch.h
Normal file
143
include/runtimeiospatch.h
Normal file
@ -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 <joe.ftpii@psychlaw.com.au>
|
||||||
|
// Copyright (C) 2012-2013 damysteryman
|
||||||
|
// Copyright (C) 2012-2015 Christopher Bratusek <nano@jpberlin.de>
|
||||||
|
// 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
|
BIN
lib/libruntimeiospatch.a
Normal file
BIN
lib/libruntimeiospatch.a
Normal file
Binary file not shown.
@ -32,6 +32,7 @@ distribution.
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <gccore.h>
|
#include <gccore.h>
|
||||||
|
#include <sys/param.h>
|
||||||
#include "detect_settings.h"
|
#include "detect_settings.h"
|
||||||
#include "wiibasics.h"
|
#include "wiibasics.h"
|
||||||
|
|
||||||
@ -207,16 +208,17 @@ char get_sysmenu_region(void)
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
printf("Infected system menu (version number is %hu)\n", version);
|
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();
|
wait_anyKey();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Plan B
|
// Plan B
|
||||||
tikview view ATTRIBUTE_ALIGN(32) = {};
|
tikview view ATTRIBUTE_ALIGN(0x20) = {};
|
||||||
s32 cfd;
|
s32 cfd;
|
||||||
char region = 0;
|
char region = 0;
|
||||||
unsigned char buffer[0x1000] = {};
|
unsigned char buffer[0x2000] ATTRIBUTE_ALIGN(0x20) = {};
|
||||||
const char search[] = "\\ipl\\bin\\RVL\\Final_";
|
const char search[] = "ipl\\bin\\RVL\\Final_";
|
||||||
|
|
||||||
ret = ES_GetTicketViews(TITLE_ID(1, 2), &view, 1);
|
ret = ES_GetTicketViews(TITLE_ID(1, 2), &view, 1);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -237,15 +239,19 @@ char get_sysmenu_region(void)
|
|||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
ret = ES_ReadContent(cfd, buffer, sizeof(buffer));
|
ret = ES_ReadContent(cfd, buffer, sizeof(buffer) / 2);
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
break;
|
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 + i, search, MIN(sizeof(search) - 1, (ret - i))) == 0)
|
||||||
if (memcmp(buffer, search, sizeof(search) - 1) == 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));
|
region = *(buffer + i + strlen(search));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user