From 80218ab225a6b6b1bea472ed0c1fd193df84e5e7 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 21 Aug 2017 23:36:35 +0200 Subject: [PATCH 1/3] try to implement NNU-Patcher --- src/dynamic_libs/nn_nim_functions.c | 38 +++++++++++++++++++++++++++++ src/dynamic_libs/nn_nim_functions.h | 20 +++++++++++++++ src/main.c | 3 +++ src/nnu.c | 22 +++++++++++++++++ src/nnu.h | 6 +++++ 5 files changed, 89 insertions(+) create mode 100644 src/dynamic_libs/nn_nim_functions.c create mode 100644 src/dynamic_libs/nn_nim_functions.h create mode 100644 src/nnu.c create mode 100644 src/nnu.h diff --git a/src/dynamic_libs/nn_nim_functions.c b/src/dynamic_libs/nn_nim_functions.c new file mode 100644 index 0000000..49a7c68 --- /dev/null +++ b/src/dynamic_libs/nn_nim_functions.c @@ -0,0 +1,38 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "nn_nim_functions.h" + +u32 nn_nim_handle __attribute__((section(".data"))) = 0; + +void InitAcquireNim(void) +{ + OSDynLoad_Acquire("nn_nim.rpl", &nn_nim_handle); +} + +void InitNimFunctionPointers(void) +{ + u32 *funcPointer = 0; + InitAcquireNim(); +} diff --git a/src/dynamic_libs/nn_nim_functions.h b/src/dynamic_libs/nn_nim_functions.h new file mode 100644 index 0000000..ac94cce --- /dev/null +++ b/src/dynamic_libs/nn_nim_functions.h @@ -0,0 +1,20 @@ +#ifndef __NN_NIM_FUNCTIONS_H_ +#define __NN_NIM_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* Handle for coreinit */ +extern u32 nn_nim_handle; + +void InitAcquireNim(void); +void InitNimFunctionPointers(void); + +#ifdef __cplusplus +} +#endif + +#endif // __NN_NIM_FUNCTIONS_H_ diff --git a/src/main.c b/src/main.c index 95f7a56..f826f1b 100644 --- a/src/main.c +++ b/src/main.c @@ -20,6 +20,7 @@ #include "menu.h" #include "main.h" #include "ios_exploit.h" +#include "nnu.h" static int exitToHBLOnLaunch = 0; @@ -61,6 +62,8 @@ int Menu_Main(void) } } + nnupatcher(); + mount_sd_fat("sd"); cfw_config_t config; diff --git a/src/nnu.c b/src/nnu.c new file mode 100644 index 0000000..406816b --- /dev/null +++ b/src/nnu.c @@ -0,0 +1,22 @@ +#include +#include +#include "dynamic_libs/os_functions.h" +#include "dynamic_libs/nn_nim_functions.h" +#include "nnu.h" + +void nnupatcher(void) { + InitNimFunctionPointers(); + + u32 *targetfunction, *patchoffset; + + // locate function + OSDynLoad_FindExport(nn_nim_handle, 0, "NeedsNetworkUpdate__Q2_2nn3nimFPb", &targetfunction); + + patchoffset = OSEffectiveToPhysical(targetfunction); + patchoffset = (u32*)((u32)patchoffset - 0x31000000 + 0xA0000000); + + // now patch + patchoffset[0] = 0x38600000; + patchoffset[1] = 0x38800000; + patchoffset[2] = 0x4E800020; +} \ No newline at end of file diff --git a/src/nnu.h b/src/nnu.h new file mode 100644 index 0000000..2526382 --- /dev/null +++ b/src/nnu.h @@ -0,0 +1,6 @@ +#ifndef _NNU_H_ +#define _NNU_H_ + +void nnupatcher(void); + +#endif From b2759c11d12391307978f53a9e4ddc1689590f24 Mon Sep 17 00:00:00 2001 From: NULL Date: Tue, 22 Aug 2017 11:53:42 +0200 Subject: [PATCH 2/3] move nnupatcher()-call downwards this should now be called after IOSU-reload --- src/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index f826f1b..473133d 100644 --- a/src/main.c +++ b/src/main.c @@ -62,8 +62,6 @@ int Menu_Main(void) } } - nnupatcher(); - mount_sd_fat("sd"); cfw_config_t config; @@ -87,12 +85,14 @@ int Menu_Main(void) if(config.noIosReload == 0) { OSForceFullRelaunch(); + nnupatcher(); SYSLaunchMenu(); returnCode = EXIT_RELAUNCH_ON_LOAD; } else if(config.launchSysMenu) { SYSLaunchMenu(); + nnupatcher(); exitToHBLOnLaunch = 1; returnCode = EXIT_RELAUNCH_ON_LOAD; } From 16eb111ac538786be2143909e08686e6fc6d6944 Mon Sep 17 00:00:00 2001 From: NULL Date: Sun, 3 Sep 2017 23:11:30 +0200 Subject: [PATCH 3/3] again downwards --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 473133d..9c15f65 100644 --- a/src/main.c +++ b/src/main.c @@ -85,8 +85,8 @@ int Menu_Main(void) if(config.noIosReload == 0) { OSForceFullRelaunch(); - nnupatcher(); SYSLaunchMenu(); + nnupatcher(); returnCode = EXIT_RELAUNCH_ON_LOAD; } else if(config.launchSysMenu)