Got rid of CakeHax, patched CakeBrah to load arm9loaderhax.bin directly (lifting size restrictions in the process), got rid of the pathchanger (to have a custom path you can now enable the option and write it in a /luma/path.txt file, it must start with a / (this path is also picked up by the patched CakeBrah loader), fixed loading SafeA9LHInstaller and other payloads which need the OTP hash if having a PIN, fixed writing a file smaller than the existing one not removing the extra size, slightly changed the PIN format, added support for the alternate framebuffer and made the splash screen use it (it is now displayed all at once), fixed screen issues from CakeBrah
This commit is contained in:
116
diffs/1.diff
Normal file
116
diffs/1.diff
Normal file
@@ -0,0 +1,116 @@
|
||||
diff -uNr a/include/brahma.h b/include/brahma.h
|
||||
--- a/include/brahma.h 2016-09-21 16:18:56.246840000 +0200
|
||||
+++ b/include/brahma.h 2016-09-21 16:20:28.975957322 +0200
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
u32 brahma_init (void);
|
||||
u32 brahma_exit (void);
|
||||
-s32 load_arm9_payload_offset (char *filename, u32 offset, u32 max_psize);
|
||||
+s32 load_arm9_payload_offset (void);
|
||||
s32 load_arm9_payload_from_mem (u8* data, u32 dsize);
|
||||
void redirect_codeflow (u32 *dst_addr, u32 *src_addr);
|
||||
s32 map_arm9_payload (void);
|
||||
@@ -13,8 +13,6 @@
|
||||
s32 get_exploit_data (struct exploit_data *data);
|
||||
s32 firm_reboot ();
|
||||
|
||||
-#define load_arm9_payload(filename) load_arm9_payload_offset(filename, 0, 0)
|
||||
-
|
||||
#define BRAHMA_NETWORK_PORT 80
|
||||
|
||||
#define ARM_JUMPOUT 0xE51FF004 // LDR PC, [PC, -#04]
|
||||
diff -uNr a/source/brahma.c b/source/brahma.c
|
||||
--- a/source/brahma.c 2016-09-21 16:18:56.246840000 +0200
|
||||
+++ b/source/brahma.c 2016-09-21 16:21:33.240730777 +0200
|
||||
@@ -179,39 +179,56 @@
|
||||
return g_ext_arm9_loaded;
|
||||
}
|
||||
|
||||
-/* reads ARM9 payload from a given path.
|
||||
- filename: full path of payload
|
||||
- offset: offset of the payload in the file
|
||||
- max_psize: the maximum size of the payload that should be loaded (if 0, ARM9_MAX_PAYLOAD_SIZE. Should be smaller than ARM9_MAX_PAYLOAD_SIZE)
|
||||
+/* reads Luma payload
|
||||
returns: 0 on failure, 1 on success */
|
||||
-s32 load_arm9_payload_offset (char *filename, u32 offset, u32 max_psize) {
|
||||
+s32 load_arm9_payload_offset (void) {
|
||||
s32 result = 0;
|
||||
u32 fsize = 0;
|
||||
u32 psize = 0;
|
||||
+ bool use_default = true;
|
||||
+ FILE *f;
|
||||
|
||||
- if (max_psize == 0 || max_psize > ARM9_PAYLOAD_MAX_SIZE)
|
||||
- max_psize = ARM9_PAYLOAD_MAX_SIZE;
|
||||
+ FILE *p = fopen("/luma/path.txt", "r");
|
||||
|
||||
- if (!filename)
|
||||
- return result;
|
||||
+ if (p) {
|
||||
+ fseek(p , 0, SEEK_END);
|
||||
+ psize = ftell(p);
|
||||
+ if (psize < 39 && psize > 5) {
|
||||
+ char path[psize + 1];
|
||||
+
|
||||
+ fseek(p, 0, SEEK_SET);
|
||||
+ u32 bytes_read = fread(path, 1, psize, p);
|
||||
+
|
||||
+ if (bytes_read == psize) {
|
||||
+ if (path[psize - 1] == 0xA) psize--;
|
||||
+ if (path[psize - 1] == 0xD) psize--;
|
||||
+ if (psize > 5 && path[0] == '/' && memcmp(&path[psize - 4], ".bin", 4)) {
|
||||
+ path[psize] = 0;
|
||||
+ f = fopen(path, "rb");
|
||||
+ use_default = false;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ fclose(p);
|
||||
+ }
|
||||
+
|
||||
+ if (use_default) f = fopen("/arm9loaderhax.bin", "rb");
|
||||
+
|
||||
+ u32 max_size = ARM9_PAYLOAD_MAX_SIZE;
|
||||
|
||||
- FILE *f = fopen(filename, "rb");
|
||||
if (f) {
|
||||
- fseek(f , 0, SEEK_END);
|
||||
+ fseek(f, 0, SEEK_END);
|
||||
fsize = ftell(f);
|
||||
|
||||
- if (offset < fsize) {
|
||||
- psize = fsize - offset;
|
||||
- if (psize > max_psize)
|
||||
- psize = max_psize;
|
||||
-
|
||||
- g_ext_arm9_size = psize;
|
||||
-
|
||||
- fseek(f, offset, SEEK_SET);
|
||||
- if (psize >= 8) {
|
||||
- u32 bytes_read = fread(g_ext_arm9_buf, 1, psize, f);
|
||||
- result = (g_ext_arm9_loaded = (bytes_read == psize));
|
||||
- }
|
||||
+ if (fsize > max_size)
|
||||
+ fsize = max_size;
|
||||
+
|
||||
+ g_ext_arm9_size = fsize;
|
||||
+
|
||||
+ fseek(f, 0, SEEK_SET);
|
||||
+ if (fsize >= 8) {
|
||||
+ u32 bytes_read = fread(g_ext_arm9_buf, 1, fsize, f);
|
||||
+ result = (g_ext_arm9_loaded = (bytes_read == fsize));
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
diff -uNr a/source/main.c b/source/main.c
|
||||
--- a/source/main.c 2016-09-21 16:18:56.246840000 +0200
|
||||
+++ b/source/main.c 2016-09-21 16:20:28.979957377 +0200
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
int main (void) {
|
||||
if (brahma_init()) {
|
||||
- if (load_arm9_payload_offset("/" LAUNCHER_PATH, 0x12000, 0x10000) != 1)
|
||||
+ if (load_arm9_payload_offset() != 1)
|
||||
goto error;
|
||||
firm_reboot();
|
||||
brahma_exit();
|
||||
11
diffs/2.diff
Normal file
11
diffs/2.diff
Normal file
@@ -0,0 +1,11 @@
|
||||
diff -uNr a/source/main.c b/source/main.c
|
||||
--- a/source/main.c 2016-09-11 01:04:25.665231884 +0200
|
||||
+++ b/source/main.c 2016-09-14 12:36:28.601439550 +0200
|
||||
@@ -9,6 +9,7 @@
|
||||
#endif
|
||||
|
||||
int main (void) {
|
||||
+ svcSleepThread(2500 * 1000000ULL);
|
||||
if (brahma_init()) {
|
||||
if (load_arm9_payload_offset() != 1)
|
||||
goto error;
|
||||
Reference in New Issue
Block a user