From 3d29bb8dc5057f30698b348d7c67a3dfe1bd2292 Mon Sep 17 00:00:00 2001 From: Nick Chan Date: Sun, 24 May 2026 22:16:54 +0800 Subject: [PATCH] tries to hook checkra1n --- include/xxd-embedded.h | 2 +- src/Makefile | 17 +++---- src/exec_checkra1n.c | 30 ++++++------ src/helper/Makefile | 27 +++++++++++ src/{ => helper}/chkstk.S | 5 ++ src/helper/helper.c | 83 ++++++++++++++++++++++++++++++++++ src/helper/hook_arm64.c | 65 ++++++++++++++++++++++++++ src/helper/payloads/t7000.bin | Bin 0 -> 2816 bytes src/helper/payloads/t8011.bin | Bin 0 -> 3408 bytes src/helper/payloads/t8012.bin | Bin 0 -> 2836 bytes src/helper/phookra1n.h | 20 ++++++++ src/usb.xml | 2 + 12 files changed, 227 insertions(+), 24 deletions(-) create mode 100644 src/helper/Makefile rename src/{ => helper}/chkstk.S (94%) create mode 100644 src/helper/helper.c create mode 100644 src/helper/hook_arm64.c create mode 100644 src/helper/payloads/t7000.bin create mode 100644 src/helper/payloads/t8011.bin create mode 100644 src/helper/payloads/t8012.bin create mode 100644 src/helper/phookra1n.h diff --git a/include/xxd-embedded.h b/include/xxd-embedded.h index e63d671..328b2cc 100644 --- a/include/xxd-embedded.h +++ b/include/xxd-embedded.h @@ -22,7 +22,7 @@ extern uint32_t binpack_dmg_len; extern uint8_t Pongo_bin[]; extern uint32_t Pongo_bin_len; -#if defined(__APPLE__) && (TARGET_OS_IPHONE || defined(DEV_BUILD) || defined(FORCE_HELPER)) +#if defined(__APPLE__) extern uint8_t libcheckra1nhelper_dylib[]; extern uint32_t libcheckra1nhelper_dylib_len; #endif diff --git a/src/Makefile b/src/Makefile index 11ba5f8..b238d7e 100644 --- a/src/Makefile +++ b/src/Makefile @@ -4,6 +4,8 @@ OBJDIR = obj GENDIR = gen RESOURCES_DIR = resources +export RESOURCES_DIR OBJDIR GENDIR + C_SRC = $(wildcard *.c) OBJS = $(patsubst %,$(OBJDIR)/%,$(C_SRC:.c=.c.o)) @@ -23,13 +25,9 @@ ifeq ($(DFUHELPER_AUTO_ONLY),1) CFLAGS += -DDFUHELPER_AUTO_ONLY endif -ifeq ($(FORCE_HELPER),1) -ifneq ($(NO_EMBED_HELPER),1) +ifeq ($(TARGET_OS),Darwin) C_SRC += $(GENDIR)/gen-libcheckra1nhelper.dylib.c endif -CFLAGS += -DFORCE_HELPER -BUILD_OPTIONS += FORCE_HELPER -endif ifneq ($(NO_RAMDISK),1) C_SRC += $(GENDIR)/gen-ramdisk.dmg.lzma.c @@ -149,7 +147,6 @@ $(GENDIR)/gen-%.c: $(RESOURCES_DIR)/% echo '#include ' > $(RESOURCES_DIR)/../$@ cd $(RESOURCES_DIR) && xxd -iC $$(echo $< | cut -d/ -f2) | sed -e 's/unsigned int/uint32_t/' -e 's/unsigned char/uint8_t/' >> ../$@ - $(OBJDIR)/pongo_helper.c.o: pongo_helper.c $(wildcard ../include/*.h) $(RESOURCES_DIR)/ramdisk.dmg $(RESOURCES_DIR)/checkra1n-kpf-pongo $(CC) -c -o $@ $(CFLAGS) -DRAMDISK_UNCOMPRESSED_SIZE="\"$$(wc -c < $(RESOURCES_DIR)/ramdisk.dmg | tr -d ' ')\"" -DKPF_UNCOMPRESSED_SIZE="\"$$(wc -c < $(RESOURCES_DIR)/checkra1n-kpf-pongo | tr -d ' ')\"" $< @@ -167,8 +164,8 @@ ifneq (,$(findstring version-min=, $(CFLAGS))) endif endif -$(RESOURCES_DIR)/libcheckra1nhelper.dylib: chkstk.S - $(CC) $(CFLAGS) $(LDFLAGS) -shared chkstk.S -o $@ +$(RESOURCES_DIR)/libcheckra1nhelper.dylib: + $(MAKE) -C helper $(RESOURCES_DIR)/checkra1n-kpf-pongo: curl -Lfo $@ https://cdn.nickchan.lol/palera1n/artifacts/kpf/iOS15/checkra1n-kpf-pongo @@ -189,9 +186,9 @@ $(RESOURCES_DIR)/Pongo.bin: curl -Lfo $@ https://cdn.nickchan.lol/palera1n/artifacts/kpf/iOS15/Pongo.bin clean: - rm -rf $(OBJDIR)/*.o $(GENDIR)/*.c $(GENDIR)/*.o palera1n palera1n.dSYM libcheckra1nhelper.dylib + rm -rf $(OBJDIR)/*.o $(GENDIR)/*.c $(GENDIR)/*.o palera1n palera1n.dSYM $(RESOURCES_DIR)/libcheckra1nhelper.dylib distclean: clean rm -rf $(RESOURCES_DIR)/* -.PHONY: all clean +.PHONY: all clean $(RESOURCES_DIR)/libcheckra1nhelper.dylib diff --git a/src/exec_checkra1n.c b/src/exec_checkra1n.c index 113ce61..aeaf940 100644 --- a/src/exec_checkra1n.c +++ b/src/exec_checkra1n.c @@ -100,16 +100,23 @@ int exec_checkra1n(void) { return -1; } } -#if defined(__APPLE__) && defined(__arm64__) && (TARGET_OS_IPHONE || defined(FORCE_HELPER)) +#if defined(__APPLE__) + char resolved_c1_path[PATH_MAX], *resolved; + resolved = realpath(checkra1n_path, resolved_c1_path); + + if (!resolved) { + LOG(LOG_FATAL, "Cannot resolve checkra1n path %s: %d (%s)", checkra1n_path, errno, strerror(errno)); + if (ext_checkra1n == NULL) { + unlink(checkra1n_path); + free(checkra1n_path); + } + checkra1n_path = NULL; + return -1; + } + char* libcheckra1nhelper_dylib_path = NULL; - { - struct utsname name; - uname(&name); - unsigned long darwinMajor = strtoul(name.release, NULL, 10); - assert(darwinMajor != 0); -#if !defined(FORCE_HELPER) - if (darwinMajor < 20) { -#endif + if (ext_checkra1n == NULL || gOverrideLibcheckra1nHelper) { + setenv("LIBCHECKRA1NHELPER_CHECKRA1N_PATH", resolved_c1_path, 1); if (gOverrideLibcheckra1nHelper) { libcheckra1nhelper_dylib_path = gOverrideLibcheckra1nHelper; goto setenv_ra1n; @@ -141,9 +148,6 @@ int exec_checkra1n(void) { } setenv_ra1n: setenv("DYLD_INSERT_LIBRARIES", libcheckra1nhelper_dylib_path, 1); -#if !defined(FORCE_HELPER) - } -#endif } #endif char args[0x10] = "-E"; @@ -193,7 +197,7 @@ setenv_ra1n: } if (pongo_path != NULL) free(pongo_path); pongo_path = NULL; -#if defined(__APPLE__) && defined(__arm64__) && (TARGET_OS_IPHONE || defined(FORCE_HELPER)) +#if defined(__APPLE__) if (libcheckra1nhelper_dylib_path != NULL) { if (!gOverrideLibcheckra1nHelper) unlink(libcheckra1nhelper_dylib_path); unsetenv("DYLD_INSERT_LIBRARIES"); diff --git a/src/helper/Makefile b/src/helper/Makefile new file mode 100644 index 0000000..a348590 --- /dev/null +++ b/src/helper/Makefile @@ -0,0 +1,27 @@ +C_SRC = $(wildcard *.c) +C_OBJS = $(patsubst %,../$(OBJDIR)/%,$(C_SRC:.c=.c.o)) + +S_SRC = $(wildcard *.S) +S_OBJS = $(patsubst %,../$(OBJDIR)/%,$(S_SRC:.S=.S.o)) + +CFLAGS += -fvisibility=hidden + +C_OBJS += ../$(GENDIR)/gen-payload-t7000.c.o ../$(GENDIR)/gen-payload-t8011.c.o ../$(GENDIR)/gen-payload-t8012.c.o + +all: ../$(RESOURCES_DIR)/libcheckra1nhelper.dylib + +../$(OBJDIR)/%.c.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + +../$(OBJDIR)/%.S.o: %.S + $(CC) $(CFLAGS) -c -o $@ $< + +../$(RESOURCES_DIR)/libcheckra1nhelper.dylib: $(C_OBJS) $(S_OBJS) $(wildcard *.h) + $(CC) $(CFLAGS) $(LDFLAGS) -shared $(C_OBJS) $(S_OBJS) -o $@ + +../$(GENDIR)/gen-payload-%.c: payloads/%.bin + echo '#include ' > $@ + cd payloads && xxd -iC $$(echo $< | cut -d/ -f2) | sed -e 's/unsigned int/uint32_t/' -e 's/unsigned char/uint8_t/' >> ../$@ + +../$(GENDIR)/gen-payload-%.c.o: ../$(GENDIR)/gen-payload-%.c + $(CC) $(CFLAGS) -c -o $@ $< diff --git a/src/chkstk.S b/src/helper/chkstk.S similarity index 94% rename from src/chkstk.S rename to src/helper/chkstk.S index 3b6ba6b..d7400b3 100644 --- a/src/chkstk.S +++ b/src/helper/chkstk.S @@ -1,3 +1,7 @@ +#include + +#if defined(__APPLE__) && defined(__arm64__) && TARGET_OS_IPHONE + #define _PTHREAD_STRUCT_DIRECT_STACKADDR_OFFSET -48 #define _PTHREAD_STRUCT_DIRECT_STACKBOTTOM_OFFSET -40 @@ -63,3 +67,4 @@ Lend: sub x10, x10, x9 ldr x11, [x10] b Lexit +#endif diff --git a/src/helper/helper.c b/src/helper/helper.c new file mode 100644 index 0000000..ea3623d --- /dev/null +++ b/src/helper/helper.c @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "phookra1n.h" + +extern char ***_NSGetArgv(void); +extern int *_NSGetArgc(void); + +__attribute__((constructor)) void ctor(void) +{ + char ***argvp = _NSGetArgv(); + int *argcp = _NSGetArgc(); + + assert(argvp); + assert(argcp); + + int argc = *argcp; + char **argv = *argvp; + +#if TARGET_OS_IPHONE + if (argc == 2 && strcmp(argv[1], "__CHECKRA1N_JIT_PLEASE__") == 0) { + assert(ptrace(PT_TRACE_ME, 0, 0, 0) == 0); + exit(0); + } else { + char exe_path[PATH_MAX]; + uint32_t exe_path_size = PATH_MAX; + assert(_NSGetExecutablePath(exe_path, &exe_path_size) == 0); + pid_t pid; + assert(posix_spawnp(&pid, exe_path, NULL, NULL, (char*[]){"__CHECKRA1N_JIT_PLEASE__",NULL}, NULL) == 0); + assert(waitpid(pid, NULL, 0) == pid); + } +#endif + + char *c1_path = getenv("LIBCHECKRA1NHELPER_CHECKRA1N_PATH"); + + assert(c1_path); + + dprintf("Welcome to Checkra1n Hook!\n"); + + int c1_image_index = 0; + for (uint32_t i = 0; i < _dyld_image_count(); i++) { + if(!strcmp(_dyld_get_image_name(i), c1_path)) { + c1_image_index = i; + break; + } + } + intptr_t slide = _dyld_get_image_vmaddr_slide(c1_image_index); + struct mach_header_64 *mach_header = (struct mach_header_64*)_dyld_get_image_header(c1_image_index); + + uintptr_t cmd_current = (uintptr_t)(mach_header + 1); + uintptr_t cmd_end = cmd_current + mach_header->sizeofcmds; + + const struct segment_command_64 *__TEXT = NULL; + + for (uint32_t i = 0; i < mach_header->ncmds && cmd_current <= cmd_end; i++) { + const struct segment_command_64 *cmd; + + cmd = (struct segment_command_64*)cmd_current; + cmd_current += cmd->cmdsize; + + if (cmd->cmd != LC_SEGMENT_64 || strcmp(cmd->segname, "__TEXT")) { + continue; + } + __TEXT = cmd; + } + + assert(__TEXT); + +#if defined(__arm64__) + assert(__TEXT->vmsize == 0x24000); + setup_hooks_arm64((void*)(__TEXT->vmaddr + slide)); +#endif +} + diff --git a/src/helper/hook_arm64.c b/src/helper/hook_arm64.c new file mode 100644 index 0000000..abe13b5 --- /dev/null +++ b/src/helper/hook_arm64.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "phookra1n.h" + +#if defined(__arm64__) + +static void patch(uint32_t *stream, const uint8_t *payload, const uint32_t payload_len) +{ + uint64_t from = (uint64_t)stream; + uint64_t to = (uint64_t)payload; + + uint32_t adrp_off = ((to & ~0xfff) - (from & ~0xfff)) >> 12; + uint32_t add_off = to & 0xfff; + + dprintf("from 0x%llx to 0x%llx 0x%llx 0x%x\n", from, to, ((from & ~0xfff) + (adrp_off << 12)), add_off); + + uint8_t adrp_reg = stream[0] & 0x1f; + uint8_t add_reg = stream[1] & 0x1f; + uint8_t mov1_reg = stream[2] & 0x1f; + uint8_t mov2_reg = stream[3] & 0x1f; + + uint8_t immlo = adrp_off & 0x3; + uint8_t immhi = (adrp_off >> 2) & 0x7ffff; + + stream[0] = 0x90000000 | adrp_reg | immlo << 29 | (immhi << 5); + stream[1] = 0x91000000 | add_reg | add_reg << 5 | (add_off & 0xfff) << 10; + stream[2] = 0x52800000 | mov1_reg | ((payload_len & 0xffff) << 5); + stream[3] = 0x52800000 | mov2_reg | ((payload_len & 0xffff) << 5); + + dprintf("patched: 0x%x 0x%x 0x%x 0x%x\n", stream[0], stream[1], stream[2], stream[3]); +} + +void setup_hooks_arm64(void *stream) +{ + uint32_t + *t8011_patch_base = (uint32_t*)((char*)stream + 0x102E0), + *t7000_patch_base = (uint32_t*)((char*)stream + 0x102F4), + *t8012_patch_base = (uint32_t*)((char*)stream + 0x10290); + + vm_address_t page = (vm_address_t)((char*)stream + 0x10000); + + assert(*t8011_patch_base == 0x90000081); // T8011 + assert(*t7000_patch_base == 0x90000061); // T7000 + assert(*t8012_patch_base == 0xd0000081); // T8012 + + assert(vm_protect(mach_task_self(), page, 0x4000, false, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY) == 0); + + patch(t7000_patch_base, t7000_bin, t7000_bin_len); + patch(t8011_patch_base, t8011_bin, t8011_bin_len); + patch(t8012_patch_base, t8012_bin, t8012_bin_len); + + assert(vm_protect(mach_task_self(), page, 0x4000, false, VM_PROT_READ | VM_PROT_EXECUTE) == 0); + + sys_icache_invalidate((void*)page, 0x4000); + + dprintf("patched checkra1n\n"); +} + +#endif diff --git a/src/helper/payloads/t7000.bin b/src/helper/payloads/t7000.bin new file mode 100644 index 0000000000000000000000000000000000000000..8495a3330498697e3510eb37ab887cce8b077a99 GIT binary patch literal 2816 zcmZuzdu&tJ8UN0`eq1LhTqmfQQsV0*9mzJSkEjzutQ^~^k|wBxi>GyXm2(1{yGTGdU96KIrK?X)piW7ZKTqlJxC14l;uhaCoCiiy3Fv zF&`yU0gCB0j79}awWGQ0xsy8EV;YPoA#lz*ZZY$i&NS1=0+*GC^sd-RBfAOv7D_Oa zTUYY=ACUG$+K=D2hAOxAP~S5|AtJs^hjx#UT3pA^n<<~I>ln^n7B+cbT~)AW5qcKQ zpp_xj>cSl)e>8QMU=v`b)m!Iqem!he-ZyhZre1}gnD^qcOz~SXi{F&1(0Po>UqvK;j{a}JiwEtcQRIsKP%q>^<7 z`ssc;ZZkV>4UzqOW8_#GQk!r45Cfaf)NOpyu)&Amy})n>_|=fGO6H6qn{>hUdm$%5 zjxBY{6!Mb1)C<`k60MP%-q9Co5f_CgwvrU_NfeU!PxS@aG$e%*Qf5Z4A zWX21y;GM-C7xFXuTz>37bXI}*;@%<`o{62rIYZ){hHLP(3_oOXZ$@l*g%&hx+%|JU zcQ%vJ+3t5cM5Z1N}$UApWNQP7!2G42moCeS7 z5>H09$NvJJNuqO?$r%Yi?jL~v1eqzK6W3)|T<{2;e*``wD{=p7n*~4 zfH(feWnHhMpJ@Bbtm`-9~I#c?7R)Gxc8JVh%c9x6@_W-$*vR;)&MVJ^qF> zdp$ezovcszK;WtnyH}cM`pj4DRnD^;hZmFlR(?x+Zq`Pj4^*mjgijh*-|L*8+_Jv$ z0QelCQ^wW3?H|MKr;KYQTA?;uOe2aMV&S6g_Fs3-kAseyN-)UUUv4kLHo%Z&p9c;3 zkv)SuL3SnXS=kf6C$Ej)mG6%i`onfPEpnk9b=IC7$;b4xt&Xur48Eg@%dj~wbO z`G?&jj2^b;9_Aw*|tp6CR3EYgI(q1Bq6mHG%kN4L-6edQ?8uXKgTUog*F43Sq z3^_v2q`5-|?a=`PWH zw9Ii1qY0hJ85ebvEWqfgfJM#q04HK&X2x`ys7|}I>a+&E=8++TW53e3lMFKM>hu&F z)Jc5;Ge?P&T3zVrEp7^DR0=aGrlZ#x=uPO^TQAP5r2gGaYVQGlOZ0Mq8<5s4?MK{u zA)}RWnR3Jx@B%Ya@*2LWb`5O`*k}jx?AG@I29BObHU7f>Dc4tthT5aQh0psfa(1 zmxc-4EOVIU=3tJp-gfX7A-gzg5>)y7&p>psF@D*;aU5k?h@k z2z}3bwT>E_OEC~S&-f>GCv+&GxUQ(C0a@L(&outb`HpfXxrOcl%*-COrC;a{9_9_* z&pilR$|6H*8)ooR{aNS@!k#9)3A)MFHnjJFonxca*Qo^i8EAn=$O>XM_muGBobDc~ zf*qdbOSRJ?AA~J({kwXt&ot`zq+a)sY1p-Q^@jlO!n@(x-(EEq@n&@5&8W1W(iOa$ zT;`rX2qee*{c-Hme-!8#uir0*?$8PBge7; literal 0 HcmV?d00001 diff --git a/src/helper/payloads/t8011.bin b/src/helper/payloads/t8011.bin new file mode 100644 index 0000000000000000000000000000000000000000..ed121dd32b3b09fdec4e446842d2cb268e07cd82 GIT binary patch literal 3408 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 literal 0 HcmV?d00001 diff --git a/src/helper/phookra1n.h b/src/helper/phookra1n.h new file mode 100644 index 0000000..f160ebb --- /dev/null +++ b/src/helper/phookra1n.h @@ -0,0 +1,20 @@ +#ifndef PALERA1N_CHECKRA1N_HELPER_H +#define PALERA1N_CHECKRA1N_HELPER_H + +#include +#include + +#define dprintf(...) // printf(__VA_ARGS__) + +extern uint8_t t7000_bin[]; +extern uint32_t t7000_bin_len; + +extern uint8_t t8011_bin[]; +extern uint32_t t8011_bin_len; + +extern uint8_t t8012_bin[]; +extern uint32_t t8012_bin_len; + +void setup_hooks_arm64(void *stream); + +#endif diff --git a/src/usb.xml b/src/usb.xml index 24e1c53..53b3063 100644 --- a/src/usb.xml +++ b/src/usb.xml @@ -3,6 +3,8 @@ platform-application + get-task-allow + com.apple.private.security.no-container com.apple.security.iokit-user-client-class