mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-08-22 07:57:58 +00:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bb70385a42 | ||
![]() |
9855877b03 | ||
![]() |
76c9188fae | ||
![]() |
e4e5269836 | ||
![]() |
9e737df534 | ||
![]() |
0b3192c4d5 | ||
![]() |
968e6237bd | ||
![]() |
d780b5a0e4 | ||
![]() |
3e48427eaf | ||
![]() |
31360c34ed |
2
app
2
app
Submodule app updated: 3f38579529...d5408d1f09
@@ -124,10 +124,16 @@ int parse_img(const char *image, boot_img *boot) {
|
|||||||
fprintf(stderr, "PXA_BOOT_HDR\n");
|
fprintf(stderr, "PXA_BOOT_HDR\n");
|
||||||
boot->hdr = malloc(sizeof(pxa_boot_img_hdr));
|
boot->hdr = malloc(sizeof(pxa_boot_img_hdr));
|
||||||
memcpy(boot->hdr, head, 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) {
|
} else if (memcmp(((boot_img_hdr*) head)->cmdline, NOOKHD_MAGIC, 12) == 0
|
||||||
boot->flags |= NOOK_FLAG;
|
|| memcmp(((boot_img_hdr*) head)->cmdline, NOOKHD_NEW_MAGIC, 26) == 0) {
|
||||||
fprintf(stderr, "NOOK_GREEN_LOADER\n");
|
boot->flags |= NOOKHD_FLAG;
|
||||||
head += NOOK_PRE_HEADER_SZ - 1;
|
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;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
boot->hdr = malloc(sizeof(boot_img_hdr));
|
boot->hdr = malloc(sizeof(boot_img_hdr));
|
||||||
@@ -202,12 +208,12 @@ int parse_img(const char *image, boot_img *boot) {
|
|||||||
fprintf(stderr, "MTK_RAMDISK_HDR\n");
|
fprintf(stderr, "MTK_RAMDISK_HDR\n");
|
||||||
boot->flags |= MTK_RAMDISK;
|
boot->flags |= MTK_RAMDISK;
|
||||||
boot->r_hdr = malloc(sizeof(mtk_hdr));
|
boot->r_hdr = malloc(sizeof(mtk_hdr));
|
||||||
memcpy(boot->r_hdr, boot->kernel, sizeof(mtk_hdr));
|
memcpy(boot->r_hdr, boot->ramdisk, sizeof(mtk_hdr));
|
||||||
fprintf(stderr, "RAMDISK [%u]\n", boot->r_hdr->size);
|
fprintf(stderr, "RAMDISK [%u]\n", boot->r_hdr->size);
|
||||||
fprintf(stderr, "NAME [%s]\n", boot->r_hdr->name);
|
fprintf(stderr, "NAME [%s]\n", boot->r_hdr->name);
|
||||||
boot->ramdisk += 512;
|
boot->ramdisk += 512;
|
||||||
lheader(boot, ramdisk_size, -= 512);
|
lheader(boot, ramdisk_size, -= 512);
|
||||||
boot->k_fmt = check_fmt(boot->ramdisk, header(boot, ramdisk_size));
|
boot->r_fmt = check_fmt(boot->ramdisk, header(boot, ramdisk_size));
|
||||||
}
|
}
|
||||||
|
|
||||||
char fmt[16];
|
char fmt[16];
|
||||||
@@ -288,8 +294,10 @@ void repack(const char* orig_image, const char* out_image) {
|
|||||||
} else if (boot.flags & BLOB_FLAG) {
|
} else if (boot.flags & BLOB_FLAG) {
|
||||||
// Skip blob header
|
// Skip blob header
|
||||||
write_zero(fd, sizeof(blob_hdr));
|
write_zero(fd, sizeof(blob_hdr));
|
||||||
} else if (boot.flags & NOOK_FLAG) {
|
} else if (boot.flags & NOOKHD_FLAG) {
|
||||||
restore_buf(fd, boot.map_addr, NOOK_PRE_HEADER_SZ);
|
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
|
// Skip a page for header
|
||||||
@@ -312,13 +320,14 @@ void repack(const char* orig_image, const char* out_image) {
|
|||||||
} else {
|
} else {
|
||||||
lheader(&boot, kernel_size, = restore(KERNEL_FILE, fd));
|
lheader(&boot, kernel_size, = restore(KERNEL_FILE, fd));
|
||||||
}
|
}
|
||||||
// dtb
|
|
||||||
if (access(DTB_FILE, R_OK) == 0) {
|
|
||||||
lheader(&boot, kernel_size, += restore(DTB_FILE, fd));
|
|
||||||
}
|
|
||||||
file_align();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dtb
|
||||||
|
if (access(DTB_FILE, R_OK) == 0) {
|
||||||
|
lheader(&boot, kernel_size, += restore(DTB_FILE, fd));
|
||||||
|
}
|
||||||
|
file_align();
|
||||||
|
|
||||||
// ramdisk
|
// ramdisk
|
||||||
ramdisk_off = lseek(fd, 0, SEEK_CUR);
|
ramdisk_off = lseek(fd, 0, SEEK_CUR);
|
||||||
if (boot.flags & MTK_RAMDISK) {
|
if (boot.flags & MTK_RAMDISK) {
|
||||||
@@ -333,7 +342,7 @@ void repack(const char* orig_image, const char* out_image) {
|
|||||||
lheader(&boot, ramdisk_size, = comp(boot.r_fmt, fd, cpio, cpio_size));
|
lheader(&boot, ramdisk_size, = comp(boot.r_fmt, fd, cpio, cpio_size));
|
||||||
munmap(cpio, cpio_size);
|
munmap(cpio, cpio_size);
|
||||||
} else {
|
} else {
|
||||||
lheader(&boot, kernel_size, = restore(KERNEL_FILE, fd));
|
lheader(&boot, ramdisk_size, = restore(RAMDISK_FILE, fd));
|
||||||
}
|
}
|
||||||
file_align();
|
file_align();
|
||||||
}
|
}
|
||||||
|
@@ -130,7 +130,8 @@ typedef struct blob_hdr {
|
|||||||
#define LG_BUMP_FLAG 0x0040
|
#define LG_BUMP_FLAG 0x0040
|
||||||
#define SHA256_FLAG 0x0080
|
#define SHA256_FLAG 0x0080
|
||||||
#define BLOB_FLAG 0x0100
|
#define BLOB_FLAG 0x0100
|
||||||
#define NOOK_FLAG 0x0200
|
#define NOOKHD_FLAG 0x0200
|
||||||
|
#define ACCLAIM_FLAG 0x0400
|
||||||
|
|
||||||
typedef struct boot_img {
|
typedef struct boot_img {
|
||||||
// Memory map of the whole image
|
// Memory map of the whole image
|
||||||
|
@@ -38,8 +38,11 @@ typedef enum {
|
|||||||
#define DHTB_MAGIC "\x44\x48\x54\x42\x01\x00\x00\x00"
|
#define DHTB_MAGIC "\x44\x48\x54\x42\x01\x00\x00\x00"
|
||||||
#define SEANDROID_MAGIC "SEANDROIDENFORCE"
|
#define SEANDROID_MAGIC "SEANDROIDENFORCE"
|
||||||
#define TEGRABLOB_MAGIC "-SIGNED-BY-SIGNBLOB-"
|
#define TEGRABLOB_MAGIC "-SIGNED-BY-SIGNBLOB-"
|
||||||
#define NOOK_MAGIC "Green Loader"
|
#define NOOKHD_MAGIC "Green Loader"
|
||||||
#define NOOK_PRE_HEADER_SZ 1048575
|
#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_LIST ((char *[]) { "gzip", "xz", "lzma", "bzip2", "lz4", "lz4_legacy", NULL })
|
||||||
#define SUP_EXT_LIST ((char *[]) { "gz", "xz", "lzma", "bz2", "lz4", "lz4", NULL })
|
#define SUP_EXT_LIST ((char *[]) { "gz", "xz", "lzma", "bz2", "lz4", "lz4", NULL })
|
||||||
|
@@ -34,18 +34,22 @@ static void cpio_patch(struct vector *v, int keepverity, int keepforceencrypt) {
|
|||||||
|
|
||||||
#define STOCK_BOOT 0x0
|
#define STOCK_BOOT 0x0
|
||||||
#define MAGISK_PATCH 0x1
|
#define MAGISK_PATCH 0x1
|
||||||
#define OTHER_PATCH 0x2
|
#define HIGH_COMPRESS 0x2
|
||||||
|
#define OTHER_PATCH 0x3
|
||||||
|
|
||||||
static int cpio_test(struct vector *v) {
|
static int cpio_test(struct vector *v) {
|
||||||
const char *OTHER_LIST[] = { "sbin/launch_daemonsu.sh", "sbin/su", "init.xposed.rc", "boot/sbin/launch_daemonsu.sh", NULL };
|
const char *OTHER_LIST[] = { "sbin/launch_daemonsu.sh", "sbin/su", "init.xposed.rc", "boot/sbin/launch_daemonsu.sh", NULL };
|
||||||
const char *MAGISK_LIST[] = { ".backup/.magisk", "init.magisk.rc", "overlay/init.magisk.rc", NULL };
|
const char *MAGISK_LIST[] = { ".backup/.magisk", "init.magisk.rc", "overlay/init.magisk.rc", NULL };
|
||||||
|
|
||||||
for (int i = 0; OTHER_LIST[i]; ++i)
|
for (int i = 0; OTHER_LIST[i]; ++i)
|
||||||
if (cpio_find(v, OTHER_LIST[i]) > 0)
|
if (cpio_find(v, OTHER_LIST[i]) >= 0)
|
||||||
return OTHER_PATCH;
|
return OTHER_PATCH;
|
||||||
|
|
||||||
|
if (cpio_find(v, "ramdisk.cpio.xz") >= 0)
|
||||||
|
return HIGH_COMPRESS;
|
||||||
|
|
||||||
for (int i = 0; MAGISK_LIST[i]; ++i)
|
for (int i = 0; MAGISK_LIST[i]; ++i)
|
||||||
if (cpio_find(v, MAGISK_LIST[i]) > 0)
|
if (cpio_find(v, MAGISK_LIST[i]) >= 0)
|
||||||
return MAGISK_PATCH;
|
return MAGISK_PATCH;
|
||||||
|
|
||||||
return STOCK_BOOT;
|
return STOCK_BOOT;
|
||||||
|
Submodule native/jni/magiskpolicy updated: 26dfbb3028...21a557a184
@@ -1116,7 +1116,8 @@ static bool initialize_properties() {
|
|||||||
if (!initialize_properties_from_file("/system/etc/selinux/plat_property_contexts")) {
|
if (!initialize_properties_from_file("/system/etc/selinux/plat_property_contexts")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!initialize_properties_from_file("/vendor/etc/selinux/nonplat_property_contexts")) {
|
if (!initialize_properties_from_file("/vendor/etc/selinux/nonplat_property_contexts")
|
||||||
|
&& !initialize_properties_from_file("/vendor/etc/selinux/vendor_property_contexts")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@@ -58,11 +58,13 @@ int create_img(const char *img, int size) {
|
|||||||
LOGI("Create %s with size %dM\n", img, size);
|
LOGI("Create %s with size %dM\n", img, size);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
char buffer[16];
|
char size_str[16];
|
||||||
snprintf(buffer, sizeof(buffer), "%dM", size);
|
snprintf(size_str, sizeof(size_str), "%dM", size);
|
||||||
ret = exec_command_sync("make_ext4fs", "-l", buffer, img, NULL);
|
ret = exec_command_sync("make_ext4fs", "-b", "4096", "-l", size_str, img, NULL);
|
||||||
if (ret < 0)
|
if (ret < 0) {
|
||||||
return 1;
|
// On Android P there is no make_ext4fs, use mke2fs
|
||||||
|
ret = exec_command_sync("mke2fs", "-b", "4096", "-t", "ext4", img, size_str, NULL);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -280,7 +280,7 @@ static int v_exec_command(int err, int *fd, void (*setupenv)(struct vector*), co
|
|||||||
}
|
}
|
||||||
|
|
||||||
execvpe(argv0, (char **) vec_entry(&args), envp);
|
execvpe(argv0, (char **) vec_entry(&args), envp);
|
||||||
PLOGE("execvpe");
|
PLOGE("execvpe %s", argv0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -91,9 +91,7 @@ case $? in
|
|||||||
abort "! Unable to unpack boot image"
|
abort "! Unable to unpack boot image"
|
||||||
;;
|
;;
|
||||||
2 )
|
2 )
|
||||||
ui_print "! Insufficient boot partition size detected"
|
|
||||||
HIGHCOMP=true
|
HIGHCOMP=true
|
||||||
ui_print "- Enable high compression mode"
|
|
||||||
;;
|
;;
|
||||||
3 )
|
3 )
|
||||||
ui_print "- ChromeOS boot image detected"
|
ui_print "- ChromeOS boot image detected"
|
||||||
@@ -114,6 +112,7 @@ esac
|
|||||||
|
|
||||||
# Test patch status and do restore, after this section, ramdisk.cpio.orig is guaranteed to exist
|
# Test patch status and do restore, after this section, ramdisk.cpio.orig is guaranteed to exist
|
||||||
ui_print "- Checking ramdisk status"
|
ui_print "- Checking ramdisk status"
|
||||||
|
MAGISK_PATCHED=false
|
||||||
./magiskboot --cpio ramdisk.cpio test
|
./magiskboot --cpio ramdisk.cpio test
|
||||||
case $? in
|
case $? in
|
||||||
0 ) # Stock boot
|
0 ) # Stock boot
|
||||||
@@ -125,18 +124,32 @@ case $? in
|
|||||||
cp -af ramdisk.cpio ramdisk.cpio.orig
|
cp -af ramdisk.cpio ramdisk.cpio.orig
|
||||||
;;
|
;;
|
||||||
1 ) # Magisk patched
|
1 ) # Magisk patched
|
||||||
ui_print "- Magisk patched image detected"
|
MAGISK_PATCHED=true
|
||||||
# Find SHA1 of stock boot image
|
HIGHCOMP=false
|
||||||
[ -z $SHA1 ] && SHA1=`./magiskboot --cpio ramdisk.cpio sha1 2>/dev/null`
|
|
||||||
./magiskboot --cpio ramdisk.cpio restore
|
|
||||||
cp -af ramdisk.cpio ramdisk.cpio.orig
|
|
||||||
;;
|
;;
|
||||||
2 ) # Other patched
|
2 ) # High compression mode
|
||||||
|
MAGISK_PATCHED=true
|
||||||
|
HIGHCOMP=true
|
||||||
|
;;
|
||||||
|
3 ) # Other patched
|
||||||
ui_print "! Boot image patched by other programs"
|
ui_print "! Boot image patched by other programs"
|
||||||
abort "! Please restore stock boot image"
|
abort "! Please restore stock boot image"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if $MAGISK_PATCHED; then
|
||||||
|
ui_print "- Magisk patched image detected"
|
||||||
|
# Find SHA1 of stock boot image
|
||||||
|
[ -z $SHA1 ] && SHA1=`./magiskboot --cpio ramdisk.cpio sha1 2>/dev/null`
|
||||||
|
./magiskboot --cpio ramdisk.cpio restore
|
||||||
|
cp -af ramdisk.cpio ramdisk.cpio.orig
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $HIGHCOMP; then
|
||||||
|
ui_print "! Insufficient boot partition size detected"
|
||||||
|
ui_print "- Enable high compression mode"
|
||||||
|
fi
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
# Ramdisk patches
|
# Ramdisk patches
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
|
@@ -73,7 +73,7 @@ case $? in
|
|||||||
ui_print "- Stock boot image detected"
|
ui_print "- Stock boot image detected"
|
||||||
abort "! Magisk is not installed!"
|
abort "! Magisk is not installed!"
|
||||||
;;
|
;;
|
||||||
1 ) # Magisk patched
|
1|2 ) # Magisk patched
|
||||||
ui_print "- Magisk patched image detected"
|
ui_print "- Magisk patched image detected"
|
||||||
# Find SHA1 of stock boot image
|
# Find SHA1 of stock boot image
|
||||||
[ -z $SHA1 ] && SHA1=`./magiskboot --cpio ramdisk.cpio sha1 2>/dev/null`
|
[ -z $SHA1 ] && SHA1=`./magiskboot --cpio ramdisk.cpio sha1 2>/dev/null`
|
||||||
@@ -89,7 +89,7 @@ case $? in
|
|||||||
flash_boot_image new-boot.img "$BOOTIMAGE"
|
flash_boot_image new-boot.img "$BOOTIMAGE"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
2 ) # Other patched
|
3 ) # Other patched
|
||||||
ui_print "! Boot image patched by other programs"
|
ui_print "! Boot image patched by other programs"
|
||||||
abort "! Cannot uninstall"
|
abort "! Cannot uninstall"
|
||||||
;;
|
;;
|
||||||
|
@@ -494,6 +494,7 @@ public class SignAPK {
|
|||||||
outputStream.write(total_size & 0xff);
|
outputStream.write(total_size & 0xff);
|
||||||
outputStream.write((total_size >> 8) & 0xff);
|
outputStream.write((total_size >> 8) & 0xff);
|
||||||
temp.writeTo(outputStream);
|
temp.writeTo(outputStream);
|
||||||
|
outputStream.close();
|
||||||
}
|
}
|
||||||
private static void signFile(Manifest manifest, JarMap inputJar,
|
private static void signFile(Manifest manifest, JarMap inputJar,
|
||||||
X509Certificate publicKey, PrivateKey privateKey,
|
X509Certificate publicKey, PrivateKey privateKey,
|
||||||
|
Reference in New Issue
Block a user