From 919ccef99d01fcb2f1d30ba227792050149f555c Mon Sep 17 00:00:00 2001 From: Nick Chan Date: Sun, 22 Jan 2023 17:38:47 +0800 Subject: [PATCH] rootful ramdisk --- .github/workflows/build.yml | 36 ++++++++++++++++---------------- src/kerninfo.h | 11 ++++++++++ src/main.c | 41 ++++++++++++++++++++++--------------- 3 files changed, 54 insertions(+), 34 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee5abc7..16c2058 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,13 +16,13 @@ jobs: - name: Download dependencies run: | cd src - curl -LOOO https://github.com/guacaplushy/checkp4le/raw/main/binaries/checkra1n-kpf-pongo \ - https://static.palera.in/deps/c-rewrite/binpack.dmg \ - https://static.palera.in/deps/c-rewrite/ramdisk.dmg + curl -LOOO https://cdn.nickchan.lol/palera1n/c-rewrite/experiments/rootful_rootless/checkra1n-kpf-pongo \ + https://cdn.nickchan.lol/palera1n/c-rewrite/experiments/rootful_rootless/binpack.dmg \ + https://cdn.nickchan.lol/palera1n/c-rewrite/experiments/rootful_rootless/ramdisk.dmg cd .. - curl -LO https://static.palera.in/deps/c-rewrite/dep_root-macos.tgz - tar xf dep_root-macos.tgz + curl -LO https://cdn.nickchan.lol/palera1n/c-rewrite/deps/dep_root_macos.tgz + tar xf dep_root_macos.tgz make -j5 download-checkra1n - name: Build @@ -40,14 +40,14 @@ jobs: - name: Upload artifact uses: wangyucode/sftp-upload-action@v1.4.8 with: - host: ${{ secrets.STATIC_FTP_HOST }} - port: 6061 - username: nebula - password: ${{ secrets.STATIC_FTP_PASS }} + host: ${{ secrets.NICKCHAN_FTP_HOST }} + port: ${{ secrets.NICKCHAN_FTP_PORT }} + username: palera1n + privateKey: ${{ secrets.NICKCHAN_FTP_KEY }} forceUpload: true dryRun: false localDir: 'ready/' - remoteDir: '/upload/artifacts/c-rewrite' + remoteDir: '/palera1n/artifacts/c-rewrite' build-Linux: strategy: @@ -113,9 +113,9 @@ jobs: - name: Download dependencies (embedded binaries) run: | cd src - curl -LOOO https://github.com/guacaplushy/checkp4le/raw/main/binaries/checkra1n-kpf-pongo \ - https://static.palera.in/deps/c-rewrite/binpack.dmg \ - https://static.palera.in/deps/c-rewrite/ramdisk.dmg + curl -LOOO https://cdn.nickchan.lol/palera1n/c-rewrite/experiments/rootful_rootless/checkra1n-kpf-pongo \ + https://cdn.nickchan.lol/palera1n/c-rewrite/experiments/rootful_rootless/binpack.dmg \ + https://cdn.nickchan.lol/palera1n/c-rewrite/experiments/rootful_rootless/ramdisk.dmg cd .. make -j5 download-checkra1n @@ -232,11 +232,11 @@ jobs: - name: Upload artifact uses: wangyucode/sftp-upload-action@v1.4.8 with: - host: ${{ secrets.STATIC_FTP_HOST }} - port: 6061 - username: nebula - password: ${{ secrets.STATIC_FTP_PASS }} + host: ${{ secrets.NICKCHAN_FTP_HOST }} + port: ${{ secrets.NICKCHAN_FTP_PORT }} + username: palera1n + privateKey: ${{ secrets.NICKCHAN_FTP_KEY }} forceUpload: true dryRun: false localDir: 'ready/' - remoteDir: '/upload/artifacts/c-rewrite' + remoteDir: '/palera1n/artifacts/c-rewrite' diff --git a/src/kerninfo.h b/src/kerninfo.h index 04114d8..8e2b1be 100644 --- a/src/kerninfo.h +++ b/src/kerninfo.h @@ -53,6 +53,11 @@ #define checkrain_option_overlay (1 << 2) #define checkrain_option_force_revert (1 << 7) /* keep this at 7 */ +// palera1n option +#define palerain_option_rootful (1 << 0) + +#define PALEINFO_MAGIC 'PLSH' + typedef uint32_t checkrain_option_t, *checkrain_option_p; typedef enum { @@ -68,6 +73,12 @@ struct kerninfo { uint64_t slide; checkrain_option_t flags; }; +struct paleinfo { + uint32_t magic; // 'PLSH' / 0x504c5348 + uint32_t version; // 1 + checkrain_option_t flags; + char rootdev[0x10]; +}; struct kpfinfo { struct kerninfo k; checkrain_option_t kpf_flags; diff --git a/src/main.c b/src/main.c index 3044feb..975fe9b 100644 --- a/src/main.c +++ b/src/main.c @@ -60,18 +60,21 @@ struct mach_header_64 #define OVERRIDE_MAGIC 0xd803b376 unsigned int verbose = 0; -int enable_fakefs = 0; +int enable_rootful = 0; int do_pongo_sleep = 0; int demote = 0; char xargs_cmd[0x270] = "xargs serial=3 wdt=-1"; char checkrain_flags_cmd[0x20] = "checkra1n_flags 0x0"; -char fakefs[512]; +char palerain_flags_cmd[0x20] = "checkra1n_flags 0x0"; +char dtpatch_cmd[0x20] = "dtpatch md0"; +char rootfs_cmd[512]; override_file_t override_ramdisk; override_file_t override_kpf; override_file_t override_overlay; uint32_t checkrain_flags = 0; +uint32_t palerain_flags = 0; int p1_log(log_level_t loglevel, const char *fname, int lineno, const char *fxname, char *__restrict format, ...) { @@ -124,19 +127,17 @@ void *pongo_usb_callback(void *arg) issue_pongo_command(handle, "modload"); issue_pongo_command(handle, "kpf_flags 0x00000000"); issue_pongo_command(handle, checkrain_flags_cmd); - if (enable_fakefs) + issue_pongo_command(handle, palerain_flags_cmd); + if (enable_rootful) { - issue_pongo_command(handle, fakefs); - } - else - { - strcat(xargs_cmd, " rootdev=md0"); - upload_pongo_file(handle, ramdisk_dmg, ramdisk_dmg_len); - issue_pongo_command(handle, "ramdisk"); - upload_pongo_file(handle, binpack_dmg, binpack_dmg_len); - issue_pongo_command(handle, "overlay"); - issue_pongo_command(handle, "dtpatch md0"); + issue_pongo_command(handle, rootfs_cmd); + issue_pongo_command(handle, dtpatch_cmd); } + strcat(xargs_cmd, " rootdev=md0"); + upload_pongo_file(handle, ramdisk_dmg, ramdisk_dmg_len); + issue_pongo_command(handle, "ramdisk"); + upload_pongo_file(handle, binpack_dmg, binpack_dmg_len); + issue_pongo_command(handle, "overlay"); issue_pongo_command(handle, xargs_cmd); issue_pongo_command(handle, "kpf"); issue_pongo_command(handle, "bootux"); @@ -280,11 +281,12 @@ int main(int argc, char *argv[]) snprintf(xargs_cmd, sizeof(xargs_cmd), "xargs %s", optarg); break; case 'f': - snprintf(fakefs, sizeof(fakefs), "dtpatch %s", optarg); - enable_fakefs = 1; + snprintf(rootfs_cmd, sizeof(rootfs_cmd), "rootfs %s", optarg); + snprintf(dtpatch_cmd, 0x20, "dtpatch %s", optarg); + enable_rootful = 1; break; case 'l': - enable_fakefs = 0; + enable_rootful = 0; break; case 'd': demote = 1; @@ -331,8 +333,15 @@ int main(int argc, char *argv[]) printf("palera1n %s\n", PALERAIN_VERSION); return 0; } + + if (enable_rootful) { + palerain_flags |= palerain_option_rootful; + } + snprintf(checkrain_flags_cmd, 0x20, "checkra1n_flags 0x%x", checkrain_flags); + snprintf(palerain_flags_cmd, 0x20, "palera1n_flags 0x%x", palerain_flags); LOG(LOG_VERBOSE2, "checkrain_flags: %s\n", checkrain_flags_cmd); + LOG(LOG_VERBOSE2, "palerain_flags: %s\n", palerain_flags_cmd); LOG(LOG_VERBOSE4, "binpack_dmg @ %p", binpack_dmg); LOG(LOG_VERBOSE4, "ramdisk_dmg @ %p", ramdisk_dmg); LOG(LOG_VERBOSE4, "checkra1n_kpf_pongo @ %p", checkra1n_kpf_pongo);