mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 03:11:16 +00:00
hekate: expose autorcm check
This commit is contained in:
parent
471b99366d
commit
8b1486c74b
2 changed files with 35 additions and 35 deletions
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
* Copyright (c) 2018-2022 CTCaer
|
* Copyright (c) 2018-2024 CTCaer
|
||||||
* Copyright (c) 2018 Reisyukaku
|
* Copyright (c) 2018 Reisyukaku
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
@ -32,22 +32,14 @@ extern hekate_config h_cfg;
|
||||||
#pragma GCC push_options
|
#pragma GCC push_options
|
||||||
#pragma GCC optimize ("Os")
|
#pragma GCC optimize ("Os")
|
||||||
|
|
||||||
void _toggle_autorcm(bool enable)
|
static void _toggle_autorcm(bool enable)
|
||||||
{
|
{
|
||||||
gfx_clear_partial_grey(0x1B, 0, 1256);
|
gfx_clear_partial_grey(0x1B, 0, 1256);
|
||||||
gfx_con_setpos(0, 0);
|
gfx_con_setpos(0, 0);
|
||||||
|
|
||||||
if (!emmc_initialize(false))
|
|
||||||
{
|
|
||||||
EPRINTF("Failed to init eMMC.");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
u8 *tempbuf = (u8 *)malloc(0x200);
|
|
||||||
emmc_set_partition(EMMC_BOOT0);
|
|
||||||
|
|
||||||
int i, sect = 0;
|
int i, sect = 0;
|
||||||
u8 corr_mod0, mod1;
|
u8 corr_mod0, mod1;
|
||||||
|
u8 *tempbuf = (u8 *)malloc(0x200);
|
||||||
|
|
||||||
// Get the correct RSA modulus byte masks.
|
// Get the correct RSA modulus byte masks.
|
||||||
nx_emmc_get_autorcm_masks(&corr_mod0, &mod1);
|
nx_emmc_get_autorcm_masks(&corr_mod0, &mod1);
|
||||||
|
@ -70,7 +62,6 @@ void _toggle_autorcm(bool enable)
|
||||||
}
|
}
|
||||||
|
|
||||||
free(tempbuf);
|
free(tempbuf);
|
||||||
emmc_end();
|
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
gfx_printf("%kAutoRCM mode enabled!%k", TXT_CLR_ORANGE, TXT_CLR_DEFAULT);
|
gfx_printf("%kAutoRCM mode enabled!%k", TXT_CLR_ORANGE, TXT_CLR_DEFAULT);
|
||||||
|
@ -78,12 +69,34 @@ void _toggle_autorcm(bool enable)
|
||||||
gfx_printf("%kAutoRCM mode disabled!%k", TXT_CLR_GREENISH, TXT_CLR_DEFAULT);
|
gfx_printf("%kAutoRCM mode disabled!%k", TXT_CLR_GREENISH, TXT_CLR_DEFAULT);
|
||||||
gfx_printf("\n\nPress any key...\n");
|
gfx_printf("\n\nPress any key...\n");
|
||||||
|
|
||||||
out:
|
|
||||||
btn_wait();
|
btn_wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _enable_autorcm() { _toggle_autorcm(true); }
|
static void _enable_autorcm() { _toggle_autorcm(true); }
|
||||||
void _disable_autorcm() { _toggle_autorcm(false); }
|
static void _disable_autorcm() { _toggle_autorcm(false); }
|
||||||
|
|
||||||
|
bool tools_autorcm_enabled()
|
||||||
|
{
|
||||||
|
u8 mod0, mod1;
|
||||||
|
u8 *tempbuf = (u8 *)malloc(0x200);
|
||||||
|
|
||||||
|
// Get the correct RSA modulus byte masks.
|
||||||
|
nx_emmc_get_autorcm_masks(&mod0, &mod1);
|
||||||
|
|
||||||
|
// Get 1st RSA modulus.
|
||||||
|
emmc_set_partition(EMMC_BOOT0);
|
||||||
|
sdmmc_storage_read(&emmc_storage, 0x200 / EMMC_BLOCKSIZE, 1, tempbuf);
|
||||||
|
|
||||||
|
// Check if 2nd byte of modulus is correct.
|
||||||
|
bool enabled = false;
|
||||||
|
if (tempbuf[0x11] == mod1)
|
||||||
|
if (tempbuf[0x10] != mod0)
|
||||||
|
enabled = true;
|
||||||
|
|
||||||
|
free(tempbuf);
|
||||||
|
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
void menu_autorcm()
|
void menu_autorcm()
|
||||||
{
|
{
|
||||||
|
@ -98,9 +111,6 @@ void menu_autorcm()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do a simple check on the main BCT.
|
|
||||||
bool disabled = true;
|
|
||||||
|
|
||||||
if (!emmc_initialize(false))
|
if (!emmc_initialize(false))
|
||||||
{
|
{
|
||||||
EPRINTF("Failed to init eMMC.");
|
EPRINTF("Failed to init eMMC.");
|
||||||
|
@ -109,21 +119,8 @@ void menu_autorcm()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 mod0, mod1;
|
// Do a simple check on the main BCT.
|
||||||
// Get the correct RSA modulus byte masks.
|
bool enabled = tools_autorcm_enabled();
|
||||||
nx_emmc_get_autorcm_masks(&mod0, &mod1);
|
|
||||||
|
|
||||||
u8 *tempbuf = (u8 *)malloc(0x200);
|
|
||||||
emmc_set_partition(EMMC_BOOT0);
|
|
||||||
sdmmc_storage_read(&emmc_storage, 0x200 / EMMC_BLOCKSIZE, 1, tempbuf);
|
|
||||||
|
|
||||||
// Check if 2nd byte of modulus is correct.
|
|
||||||
if (tempbuf[0x11] == mod1)
|
|
||||||
if (tempbuf[0x10] != mod0)
|
|
||||||
disabled = false;
|
|
||||||
|
|
||||||
free(tempbuf);
|
|
||||||
emmc_end();
|
|
||||||
|
|
||||||
// Create AutoRCM menu.
|
// Create AutoRCM menu.
|
||||||
ment_t *ments = (ment_t *)malloc(sizeof(ment_t) * 6);
|
ment_t *ments = (ment_t *)malloc(sizeof(ment_t) * 6);
|
||||||
|
@ -135,7 +132,7 @@ void menu_autorcm()
|
||||||
|
|
||||||
ments[2].type = MENT_CAPTION;
|
ments[2].type = MENT_CAPTION;
|
||||||
ments[3].type = MENT_CHGLINE;
|
ments[3].type = MENT_CHGLINE;
|
||||||
if (disabled)
|
if (!enabled)
|
||||||
{
|
{
|
||||||
ments[2].caption = "Status: Disabled!";
|
ments[2].caption = "Status: Disabled!";
|
||||||
ments[2].color = TXT_CLR_GREENISH;
|
ments[2].color = TXT_CLR_GREENISH;
|
||||||
|
@ -156,6 +153,8 @@ void menu_autorcm()
|
||||||
menu_t menu = {ments, "This corrupts BOOT0!", 0, 0};
|
menu_t menu = {ments, "This corrupts BOOT0!", 0, 0};
|
||||||
|
|
||||||
tui_do_menu(&menu);
|
tui_do_menu(&menu);
|
||||||
|
|
||||||
|
emmc_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC pop_options
|
#pragma GCC pop_options
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
* Copyright (c) 2018-2022 CTCaer
|
* Copyright (c) 2018-2024 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
@ -19,5 +19,6 @@
|
||||||
#define _FE_TOOLS_H_
|
#define _FE_TOOLS_H_
|
||||||
|
|
||||||
void menu_autorcm();
|
void menu_autorcm();
|
||||||
|
bool tools_autorcm_enabled();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue