diff --git a/include/xxd-embedded.h b/include/xxd-embedded.h index 8ac0617..ef04123 100644 --- a/include/xxd-embedded.h +++ b/include/xxd-embedded.h @@ -8,8 +8,8 @@ extern unsigned char checkra1n[]; extern unsigned int checkra1n_len; -extern unsigned char checkra1n_kpf_pongo[]; -extern unsigned int checkra1n_kpf_pongo_len; +extern unsigned char checkra1n_kpf_pongo_lzma[]; +extern unsigned int checkra1n_kpf_pongo_lzma_len; extern unsigned char ramdisk_dmg_lzma[]; extern unsigned int ramdisk_dmg_lzma_len; diff --git a/src/Makefile b/src/Makefile index 3b35254..273eaf9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -24,7 +24,7 @@ CFLAGS += -DNO_RAMDISK -DRAMDISK_COMPRESSED_SIZE=\"0\" BUILD_OPTIONS += NO_RAMDISK endif ifneq ($(NO_KPF),1) -OBJECTS += xxd-checkra1n-kpf-pongo.o +OBJECTS += xxd-checkra1n-kpf-pongo.lzma.o else CFLAGS += -DNO_KPF BUILD_OPTIONS += NO_KPF @@ -122,13 +122,8 @@ endif xxd-%.c: % xxd -iC $< > $@ -ifneq ($(NO_RAMDISK),1) -pongo_helper.o: pongo_helper.c $(wildcard ../include/*.h) ramdisk.dmg - $(CC) -c $(CFLAGS) -DRAMDISK_UNCOMPRESSED_SIZE="\"$$(wc -c < ramdisk.dmg | tr -d ' ')\"" $< -else -pongo_helper.o: pongo_helper.c $(wildcard ../include/*.h) - $(CC) -c $(CFLAGS) $< -endif +pongo_helper.o: pongo_helper.c $(wildcard ../include/*.h) ramdisk.dmg checkra1n-kpf-pongo + $(CC) -c $(CFLAGS) -DRAMDISK_UNCOMPRESSED_SIZE="\"$$(wc -c < ramdisk.dmg | tr -d ' ')\"" -DKPF_UNCOMPRESSED_SIZE="\"$$(wc -c < checkra1n-kpf-pongo | tr -d ' ')\"" $< %.o: %.c $(wildcard ../include/*.h) $(CC) -c $(CFLAGS) $< @@ -147,8 +142,11 @@ libcheckra1nhelper.dylib: chkstk.S checkra1n-kpf-pongo: curl -LO https://cdn.nickchan.lol/palera1n/artifacts/kpf/iOS15/checkra1n-kpf-pongo -ramdisk.dmg.lzma: ramdisk.dmg - xz --format=lzma -vf6ekT 0 ramdisk.dmg +%.lzma: % + xz --format=lzma -vf6ekT 0 $< + +checkra1n-kpf-pongo.lzma: checkra1n-kpf-pongo + xz --format=lzma -vf6ekT 0 checkra1n-kpf-pongo ramdisk.dmg: curl -LO https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg diff --git a/src/fake_embedded.c b/src/fake_embedded.c index 17dd279..5a6715d 100644 --- a/src/fake_embedded.c +++ b/src/fake_embedded.c @@ -1,8 +1,8 @@ #include #ifdef NO_KPF -unsigned char* checkra1n_kpf_pongo = NULL; -unsigned int checkra1n_kpf_pongo_len = 0; +unsigned char* checkra1n_kpf_pongo_lzma = NULL; +unsigned int checkra1n_kpf_pongo_lzma_len = 0; #endif #ifdef NO_RAMDISK diff --git a/src/main.c b/src/main.c index 7908664..b49368c 100644 --- a/src/main.c +++ b/src/main.c @@ -36,7 +36,7 @@ unsigned int verbose = 0; char xargs_cmd[0x270] = "xargs ", palerain_flags_cmd[0x30] = "deadbeef"; extern char** environ; -niarelap_file_t* kpf_to_upload_1 = &checkra1n_kpf_pongo; +niarelap_file_t* kpf_to_upload_1 = &checkra1n_kpf_pongo_lzma; niarelap_file_t* ramdisk_to_upload_1 = &ramdisk_dmg_lzma; niarelap_file_t* overlay_to_upload_1 = &binpack_dmg; @@ -74,19 +74,6 @@ int build_checks(void) { if (boyermoore_horspool_memmem(&checkra1n[0], checkra1n_len, (const unsigned char *)"[ra1npoc15-part] thanks to", strlen("[ra1npoc15-part] thanks to")) != NULL) { palerain_flags |= palerain_option_checkrain_is_clone; } -#endif -#ifndef NO_KPF - struct mach_header_64 *kpf_hdr = (struct mach_header_64 *)checkra1n_kpf_pongo; - if (kpf_hdr->magic != MH_MAGIC_64 && kpf_hdr->magic != MH_CIGAM_64) { - LOG(LOG_FATAL, "Broken build: Invalid kernel patchfinder: Not thin 64-bit Mach-O"); - return -1; - } else if (kpf_hdr->filetype != MH_KEXT_BUNDLE) { - LOG(LOG_FATAL, "Broken build: Invalid kernel patchfinder: Not a kext bundle"); - return -1; - } else if (kpf_hdr->cputype != CPU_TYPE_ARM64) { - LOG(LOG_FATAL, "Broken build: Invalid kernel patchfinder: CPU type is not arm64"); - return -1; - } #endif return 0; } diff --git a/src/optparse.c b/src/optparse.c index 6631c97..4004913 100644 --- a/src/optparse.c +++ b/src/optparse.c @@ -211,7 +211,7 @@ int optparse(int argc, char* argv[]) { return 1; break; case 'K': - if (override_file(&override_kpf, kpf_to_upload, &checkra1n_kpf_pongo_len, optarg)) + if (override_file(&override_kpf, kpf_to_upload, &checkra1n_kpf_pongo_lzma_len, optarg)) return 1; struct mach_header_64* hdr = (struct mach_header_64*)override_kpf.ptr; if (hdr->magic != MH_MAGIC_64 && hdr->magic != MH_CIGAM_64) { @@ -327,7 +327,7 @@ int optparse(int argc, char* argv[]) { snprintf(palerain_flags_cmd, 0x30, "palera1n_flags 0x%" PRIx64, palerain_flags); LOG(LOG_VERBOSE3, "palerain_flags: %s", palerain_flags_cmd); if (override_kpf.magic == OVERRIDE_MAGIC) { - LOG(LOG_VERBOSE4, "kpf override length %u -> %u", override_kpf.orig_len, checkra1n_kpf_pongo_len); + LOG(LOG_VERBOSE4, "kpf override length %u -> %u", override_kpf.orig_len, checkra1n_kpf_pongo_lzma_len); LOG(LOG_VERBOSE4, "kpf override ptr %p -> %p", override_kpf.orig_ptr, **kpf_to_upload); } if (override_ramdisk.magic == OVERRIDE_MAGIC) { @@ -360,7 +360,7 @@ int optparse(int argc, char* argv[]) { if (!((palerain_flags & palerain_option_pongo_exit) || (palerain_flags & palerain_option_pongo_exit))) { #ifdef NO_KPF - if (checkra1n_kpf_pongo_len == 0) + if (checkra1n_kpf_pongo_lzma_len == 0) { LOG(LOG_FATAL, "kernel patchfinder omitted in build but no override specified"); return -1; diff --git a/src/pongo_helper.c b/src/pongo_helper.c index 3cf20d6..74f5d43 100644 --- a/src/pongo_helper.c +++ b/src/pongo_helper.c @@ -41,8 +41,12 @@ void *pongo_usb_callback(stuff_t *arg) { issue_pongo_command(handle, NULL); issue_pongo_command(handle, "fuse lock"); issue_pongo_command(handle, "sep auto"); - upload_pongo_file(handle, **kpf_to_upload, checkra1n_kpf_pongo_len); - issue_pongo_command(handle, "modload"); + upload_pongo_file(handle, **kpf_to_upload, checkra1n_kpf_pongo_lzma_len); + if (*kpf_to_upload == &checkra1n_kpf_pongo_lzma) { + issue_pongo_command(handle, "modload " KPF_UNCOMPRESSED_SIZE); + } else { + issue_pongo_command(handle, "modload"); + } issue_pongo_command(handle, palerain_flags_cmd); #ifdef NO_RAMDISK if (ramdisk_dmg_lzma_len != 0) @@ -50,7 +54,7 @@ void *pongo_usb_callback(stuff_t *arg) { { // strncat(xargs_cmd, " rootdev=md0", 0x270 - strlen(xargs_cmd) - 1); upload_pongo_file(handle, **ramdisk_to_upload, ramdisk_dmg_lzma_len); - if (&(**ramdisk_to_upload) == &ramdisk_dmg_lzma) + if ((*ramdisk_to_upload) == &ramdisk_dmg_lzma) issue_pongo_command(handle, "ramdisk " RAMDISK_UNCOMPRESSED_SIZE); else { issue_pongo_command(handle, "ramdisk");