mirror of
https://github.com/palera1n/palera1n.git
synced 2026-10-21 17:57:01 +02:00
remove -P option
This commit is contained in:
1 parent
04d5f90955
commit
da3f09b8cc
6 files changed
+155
-95
No files matched your search
@@ -2,7 +2,7 @@ SRC = $(shell pwd)
|
||||
DEP = $(SRC)/dep_root
|
||||
STRIP = strip
|
||||
CC ?= cc
|
||||
CFLAGS += -I$(DEP)/include -I$(SRC)/include -I$(SRC) -Wall -Wextra -DPALERAIN_VERSION=\"2.0.0\" -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable
|
||||
CFLAGS += -I$(DEP)/include -I$(SRC)/include -I$(SRC) -Wall -Wextra -DPALERAIN_VERSION=\"2.0.0\" -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -Wformat
|
||||
LIBS += $(DEP)/lib/libimobiledevice-1.0.a $(DEP)/lib/libirecovery-1.0.a $(DEP)/lib/libusbmuxd-2.0.a $(DEP)/lib/libimobiledevice-glue-1.0.a $(DEP)/lib/libplist-2.0.a -pthread
|
||||
ifeq ($(TARGET_OS),)
|
||||
TARGET_OS = $(shell uname -s)
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
all: palera1n
|
||||
|
||||
OBJECTS = main.o dfuhelper.o devhelper.o lockdown_helper.o exec_checkra1n.o pongo_usb.o checkra1n.o
|
||||
OBJECTS = main.o dfuhelper.o devhelper.o lockdown_helper.o exec_checkra1n.o pongo_usb.o checkra1n.o log.o
|
||||
CHECKRA1N_VERSION ?= 0.1337.1
|
||||
LIPO = lipo
|
||||
LDID = ldid
|
||||
|
||||
@@ -61,6 +61,12 @@ extern char* pongo_path;
|
||||
extern bool dfuhelper_only;
|
||||
extern bool pongo_exit;
|
||||
|
||||
extern pthread_t dfuhelper_thread, pongo_thread;
|
||||
extern int pongo_thr_running, dfuhelper_thr_running;
|
||||
|
||||
extern pthread_mutex_t log_mutex;
|
||||
void thr_cleanup(void* ptr);
|
||||
|
||||
void* dfuhelper(void* ptr);
|
||||
int p1_log(log_level_t loglevel, const char *fname, int lineno, const char *fxname, char* __restrict format, ...);
|
||||
/* devhelper helpers */
|
||||
|
||||
@@ -177,9 +177,12 @@ void irecv_device_event_cb(const irecv_device_event_t *event, void* userdata) {
|
||||
}
|
||||
|
||||
void *dfuhelper(void* ptr) {
|
||||
dfuhelper_thr_running = 1;
|
||||
pthread_cleanup_push(thr_cleanup, &dfuhelper_thr_running);
|
||||
subscribe_cmd(device_event_cb, irecv_device_event_cb);
|
||||
while (spin) {
|
||||
sleep(1);
|
||||
};
|
||||
pthread_cleanup_pop(1);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <pthread.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "ANSI-color-codes.h"
|
||||
#include "common.h"
|
||||
|
||||
int p1_log(log_level_t loglevel, const char *fname, int lineno, const char *fxname, char *__restrict format, ...)
|
||||
{
|
||||
if (verbose >= 5) fprintf(stderr, "p1_log: loglevel %d from %s:%d:%s()\n", loglevel, fname, lineno, fxname);
|
||||
int ret = 0;
|
||||
char type[0x10];
|
||||
char colour[0x10];
|
||||
char colour_bold[0x10];
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
if (verbose < (loglevel - 3) && loglevel > LOG_INFO) {
|
||||
if (verbose >= 5) fprintf(stderr, "p1_log: hid log with high log level (%d < %d)\n", verbose, loglevel - 3);
|
||||
return 0;
|
||||
}
|
||||
switch (loglevel) {
|
||||
case LOG_FATAL:
|
||||
snprintf(type, 0x10, "%s", "!");
|
||||
snprintf(colour, 0x10, "%s", RED);
|
||||
snprintf(colour_bold, 0x10, "%s", BRED);
|
||||
break;
|
||||
case LOG_ERROR:
|
||||
snprintf(type, 0x10, "%s", "Error");
|
||||
snprintf(colour, 0x10, "%s", RED);
|
||||
snprintf(colour_bold, 0x10, "%s", BRED);
|
||||
break;
|
||||
case LOG_WARNING:
|
||||
snprintf(type, 0x10, "%s", "Warning");
|
||||
snprintf(colour, 0x10, "%s", YEL);
|
||||
snprintf(colour_bold, 0x10, "%s", BYEL);
|
||||
break;
|
||||
case LOG_INFO:
|
||||
snprintf(type, 0x10, "%s", "Info");
|
||||
snprintf(colour, 0x10, "%s", CYN);
|
||||
snprintf(colour_bold, 0x10, "%s", BCYN);
|
||||
break;
|
||||
default:
|
||||
assert(loglevel >= 0);
|
||||
snprintf(type, 0x10, "%s", "Verbose");
|
||||
snprintf(colour, 0x10, "%s", WHT);
|
||||
snprintf(colour_bold, 0x10, "%s", BWHT);
|
||||
break;
|
||||
}
|
||||
pthread_mutex_lock(&log_mutex);
|
||||
char timestring[0x80];
|
||||
time_t curtime;
|
||||
time(&curtime);
|
||||
struct tm* timeinfo = localtime(&curtime);
|
||||
snprintf(timestring, 0x80, "%s[%s%02d/%02d/%d %02d:%02d:%02d%s]", CRESET, HBLK, timeinfo->tm_mon + 1, timeinfo->tm_mday, timeinfo->tm_year - 100, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, CRESET);
|
||||
if (verbose >= 2) {
|
||||
printf("%s| - %s%s <%s> " CRESET "%s" HBLU "%s" CRESET ":" BLU "%d" CRESET ":" BMAG "%s()" CRESET ": \n%s| ----> ", colour_bold, timestring, colour_bold, type, WHT, fname, lineno, fxname, colour_bold);
|
||||
} else {
|
||||
printf(" - %s %s<%s>%s: ", timestring, colour_bold, type, CRESET);
|
||||
}
|
||||
printf("%s", colour);
|
||||
ret = vprintf(format, args);
|
||||
va_end(args);
|
||||
|
||||
if (verbose < 2)
|
||||
printf(CRESET "\n");
|
||||
else {
|
||||
printf("\n%s-%s\n", colour, CRESET);
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
pthread_mutex_unlock(&log_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
+67
-93
@@ -61,10 +61,12 @@ struct mach_header_64
|
||||
#define CMD_LEN_MAX 512
|
||||
#define OVERRIDE_MAGIC 0xd803b376
|
||||
|
||||
unsigned int verbose = 0;
|
||||
unsigned int verbose = 0U;
|
||||
int enable_rootful = 0;
|
||||
int do_pongo_sleep = 0;
|
||||
int device_has_booted = 0;
|
||||
int demote = 0;
|
||||
int pongo_thr_running = 0, dfuhelper_thr_running = 0;
|
||||
bool ohio = true;
|
||||
char xargs_cmd[0x270] = "xargs wdt=-1";
|
||||
char checkrain_flags_cmd[0x20] = "checkra1n_flags 0x0";
|
||||
@@ -74,6 +76,11 @@ char dtpatch_cmd[0x20] = "dtpatch md0";
|
||||
char rootfs_cmd[512];
|
||||
extern char** environ;
|
||||
|
||||
bool dfuhelper_only = false;
|
||||
bool pongo_exit = false;
|
||||
bool start_from_pongo = false;
|
||||
bool palerain_version = false;
|
||||
|
||||
typedef unsigned char niarelap_file_t[];
|
||||
|
||||
niarelap_file_t* kpf_to_upload_1 = &checkra1n_kpf_pongo;
|
||||
@@ -92,71 +99,12 @@ uint32_t checkrain_flags = 0;
|
||||
uint32_t palerain_flags = 0;
|
||||
uint32_t kpf_flags = 0;
|
||||
|
||||
int p1_log(log_level_t loglevel, const char *fname, int lineno, const char *fxname, char *__restrict format, ...)
|
||||
{
|
||||
int ret = 0;
|
||||
char type[0x10];
|
||||
char colour[0x10];
|
||||
char colour_bold[0x10];
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
if (verbose < (loglevel - 3)) return 0;
|
||||
switch (loglevel) {
|
||||
case LOG_FATAL:
|
||||
snprintf(type, 0x10, "%s", "!");
|
||||
snprintf(colour, 0x10, "%s", RED);
|
||||
snprintf(colour_bold, 0x10, "%s", BRED);
|
||||
break;
|
||||
case LOG_ERROR:
|
||||
snprintf(type, 0x10, "%s", "Error");
|
||||
snprintf(colour, 0x10, "%s", RED);
|
||||
snprintf(colour_bold, 0x10, "%s", BRED);
|
||||
break;
|
||||
case LOG_WARNING:
|
||||
snprintf(type, 0x10, "%s", "Warning");
|
||||
snprintf(colour, 0x10, "%s", YEL);
|
||||
snprintf(colour_bold, 0x10, "%s", BYEL);
|
||||
break;
|
||||
case LOG_INFO:
|
||||
snprintf(type, 0x10, "%s", "Info");
|
||||
snprintf(colour, 0x10, "%s", CYN);
|
||||
snprintf(colour_bold, 0x10, "%s", BCYN);
|
||||
break;
|
||||
default:
|
||||
assert(loglevel >= 0);
|
||||
snprintf(type, 0x10, "%s", "Verbose");
|
||||
snprintf(colour, 0x10, "%s", WHT);
|
||||
snprintf(colour_bold, 0x10, "%s", BWHT);
|
||||
break;
|
||||
}
|
||||
char timestring[0x80];
|
||||
time_t curtime;
|
||||
time(&curtime);
|
||||
struct tm* timeinfo = localtime(&curtime);
|
||||
snprintf(timestring, 0x80, "%s[%s%02d/%02d/%d %02d:%02d:%02d%s]", CRESET, HBLK, timeinfo->tm_mon + 1, timeinfo->tm_mday, timeinfo->tm_year - 100, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, CRESET);
|
||||
if (verbose >= 2) {
|
||||
printf("%s| - %s%s <%s> " CRESET "%s" HBLU "%s" CRESET ":" BLU "%d" CRESET ":" BMAG "%s()" CRESET ": \n%s| ----> ", colour_bold, timestring, colour_bold, type, WHT, fname, lineno, fxname, colour_bold);
|
||||
} else {
|
||||
printf(" - %s %s<%s>%s: ", timestring, colour_bold, type, CRESET);
|
||||
}
|
||||
printf("%s", colour);
|
||||
ret = vprintf(format, args);
|
||||
va_end(args);
|
||||
|
||||
if (verbose < 2)
|
||||
printf(CRESET "\n");
|
||||
else {
|
||||
printf("\n%s-%s\n", colour, CRESET);
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
return ret;
|
||||
}
|
||||
pthread_t dfuhelper_thread, pongo_thread;
|
||||
pthread_mutex_t log_mutex;
|
||||
|
||||
int found_pongo = 0;
|
||||
|
||||
void *pongo_usb_callback(void *arg)
|
||||
{
|
||||
void *pongo_usb_callback(void *arg) {
|
||||
if (found_pongo)
|
||||
return NULL;
|
||||
found_pongo = 1;
|
||||
@@ -184,6 +132,10 @@ void *pongo_usb_callback(void *arg)
|
||||
issue_pongo_command(handle, "kpf");
|
||||
issue_pongo_command(handle, "bootux");
|
||||
LOG(LOG_INFO, "Booting Kernel...");
|
||||
device_has_booted = 1;
|
||||
if (dfuhelper_thr_running) {
|
||||
pthread_cancel(dfuhelper_thread);
|
||||
}
|
||||
spin = false;
|
||||
return NULL;
|
||||
}
|
||||
@@ -192,7 +144,6 @@ static struct option longopts[] = {
|
||||
{"dfuhelper", no_argument, NULL, 'D'},
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
{"pongo-shell", no_argument, NULL, 'p'},
|
||||
{"start-from-pongo", no_argument, NULL, 'P'},
|
||||
{"debug-logging", no_argument, NULL, 'v'},
|
||||
{"verbose-boot", no_argument, NULL, 'V'},
|
||||
{"boot-args", required_argument, NULL, 'e'},
|
||||
@@ -208,10 +159,10 @@ static struct option longopts[] = {
|
||||
{"override-ramdisk", required_argument, NULL, 'r'},
|
||||
{"override-kpf", required_argument, NULL, 'K'},
|
||||
{"disable-ohio", no_argument, NULL, 'O'},
|
||||
{NULL, 0, NULL, 0}};
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
int usage(int e, char* prog_name)
|
||||
{
|
||||
int usage(int e, char* prog_name) {
|
||||
fprintf(stderr,
|
||||
"Usage: %s [-DhpPvVldsOL] [-e boot arguments] [-f root device] [-k Pongo image] [-o overlay file] [-r ramdisk file] [-K KPF file]\n"
|
||||
"Copyright (C) 2023, palera1n team, All Rights Reserved.\n\n"
|
||||
@@ -221,7 +172,6 @@ int usage(int e, char* prog_name)
|
||||
"\t-D, --dfuhelper-only\t\t\tExit after entering DFU\n"
|
||||
"\t-h, --help\t\t\t\tShow this help\n"
|
||||
"\t-p, --pongo-shell\t\t\tBoots to PongoOS shell\n"
|
||||
"\t-P, --start-from-pongo\t\t\tStart with a PongoOS USB Device attached\n"
|
||||
"\t-v, --debug-logging\t\t\tEnable debug logging\n"
|
||||
"\t\tThis option can be repeated for extra verbosity.\n"
|
||||
"\t-V, --verbose-boot\t\t\tVerbose boot\n"
|
||||
@@ -238,29 +188,30 @@ int usage(int e, char* prog_name)
|
||||
"\t-O, --disable-ohio\t\t\tDisable Ohio\n",
|
||||
prog_name);
|
||||
exit(e);
|
||||
}
|
||||
};
|
||||
|
||||
int override_file(override_file_t *finfo, niarelap_file_t** orig, unsigned int *orig_len, char *filename)
|
||||
{
|
||||
int override_file(override_file_t *finfo, niarelap_file_t** orig, unsigned int *orig_len, char *filename) {
|
||||
int ret = 0;
|
||||
int fd = open(filename, O_RDONLY);
|
||||
if (fd == -1)
|
||||
{
|
||||
LOG(LOG_VERBOSE5, "override_file() called!");
|
||||
if (fd == -1) {
|
||||
LOG(LOG_ERROR, "Cannot open file %s: %d (%s)", filename, errno, strerror(errno));
|
||||
return errno;
|
||||
}
|
||||
LOG(LOG_VERBOSE5, "override_file: opened %s!", filename);
|
||||
struct stat st;
|
||||
ret = fstat(fd, &st);
|
||||
if (ret)
|
||||
{
|
||||
if (ret) {
|
||||
LOG(LOG_ERROR, "Cannot fstat fd from file %s: %d (%s)", filename, errno, strerror(errno));
|
||||
return errno;
|
||||
}
|
||||
LOG(LOG_VERBOSE5, "override_file: fstat fd %d succeeded!", fd);
|
||||
void *addr = mmap(NULL, st.st_size, PROT_READ, MAP_FILE | MAP_PRIVATE, fd, 0);
|
||||
if (addr == MAP_FAILED) {
|
||||
LOG(LOG_ERROR, "Failed to map file %s: %d (%s)", filename, errno, strerror(errno));
|
||||
return errno;
|
||||
}
|
||||
LOG(LOG_VERBOSE5, "override_file: Override file mapped successfully");
|
||||
finfo->magic = OVERRIDE_MAGIC;
|
||||
finfo->fd = fd;
|
||||
finfo->len = (unsigned int)st.st_size;;
|
||||
@@ -269,8 +220,9 @@ int override_file(override_file_t *finfo, niarelap_file_t** orig, unsigned int *
|
||||
finfo->orig_ptr = **orig;
|
||||
*orig = (niarelap_file_t*)addr;
|
||||
*orig_len = (unsigned int)st.st_size;
|
||||
LOG(LOG_VERBOSE5, "override_file() finished!");
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
int build_checks() {
|
||||
#if defined(__APPLE__)
|
||||
@@ -298,17 +250,32 @@ int build_checks() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool dfuhelper_only = false;
|
||||
bool pongo_exit = false;
|
||||
bool start_from_pongo = false;
|
||||
bool palerain_version = false;
|
||||
void thr_cleanup(void* ptr) {
|
||||
*(int*)ptr = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
void* pongo_helper(void* ptr) {
|
||||
pongo_thr_running = 1;
|
||||
pthread_cleanup_push(thr_cleanup, &pongo_thr_running);
|
||||
wait_for_pongo();
|
||||
while (spin) {
|
||||
sleep(1);
|
||||
}
|
||||
pthread_cleanup_pop(1);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int palera1n(int argc, char *argv[]) {
|
||||
int mutex_err = pthread_mutex_init(&log_mutex, NULL);
|
||||
if (mutex_err) {
|
||||
fprintf(stderr, "palera1n_init: cannot create mutex: %d (%s)\n", errno, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
if (build_checks()) return -1;
|
||||
int opt;
|
||||
int index;
|
||||
while ((opt = getopt_long(argc, argv, "DhpPvVldsOLe:f:o:r:K:k:", longopts, NULL)) != -1)
|
||||
while ((opt = getopt_long(argc, argv, "DhpvVldsOLe:f:o:r:K:k:", longopts, NULL)) != -1)
|
||||
{
|
||||
switch (opt)
|
||||
{
|
||||
@@ -399,8 +366,7 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (palerain_version)
|
||||
{
|
||||
if (palerain_version) {
|
||||
printf("palera1n %s\n", PALERAIN_VERSION);
|
||||
return 0;
|
||||
}
|
||||
@@ -455,29 +421,32 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
if (verbose >= 5)
|
||||
putenv("LIBUSB_DEBUG=4");
|
||||
if (start_from_pongo == true)
|
||||
goto pongo;
|
||||
LOG(LOG_INFO, "Waiting for devices");
|
||||
|
||||
do_pongo_sleep = 1;
|
||||
pthread_t dfuhelper_thread;
|
||||
pthread_create(&dfuhelper_thread, NULL, dfuhelper, NULL);
|
||||
pthread_create(&pongo_thread, NULL, pongo_helper, NULL);
|
||||
pthread_join(dfuhelper_thread, NULL);
|
||||
if (device_has_booted) goto done;
|
||||
if (dfuhelper_only)
|
||||
return 0;
|
||||
if (pongo_thr_running) {
|
||||
pthread_cancel(pongo_thread);
|
||||
}
|
||||
exec_checkra1n();
|
||||
if (pongo_exit)
|
||||
return 0;
|
||||
pongo:
|
||||
spin = true;
|
||||
if (do_pongo_sleep)
|
||||
sleep(2);
|
||||
else
|
||||
LOG(LOG_INFO, "Waiting for PongoOS devices...");
|
||||
wait_for_pongo();
|
||||
spin = true;
|
||||
sleep(2);
|
||||
pthread_create(&pongo_thread, NULL, pongo_helper, NULL);
|
||||
pthread_join(pongo_thread, NULL);
|
||||
while (spin)
|
||||
{
|
||||
sleep(1);
|
||||
}
|
||||
done:
|
||||
if (access("/usr/bin/curl", F_OK) == 0 && ohio) {
|
||||
LOG(LOG_VERBOSE4, "Ohio");
|
||||
char* ohio_argv[] = {
|
||||
@@ -512,5 +481,10 @@ cleanup:
|
||||
munmap(override_overlay.ptr, (size_t)override_overlay.len);
|
||||
close(override_overlay.fd);
|
||||
}
|
||||
pthread_mutex_destroy(&log_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main (int argc, char* argv[]) {
|
||||
return palera1n(argc, argv);
|
||||
}
|
||||
Reference in new issue
Block a user