mirror of
https://github.com/d0k3/SafeB9SInstaller.git
synced 2025-06-26 13:42:45 +00:00
Safety check for B9S magic in FIRM
This commit is contained in:
parent
94e324df8b
commit
490da2e17b
@ -132,6 +132,11 @@ u32 SafeB9SInstaller(void) {
|
||||
statusFirm = STATUS_RED;
|
||||
return 1;
|
||||
}
|
||||
if (CheckBoot9Strap(FIRM_BUFFER) != 0) {
|
||||
snprintf(msgFirm, 64, "not boot9strap");
|
||||
statusFirm = STATUS_RED;
|
||||
return 1;
|
||||
}
|
||||
snprintf(msgFirm, 64, "loaded & verified");
|
||||
statusFirm = STATUS_GREEN;
|
||||
ShowInstallerStatus();
|
||||
|
@ -5,6 +5,9 @@
|
||||
#define FIRM_MAGIC 'F', 'I', 'R', 'M'
|
||||
#define FIRM_MAX_SIZE 0x400000 // 4MB, due to FIRM partition size
|
||||
|
||||
#define B9S_MAGIC "B9S"
|
||||
#define B9S_OFFSET (0x40 - strnlen(B9S_MAGIC, 0x10))
|
||||
|
||||
// see: https://www.3dbrew.org/wiki/FIRM#Firmware_Section_Headers
|
||||
typedef struct {
|
||||
u32 offset;
|
||||
@ -110,3 +113,7 @@ u32 CheckFirmSigHax(void* firm) {
|
||||
FirmHeader* header = (FirmHeader*) firm;
|
||||
return (sha_cmp(sighaxHash, header->signature, 0x100, SHA256_MODE) == 0) ? 0 : 1;
|
||||
}
|
||||
|
||||
u32 CheckBoot9Strap(void* firm) {
|
||||
return (memcmp(((u8*) firm) + B9S_OFFSET, B9S_MAGIC, strnlen(B9S_MAGIC, 0x10)) == 0) ? 0 : 1;
|
||||
}
|
||||
|
@ -5,3 +5,4 @@
|
||||
u32 ValidateFirm(void* firm, u8* firm_sha, u32 firm_size, char* output);
|
||||
u32 ValidateSector(void* sector);
|
||||
u32 CheckFirmSigHax(void* firm);
|
||||
u32 CheckBoot9Strap(void* firm);
|
||||
|
Loading…
x
Reference in New Issue
Block a user