diff --git a/native/jni/magiskboot/bootimg.c b/native/jni/magiskboot/bootimg.c index 87710001a..b63138052 100644 --- a/native/jni/magiskboot/bootimg.c +++ b/native/jni/magiskboot/bootimg.c @@ -124,11 +124,16 @@ int parse_img(const char *image, boot_img *boot) { fprintf(stderr, "PXA_BOOT_HDR\n"); boot->hdr = malloc(sizeof(pxa_boot_img_hdr)); memcpy(boot->hdr, head, sizeof(pxa_boot_img_hdr)); - } else if (memcmp(((boot_img_hdr*) head)->cmdline, NOOK_MAGIC, 12) == 0 - || memcmp(((boot_img_hdr*) head)->cmdline, NOOK_NEW_MAGIC, 26) == 0) { - boot->flags |= NOOK_FLAG; - fprintf(stderr, "NOOK_GREEN_LOADER\n"); - head += NOOK_PRE_HEADER_SZ - 1; + } else if (memcmp(((boot_img_hdr*) head)->cmdline, NOOKHD_MAGIC, 12) == 0 + || memcmp(((boot_img_hdr*) head)->cmdline, NOOKHD_NEW_MAGIC, 26) == 0) { + boot->flags |= NOOKHD_FLAG; + fprintf(stderr, "NOOKHD_GREEN_LOADER\n"); + head += NOOKHD_PRE_HEADER_SZ - 1; + continue; + } else if (memcmp(((boot_img_hdr*) head)->name, ACCLAIM_MAGIC, 10) == 0) { + boot->flags |= ACCLAIM_FLAG; + fprintf(stderr, "ACCLAIM_BAUWKSBOOT\n"); + head += ACCLAIM_PRE_HEADER_SZ - 1; continue; } else { boot->hdr = malloc(sizeof(boot_img_hdr)); @@ -289,8 +294,10 @@ void repack(const char* orig_image, const char* out_image) { } else if (boot.flags & BLOB_FLAG) { // Skip blob header write_zero(fd, sizeof(blob_hdr)); - } else if (boot.flags & NOOK_FLAG) { - restore_buf(fd, boot.map_addr, NOOK_PRE_HEADER_SZ); + } else if (boot.flags & NOOKHD_FLAG) { + restore_buf(fd, boot.map_addr, NOOKHD_PRE_HEADER_SZ); + } else if (boot.flags & ACCLAIM_FLAG) { + restore_buf(fd, boot.map_addr, ACCLAIM_PRE_HEADER_SZ); } // Skip a page for header diff --git a/native/jni/magiskboot/bootimg.h b/native/jni/magiskboot/bootimg.h index 0593d67db..f26bd2035 100644 --- a/native/jni/magiskboot/bootimg.h +++ b/native/jni/magiskboot/bootimg.h @@ -130,7 +130,8 @@ typedef struct blob_hdr { #define LG_BUMP_FLAG 0x0040 #define SHA256_FLAG 0x0080 #define BLOB_FLAG 0x0100 -#define NOOK_FLAG 0x0200 +#define NOOKHD_FLAG 0x0200 +#define ACCLAIM_FLAG 0x0400 typedef struct boot_img { // Memory map of the whole image diff --git a/native/jni/magiskboot/format.h b/native/jni/magiskboot/format.h index 15385a075..1189595fd 100644 --- a/native/jni/magiskboot/format.h +++ b/native/jni/magiskboot/format.h @@ -38,9 +38,11 @@ typedef enum { #define DHTB_MAGIC "\x44\x48\x54\x42\x01\x00\x00\x00" #define SEANDROID_MAGIC "SEANDROIDENFORCE" #define TEGRABLOB_MAGIC "-SIGNED-BY-SIGNBLOB-" -#define NOOK_MAGIC "Green Loader" -#define NOOK_NEW_MAGIC "eMMC boot.img+secondloader" -#define NOOK_PRE_HEADER_SZ 1048576 +#define NOOKHD_MAGIC "Green Loader" +#define NOOKHD_NEW_MAGIC "eMMC boot.img+secondloader" +#define NOOKHD_PRE_HEADER_SZ 1048576 +#define ACCLAIM_MAGIC "BauwksBoot" +#define ACCLAIM_PRE_HEADER_SZ 262144 #define SUP_LIST ((char *[]) { "gzip", "xz", "lzma", "bzip2", "lz4", "lz4_legacy", NULL }) #define SUP_EXT_LIST ((char *[]) { "gz", "xz", "lzma", "bz2", "lz4", "lz4", NULL })