From 939965b5a0c6cb3ae5810ba8a49c64bc4b751d02 Mon Sep 17 00:00:00 2001 From: Aurora Date: Thu, 14 Apr 2016 17:10:55 +0200 Subject: [PATCH] Cleanup --- Makefile | 16 +++++++++------- injector/source/patcher.c | 14 +++++++++----- source/config.c | 2 +- source/crypto.c | 28 ++++------------------------ source/crypto.h | 1 - source/emunand.c | 2 +- source/fatfs/diskio.c | 13 ++----------- source/firm.c | 15 ++++++++------- source/fs.c | 5 ++--- source/utils.c | 3 ++- 10 files changed, 38 insertions(+), 61 deletions(-) diff --git a/Makefile b/Makefile index cbe4fbb..5c6351b 100644 --- a/Makefile +++ b/Makefile @@ -33,6 +33,8 @@ objects = $(patsubst $(dir_source)/%.s, $(dir_build)/%.o, \ $(patsubst $(dir_source)/%.c, $(dir_build)/%.o, \ $(call rwildcard, $(dir_source), *.s *.c))) +bundled = $(dir_build)/patches.h $(dir_build)/loader.h $(dir_build)/screeninit.h + .PHONY: all all: launcher a9lh ninjhax @@ -82,6 +84,12 @@ $(dir_out)/3ds/$(name): $(dir_out) $(dir_out)/$(name).zip: launcher a9lh ninjhax @cd "$(@D)" && zip -9 -r $(name) * +$(dir_build)/main.bin: $(dir_build)/main.elf + $(OC) -S -O binary $< $@ + +$(dir_build)/main.elf: $(objects) + $(CC) $(LDFLAGS) -T linker.ld $(OUTPUT_OPTION) $^ + $(dir_build)/patches.h: $(dir_patches)/emunand.s $(dir_patches)/reboot.s $(dir_injector)/Makefile @mkdir -p "$(@D)" @armips $< @@ -100,16 +108,10 @@ $(dir_build)/screeninit.h: $(dir_screeninit)/Makefile @mv $(dir_screeninit)/screeninit.bin $(@D) @bin2c -o $@ -n screeninit $(@D)/screeninit.bin -$(dir_build)/main.bin: $(dir_build)/main.elf - $(OC) -S -O binary $< $@ - -$(dir_build)/main.elf: $(objects) - $(CC) $(LDFLAGS) -T linker.ld $(OUTPUT_OPTION) $^ - $(dir_build)/memory.o : CFLAGS += -O3 $(dir_build)/config.o : CFLAGS += -DCONFIG_TITLE="\"$(name) $(version) configuration\"" -$(dir_build)/%.o: $(dir_source)/%.c $(dir_build)/patches.h $(dir_build)/loader.h $(dir_build)/screeninit.h +$(dir_build)/%.o: $(dir_source)/%.c $(bundled) @mkdir -p "$(@D)" $(COMPILE.c) $(OUTPUT_OPTION) $< diff --git a/injector/source/patcher.c b/injector/source/patcher.c index b42e431..2ac6658 100644 --- a/injector/source/patcher.c +++ b/injector/source/patcher.c @@ -125,10 +125,9 @@ static int loadTitleLocaleConfig(u64 progId, u8 *regionId, u8 *languageId) char path[] = "/aurei/locales/0000000000000000.txt"; - u32 i = 30; - while(progId > 0) { + static u32 i = 30; static const char hexDigits[] = "0123456789ABCDEF"; path[i--] = hexDigits[(u32)(progId & 0xF)]; progId >>= 4; @@ -146,22 +145,27 @@ static int loadTitleLocaleConfig(u64 progId, u8 *regionId, u8 *languageId) if(!R_SUCCEEDED(ret) || total < 6) return -1; - static const char *regions[] = {"JPN", "USA", "EUR", "AUS", "CHN", "KOR", "TWN"}; - static const char *languages[] = {"JP", "EN", "FR", "DE", "IT", "ES", "ZH", "KO", "NL", "PT", "RU", "TW"}; - for(u32 i = 0; i < 7; ++i) + { + static const char *regions[] = {"JPN", "USA", "EUR", "AUS", "CHN", "KOR", "TWN"}; + if(memcmp(buf, regions[i], 3) == 0) { *regionId = (u8)i; break; } + } for(u32 i = 0; i < 12; ++i) + { + static const char *languages[] = {"JP", "EN", "FR", "DE", "IT", "ES", "ZH", "KO", "NL", "PT", "RU", "TW"}; + if(memcmp(buf + 4, languages[i], 2) == 0) { *languageId = (u8)i; break; } + } } return ret; diff --git a/source/config.c b/source/config.c index 2eb1d7b..c52e70d 100644 --- a/source/config.c +++ b/source/config.c @@ -72,11 +72,11 @@ void configureCFW(const char *configPath) } endPos += SPACING_Y / 2; - u32 color = COLOR_RED; //Display all the normal options in white except for the first one for(u32 i = 0; i < singleOptionsAmount; i++) { + static u32 color = COLOR_RED; singleOptions[i].posY = endPos + SPACING_Y; endPos = drawString(singleOptionsText[i], 10, singleOptions[i].posY, color); if(singleOptions[i].enabled) drawCharacter(selected, 10 + SPACING_X, singleOptions[i].posY, color); diff --git a/source/crypto.c b/source/crypto.c index 3321044..b0262c6 100755 --- a/source/crypto.c +++ b/source/crypto.c @@ -284,11 +284,11 @@ static u32 fatStart; //Initialize the CTRNAND crypto void ctrNandInit(void) { - u8 nandCid[0x10]; + u8 cid[0x10]; u8 shaSum[0x20]; - sdmmc_get_cid(1, (u32 *)nandCid); - sha(shaSum, nandCid, 0x10, SHA_256_MODE); + sdmmc_get_cid(1, (u32 *)cid); + sha(shaSum, cid, 0x10, SHA_256_MODE); memcpy(nandCTR, shaSum, 0x10); if(console) @@ -329,33 +329,13 @@ u32 ctrNandRead(u32 sector, u32 sectorCount, u8 *outbuf) return result; } -//Encrypt and write to the selected CTRNAND -u32 ctrNandWrite(u32 sector, u32 sectorCount, u8 *inbuf) -{ - u8 tmpCTR[0x10]; - memcpy(tmpCTR, nandCTR, 0x10); - aes_advctr(tmpCTR, (sector + fatStart) * 0x200 / AES_BLOCK_SIZE, AES_INPUT_BE | AES_INPUT_NORMAL); - - //Encrypt - aes_use_keyslot(nandSlot); - aes(inbuf, inbuf, sectorCount * 0x200 / AES_BLOCK_SIZE, tmpCTR, AES_CTR_MODE, AES_INPUT_BE | AES_INPUT_NORMAL); - - //Write - if(!firmSource) - return sdmmc_nand_writesectors(sector + fatStart, sectorCount, inbuf); - - sector += emuOffset; - return sdmmc_sdcard_writesectors(sector + fatStart, sectorCount, inbuf); -} - //Decrypt a FIRM ExeFS void decryptExeFs(u8 *inbuf) { u8 *exeFsOffset = inbuf + *(u32 *)(inbuf + 0x1A0) * 0x200; u32 exeFsSize = *(u32 *)(inbuf + 0x1A4) * 0x200; - u8 ncchCTR[0x10]; + u8 ncchCTR[0x10] = {0}; - memset32(ncchCTR, 0, 0x10); for(u32 i = 0; i < 8; i++) ncchCTR[7 - i] = *(inbuf + 0x108 + i); ncchCTR[8] = 2; diff --git a/source/crypto.h b/source/crypto.h index 30c9a2c..1110406 100755 --- a/source/crypto.h +++ b/source/crypto.h @@ -85,6 +85,5 @@ extern u32 emuOffset, console, firmSource; void ctrNandInit(void); u32 ctrNandRead(u32 sector, u32 sectorCount, u8 *outbuf); -u32 ctrNandWrite(u32 sector, u32 sectorCount, u8 *inbuf); void decryptExeFs(u8 *inbuf); void arm9Loader(u8 *arm9Section, u32 mode); \ No newline at end of file diff --git a/source/emunand.c b/source/emunand.c index 9f82da2..2059dcd 100644 --- a/source/emunand.c +++ b/source/emunand.c @@ -10,7 +10,7 @@ void getEmunandSect(u32 *off, u32 *head, u32 *emuNAND) { - u8 *const temp = (u8 *)0x24300000; + static u8 *const temp = (u8 *)0x24300000; const u32 nandSize = getMMCDevice(0)->total_size; u32 nandOffset = *emuNAND == 1 ? 0 : diff --git a/source/fatfs/diskio.c b/source/fatfs/diskio.c index 0a4d885..21b3051 100644 --- a/source/fatfs/diskio.c +++ b/source/fatfs/diskio.c @@ -94,17 +94,8 @@ DRESULT disk_write ( UINT count /* Number of sectors to write */ ) { - switch(pdrv) - { - case SDCARD: - if(sdmmc_sdcard_writesectors(sector, count, (BYTE *)buff)) - return RES_PARERR; - break; - case CTRNAND: - if(ctrNandWrite(sector, count, (BYTE *)buff)) - return RES_PARERR; - break; - } + if(pdrv == SDCARD && sdmmc_sdcard_writesectors(sector, count, (BYTE *)buff)) + return RES_PARERR; return RES_OK; } diff --git a/source/firm.c b/source/firm.c index ad5e40f..802cb21 100755 --- a/source/firm.c +++ b/source/firm.c @@ -21,13 +21,10 @@ static firmHeader *const firm = (firmHeader *)0x24000000; static const firmSectionHeader *section; -static const char *firmFolders[3][2] = {{ "00000002", "20000002" }, - { "00000102", "20000102" }, - { "00000202", "20000202" }}; u32 config, console, - emuOffset, - firmSource; + firmSource, + emuOffset; void main(void) { @@ -175,7 +172,7 @@ void main(void) Just the no-forcing flag being set is not enough */ if((newConfig & 0x2F) != (config & 0x3F)) { - //Preserve user settings (first 2 bytes) + //Preserve user settings (last 26 bits) newConfig |= config & 0xFFFFFFC0; fileWrite(&newConfig, configPath, 4); @@ -215,6 +212,10 @@ static inline void loadFirm(u32 firmType, u32 externalFirm) if(!firmSize) { + const char *firmFolders[3][2] = {{ "00000002", "20000002" }, + { "00000102", "20000102" }, + { "00000202", "20000202" }}; + firmRead(firm, firmFolders[firmType][console]); decryptExeFs((u8 *)firm); } @@ -363,7 +364,7 @@ static inline void patchTwlAgbFirm(u32 firmType) firm->arm9Entry = (u8 *)0x801301C; } - static const patchData twlPatches[] = { + const patchData twlPatches[] = { {{0x1650C0, 0x165D64}, {{ 6, 0x00, 0x20, 0x4E, 0xB0, 0x70, 0xBD }}, 0}, {{0x173A0E, 0x17474A}, { .type1 = 0x2001 }, 1}, {{0x174802, 0x17553E}, { .type1 = 0x2000 }, 2}, diff --git a/source/fs.c b/source/fs.c index 3f07333..5140e0e 100644 --- a/source/fs.c +++ b/source/fs.c @@ -114,12 +114,11 @@ void firmRead(void *dest, const char *firmFolder) //Complete the string with the .app name memcpy(&path[34], "/00000000.app", 14); - //Last digit of the .app - u32 i = 42; - //Convert back the .app name from integer to array while(id > 0) { + //Last digit of the .app + static u32 i = 42; static const char hexDigits[] = "0123456789ABCDEF"; path[i--] = hexDigits[id & 0xF]; id >>= 4; diff --git a/source/utils.c b/source/utils.c index 1a72965..d8f7047 100644 --- a/source/utils.c +++ b/source/utils.c @@ -18,7 +18,8 @@ u32 waitInput(void) //Wait for no keys to be pressed while(HID_PAD); - do { + do + { //Wait for a key to be pressed while(!HID_PAD);