Compare commits

...
1 Commits
Author SHA1 Message Date
Nick Chan f92cc2c04d rootful real part 1 2023-04-15 22:15:08 +08:00
4 changed files with 47 additions and 15 deletions

No files matched your search

+7 -10
View File
@@ -96,11 +96,11 @@ Remove the jailbreak while keeping user data. Some jailbreak files may remain
after running this command. Additionally, jailbreak apps will remain on the after running this command. Additionally, jailbreak apps will remain on the
home screen on for a while even when the files are deleted as the icon cache home screen on for a while even when the files are deleted as the icon cache
still has their icons. When used with still has their icons. When used with
.Fl f , -fakefs , .Fl f , -rootful ,
this will actually boot the device in rootless mode then delete the jailbreak this will actually boot the device in rootless mode then delete the jailbreak
files. As a result, using the loader app to install the jailbreak environment files. As a result, using the loader app to install the jailbreak environment
is not supported when this option is used together with is not supported when this option is used together with
.Fl f , -fakefs .Fl f , -rootful
\[char46] \[char46]
.It Fl B , -setup-fakefs-partial .It Fl B , -setup-fakefs-partial
Like Like
@@ -111,8 +111,8 @@ when setting up fakefs for rootful, as they do not have enough storage for full
This option currently does not work on iOS 16. This option currently does not work on iOS 16.
.It Fl c , -setup-fakefs .It Fl c , -setup-fakefs
When used with When used with
.Fl f , -fakefs , .Fl f , -rootful ,
creates the new APFS volume required for rootful. Will fail if one already exists. creates the new APFS volume required for rootful on iOS/iPadOS. Will fail if one already exists.
.It Fl d , -demote .It Fl d , -demote
Set the effective production fuse to 0, so as to enable hardware debugging features. Set the effective production fuse to 0, so as to enable hardware debugging features.
.It Fl D , -dfuhelper .It Fl D , -dfuhelper
@@ -128,7 +128,7 @@ and cannot be overriden. Additionally, the
argument is used during fakefs setup. argument is used during fakefs setup.
.It Fl E , -enter-recovery .It Fl E , -enter-recovery
Exit after entering recovery mode. Exit after entering recovery mode.
.It Fl f , -fakefs .It Fl f , -rootful
Proceed in rootful mode. This applies to both full fakefs and partial fakefs. Proceed in rootful mode. This applies to both full fakefs and partial fakefs.
.It Fl h , -help .It Fl h , -help
Prints help text. Prints help text.
@@ -149,7 +149,7 @@ iOS15 branch or your own fork of it.
Proceed in rootless mode, this is the default when neither Proceed in rootless mode, this is the default when neither
.Fl l , -rootless .Fl l , -rootless
and and
.Fl f , -fakefs .Fl f , -rootful
is specified. is specified.
.Fl L , -jbinit-log-to-file .Fl L , -jbinit-log-to-file
Makes jbinit log to Makes jbinit log to
@@ -259,7 +259,7 @@ before they can be ran on a device jailbroken with
\[char46] \[char46]
.Pp .Pp
When using rootful mode, the When using rootful mode, the
.Fl f , -fakefs .Fl f , -rootful
flag must be specified at all times. It does not matter whether you want to create fakefs, flag must be specified at all times. It does not matter whether you want to create fakefs,
create partial fakefs, rejailbreak or remove jailbreak. create partial fakefs, rejailbreak or remove jailbreak.
.Sh POST INSTALLATION .Sh POST INSTALLATION
@@ -311,9 +311,6 @@ may crash if the machine it is running on:
.Pp .Pp
The exploit may also work less reliably on some hosts, like AMD desktops, or some MediaTek devices. The exploit may also work less reliably on some hosts, like AMD desktops, or some MediaTek devices.
.Pp .Pp
.Fl B , -setup-fakefs-partial
does not work on iOS 16.
.Pp
The device may randomly crash and reboot due to launchd receiving signal 7 (SIGEMT). The device may randomly crash and reboot due to launchd receiving signal 7 (SIGEMT).
.Sh NOTES .Sh NOTES
.Nm .Nm
+3
View File
@@ -61,6 +61,9 @@
#define palerain_option_setup_partial_root (1 << 4) /* fakefs creating should be partial */ #define palerain_option_setup_partial_root (1 << 4) /* fakefs creating should be partial */
#define palerain_option_checkrain_is_clone (1 << 5) /* supplied checkra1n is checkra1n clone */ #define palerain_option_checkrain_is_clone (1 << 5) /* supplied checkra1n is checkra1n clone */
#define palerain_option_rootless_livefs (1 << 6) /* mount root livefs on rootless */ #define palerain_option_rootless_livefs (1 << 6) /* mount root livefs on rootless */
#define palerain_option_no_ssv (1 << 7) /* no signed system volume */
#define palerain_option_force_fakefs (1 << 8) /* force fakefs, even without SSV */
#define palerain_option_rootless (1 << 9) /* rootless jailbreak */
#ifdef DEV_BUILD #ifdef DEV_BUILD
#define palerain_option_test1 (1 << 29) #define palerain_option_test1 (1 << 29)
+8 -2
View File
@@ -22,8 +22,14 @@
#define CMD_LEN_MAX 512 #define CMD_LEN_MAX 512
#define OVERRIDE_MAGIC 0xd803b376 #define OVERRIDE_MAGIC 0xd803b376
#define palerain_option_case_version palerain_option_case(0) #define palerain_option_case_version palerain_option_case(0)
#define palerain_option_case_force_revert palerain_option_case(1) #define palerain_option_case_force_revert palerain_option_case(1)
#ifdef DEV_BUILD
#define palerain_option_case_ignore_ssv palerain_option_case(2)
#define palerain_option_case_force_fakefs palerain_option_case(3)
#define palerain_option_case_rootless_livefs palerain_option_case(4)
#endif
#ifdef USE_LIBUSB #ifdef USE_LIBUSB
#include <libusb-1.0/libusb.h> #include <libusb-1.0/libusb.h>
+29 -3
View File
@@ -52,6 +52,9 @@ static struct option longopts[] = {
#ifdef DEV_BUILD #ifdef DEV_BUILD
{"test1", no_argument, NULL, '1'}, {"test1", no_argument, NULL, '1'},
{"test2", no_argument, NULL, '2'}, {"test2", no_argument, NULL, '2'},
{"ignore-ssv", no_argument, NULL, palerain_option_case_ignore_ssv},
{"rootless-livefs", no_argument, NULL, palerain_option_case_rootless_livefs},
{"force-fakefs", no_argument, NULL, palerain_option_case_force_fakefs},
#endif #endif
#ifdef TUI #ifdef TUI
{"tui", no_argument, NULL, 't'}, {"tui", no_argument, NULL, 't'},
@@ -79,6 +82,9 @@ static int usage(int e, char* prog_name)
"\t--version\t\t\t\tPrint version\n" "\t--version\t\t\t\tPrint version\n"
"\t--force-revert\t\t\t\tRemove jailbreak\n" "\t--force-revert\t\t\t\tRemove jailbreak\n"
#ifdef DEV_BUILD #ifdef DEV_BUILD
"\t--ignore-ssv\t\t\t\tAssume the platform has no SSV\n"
"\t--force-fakefs\t\t\t\tAllow fakefs to be created and used even on platforms without SSV\n"
"\t--rootless-livefs\t\t\t\tMount the root livefs on rootless\n"
"\t-1, --test1\t\t\t\tSet palerain_option_test1\n" "\t-1, --test1\t\t\t\tSet palerain_option_test1\n"
"\t-2, --test2\t\t\t\tSet palerain_option_test2\n" "\t-2, --test2\t\t\t\tSet palerain_option_test2\n"
#endif #endif
@@ -91,13 +97,13 @@ static int usage(int e, char* prog_name)
"\t-e, --boot-args <boot arguments>\tXNU boot arguments\n" "\t-e, --boot-args <boot arguments>\tXNU boot arguments\n"
"\t-E, --enter-recovery\t\t\tEnter recovery mode\n" "\t-E, --enter-recovery\t\t\tEnter recovery mode\n"
#ifdef ROOTFUL #ifdef ROOTFUL
"\t-f, --fakefs \t\t\t\tBoots fakefs\n" "\t-f, --rootful \t\t\t\tSet jailbreak mode to rootful.\n"
#endif #endif
"\t-h, --help\t\t\t\tShow this help\n" "\t-h, --help\t\t\t\tShow this help\n"
"\t-i, --override-checkra1n <file>\t\tOverride checkra1n\n" "\t-i, --override-checkra1n <file>\t\tOverride checkra1n\n"
"\t-k, --override-pongo <file>\t\tOverride Pongo image\n" "\t-k, --override-pongo <file>\t\tOverride Pongo image\n"
"\t-K, --override-kpf <file>\t\tOverride kernel patchfinder\n" "\t-K, --override-kpf <file>\t\tOverride kernel patchfinder\n"
"\t-l, --rootless\t\t\t\tBoots rootless. This is the default\n" "\t-l, --rootless\t\t\t\tSet jailbreak mode to rootless.\n"
"\t-L, --jbinit-log-to-file\t\tMake jbinit log to /cores/jbinit.log (can be read from sandbox while jailbroken)\n" "\t-L, --jbinit-log-to-file\t\tMake jbinit log to /cores/jbinit.log (can be read from sandbox while jailbroken)\n"
"\t-n, --exit-recovery\t\t\tExit recovery mode\n" "\t-n, --exit-recovery\t\t\tExit recovery mode\n"
"\t-I, --device-info\t\t\tPrint info about the connected device\n" "\t-I, --device-info\t\t\tPrint info about the connected device\n"
@@ -185,7 +191,7 @@ int optparse(int argc, char* argv[]) {
#endif #endif
case 'l': case 'l':
#ifdef ROOTFUL #ifdef ROOTFUL
palerain_flags &= ~palerain_option_rootful; palerain_flags |= palerain_option_rootless;
#endif #endif
break; break;
case 'L': case 'L':
@@ -296,6 +302,15 @@ int optparse(int argc, char* argv[]) {
case '2': case '2':
palerain_flags |= palerain_option_test2; palerain_flags |= palerain_option_test2;
break; break;
case palerain_option_case_force_fakefs:
palerain_flags |= palerain_option_case_force_fakefs;
break;
case palerain_option_case_rootless_livefs:
palerain_flags |= palerain_option_case_rootless_livefs;
break;
case palerain_option_case_ignore_ssv:
palerain_flags |= palerain_option_no_ssv;
break;
#endif #endif
case palerain_option_case_force_revert: case palerain_option_case_force_revert:
checkrain_flags |= checkrain_option_force_revert; checkrain_flags |= checkrain_option_force_revert;
@@ -350,6 +365,17 @@ int optparse(int argc, char* argv[]) {
LOG(LOG_VERBOSE4, "overlay override ptr %p -> %p", override_overlay.orig_ptr, **overlay_to_upload); LOG(LOG_VERBOSE4, "overlay override ptr %p -> %p", override_overlay.orig_ptr, **overlay_to_upload);
} }
if (checkrain_option_enabled(palerain_flags, palerain_option_rootful) && checkrain_option_enabled(palerain_flags, palerain_option_rootless)) {
LOG(LOG_FATAL, "cannot have rootful and rootless at the same time");
return -1;
}
if (!checkrain_option_enabled(palerain_flags, palerain_option_rootful) && !checkrain_option_enabled(palerain_flags, palerain_option_rootless)) {
LOG(LOG_FATAL, "must have either rootful or rootless, use --help for help");
return -1;
}
if (!checkrain_option_enabled(palerain_flags, palerain_option_rootful)) { if (!checkrain_option_enabled(palerain_flags, palerain_option_rootful)) {
if (checkrain_option_enabled(palerain_flags, palerain_option_setup_rootful) || checkrain_option_enabled(palerain_flags, palerain_option_setup_rootful_forced)) { if (checkrain_option_enabled(palerain_flags, palerain_option_setup_rootful) || checkrain_option_enabled(palerain_flags, palerain_option_setup_rootful_forced)) {
LOG(LOG_FATAL, "Cannot setup rootful when rootless is requested. Use -f to enable rootful mode."); LOG(LOG_FATAL, "Cannot setup rootful when rootless is requested. Use -f to enable rootful mode.");