mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-11-23 18:15:30 +00:00
Change stock boot image SHA1 backup method
This commit is contained in:
parent
89e0be0099
commit
83ae66daea
@ -79,8 +79,9 @@ mm_patch_dtbo() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
restore_imgs() {
|
restore_imgs() {
|
||||||
local SHA1=`cat /.backup/.sha1`
|
local SHA1=`grep_prop SHA1 /.backup/.magisk`
|
||||||
[ -z $SHA1 ] && local SHA1=`grep_prop #STOCKSHA1`
|
[ -z $SHA1 ] && local SHA1=`cat /.backup/.sha1`
|
||||||
|
[ -z $SHA1 ] && local SHA1=`grep_prop #STOCKSHA1 /.backup/.magisk`
|
||||||
[ -z $SHA1 ] && return 1
|
[ -z $SHA1 ] && return 1
|
||||||
local STOCKBOOT=/data/stock_boot_${SHA1}.img.gz
|
local STOCKBOOT=/data/stock_boot_${SHA1}.img.gz
|
||||||
local STOCKDTBO=/data/stock_dtbo.img.gz
|
local STOCKDTBO=/data/stock_dtbo.img.gz
|
||||||
|
@ -57,18 +57,12 @@ static void usage(char *arg0) {
|
|||||||
" 0:stock 1:Magisk 2:unsupported (phh, SuperSU, Xposed)\n"
|
" 0:stock 1:Magisk 2:unsupported (phh, SuperSU, Xposed)\n"
|
||||||
" patch KEEPVERITY KEEPFORCEENCRYPT\n"
|
" patch KEEPVERITY KEEPFORCEENCRYPT\n"
|
||||||
" Ramdisk patches. KEEP**** are boolean values\n"
|
" Ramdisk patches. KEEP**** are boolean values\n"
|
||||||
" backup ORIG [SHA1]\n"
|
" backup ORIG\n"
|
||||||
" Create ramdisk backups from ORIG\n"
|
" Create ramdisk backups from ORIG\n"
|
||||||
" SHA1 of stock boot image is optional\n"
|
|
||||||
" restore\n"
|
" restore\n"
|
||||||
" Restore ramdisk from ramdisk backup stored within incpio\n"
|
" Restore ramdisk from ramdisk backup stored within incpio\n"
|
||||||
" magisk ORIG KEEPVERITY KEEPFORCEENCRYPT [SHA1]\n"
|
|
||||||
" Do Magisk patches and backups all in one step\n"
|
|
||||||
" Create ramdisk backups from ORIG\n"
|
|
||||||
" KEEP**** are boolean values\n"
|
|
||||||
" SHA1 of stock boot image is optional\n"
|
|
||||||
" sha1\n"
|
" sha1\n"
|
||||||
" Print stock boot SHA1 if previously stored\n"
|
" Print stock boot SHA1 if previously backed up in ramdisk\n"
|
||||||
"\n"
|
"\n"
|
||||||
" --dtb-<cmd> <dtb>\n"
|
" --dtb-<cmd> <dtb>\n"
|
||||||
" Do dtb related cmds to <dtb> (modifications are done directly)\n"
|
" Do dtb related cmds to <dtb> (modifications are done directly)\n"
|
||||||
|
@ -13,7 +13,7 @@ public:
|
|||||||
int test();
|
int test();
|
||||||
char * sha1();
|
char * sha1();
|
||||||
void restore();
|
void restore();
|
||||||
void backup(Vector<cpio_entry*> &bak, const char *orig, const char *sha1);
|
void backup(const char *orig);
|
||||||
};
|
};
|
||||||
|
|
||||||
void magisk_cpio::patch(bool keepverity, bool keepforceencrypt) {
|
void magisk_cpio::patch(bool keepverity, bool keepforceencrypt) {
|
||||||
@ -64,16 +64,26 @@ int magisk_cpio::test() {
|
|||||||
return STOCK_BOOT;
|
return STOCK_BOOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define for_each_line(line, buf, size) \
|
||||||
|
for (line = (char *) buf; line < (char *) buf + size && line[0]; line = strchr(line + 1, '\n') + 1)
|
||||||
|
|
||||||
char *magisk_cpio::sha1() {
|
char *magisk_cpio::sha1() {
|
||||||
char sha1[41];
|
char sha1[41];
|
||||||
|
char *line;
|
||||||
for (auto &e : arr) {
|
for (auto &e : arr) {
|
||||||
if (!e) continue;
|
if (!e) continue;
|
||||||
if (e->filename == "init.magisk.rc" || e->filename == "overlay/init.magisk.rc") {
|
if (e->filename == "init.magisk.rc" || e->filename == "overlay/init.magisk.rc") {
|
||||||
for (char *pos = (char *) e->data; pos < (char *) e->data + e->filesize;
|
for_each_line(line, e->data, e->filesize) {
|
||||||
pos = strchr(pos + 1, '\n') + 1) {
|
if (strncmp(line, "#STOCKSHA1=", 11) == 0) {
|
||||||
if (memcmp(pos, "# STOCKSHA1=", 12) == 0) {
|
strncpy(sha1, line + 12, 40);
|
||||||
pos += 12;
|
sha1[40] = '\0';
|
||||||
memcpy(sha1, pos, 40);
|
return strdup(sha1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (e->filename == ".backup/.magisk") {
|
||||||
|
for_each_line(line, e->data, e->filesize) {
|
||||||
|
if (strncmp(line, "SHA1=", 5) == 0) {
|
||||||
|
strncpy(sha1, line + 5, 40);
|
||||||
sha1[40] = '\0';
|
sha1[40] = '\0';
|
||||||
return strdup(sha1);
|
return strdup(sha1);
|
||||||
}
|
}
|
||||||
@ -109,8 +119,9 @@ void magisk_cpio::restore() {
|
|||||||
rm("magisk", true);
|
rm("magisk", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void magisk_cpio::backup(Vector<cpio_entry*> &bak, const char *orig, const char *sha1) {
|
void magisk_cpio::backup(const char *orig) {
|
||||||
cpio_entry *m, *n, *rem, *cksm;
|
Vector<cpio_entry*> bak;
|
||||||
|
cpio_entry *m, *n, *rem;
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
|
|
||||||
m = new cpio_entry();
|
m = new cpio_entry();
|
||||||
@ -122,16 +133,6 @@ void magisk_cpio::backup(Vector<cpio_entry*> &bak, const char *orig, const char
|
|||||||
rem->filename = ".backup/.rmlist";
|
rem->filename = ".backup/.rmlist";
|
||||||
rem->mode = S_IFREG;
|
rem->mode = S_IFREG;
|
||||||
|
|
||||||
if (sha1) {
|
|
||||||
fprintf(stderr, "Save SHA1: [%s] -> [.backup/.sha1]\n", sha1);
|
|
||||||
cksm = new cpio_entry();
|
|
||||||
cksm->filename = ".backup/.sha1";
|
|
||||||
cksm->mode = S_IFREG;
|
|
||||||
cksm->data = strdup(sha1);
|
|
||||||
cksm->filesize = strlen(sha1) + 1;
|
|
||||||
bak.push_back(cksm);
|
|
||||||
}
|
|
||||||
|
|
||||||
magisk_cpio o(orig);
|
magisk_cpio o(orig);
|
||||||
|
|
||||||
// Remove possible backups in original ramdisk
|
// Remove possible backups in original ramdisk
|
||||||
@ -193,6 +194,9 @@ void magisk_cpio::backup(Vector<cpio_entry*> &bak, const char *orig, const char
|
|||||||
bak.push_back(rem);
|
bak.push_back(rem);
|
||||||
else
|
else
|
||||||
delete rem;
|
delete rem;
|
||||||
|
|
||||||
|
if (bak.size() > 1)
|
||||||
|
insert(bak);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -224,29 +228,10 @@ int cpio_commands(int argc, char *argv[]) {
|
|||||||
cpio.restore();
|
cpio.restore();
|
||||||
} else if (strcmp(cmdv[0], "sha1") == 0) {
|
} else if (strcmp(cmdv[0], "sha1") == 0) {
|
||||||
char *sha1 = cpio.sha1();
|
char *sha1 = cpio.sha1();
|
||||||
if (sha1)
|
if (sha1) printf("%s\n", sha1);
|
||||||
printf("%s\n", sha1);
|
|
||||||
free(sha1);
|
|
||||||
return 0;
|
return 0;
|
||||||
} else if (cmdc >= 2 && strcmp(cmdv[0], "backup") == 0) {
|
} else if (cmdc >= 2 && strcmp(cmdv[0], "backup") == 0) {
|
||||||
Vector<cpio_entry*> bak;
|
cpio.backup(cmdv[1]);
|
||||||
cpio.backup(bak, cmdv[1], cmdv[2]);
|
|
||||||
cpio.insert(bak);
|
|
||||||
} else if (cmdc >= 4 && strcmp(cmdv[0], "magisk") == 0) {
|
|
||||||
cpio.patch(strcmp(cmdv[2], "true") == 0, strcmp(cmdv[3], "true") == 0);
|
|
||||||
|
|
||||||
Vector<cpio_entry*> bak;
|
|
||||||
cpio.backup(bak, cmdv[1], cmdv[4]);
|
|
||||||
|
|
||||||
auto e = new cpio_entry();
|
|
||||||
e->filename = ".backup/.magisk";
|
|
||||||
e->mode = S_IFREG;
|
|
||||||
e->data = xmalloc(50);
|
|
||||||
snprintf((char *) e->data, 50, "KEEPVERITY=%s\nKEEPFORCEENCRYPT=%s\n", cmdv[2], cmdv[3]);
|
|
||||||
e->filesize = strlen((char *) e->data) + 1;
|
|
||||||
|
|
||||||
cpio.insert(bak);
|
|
||||||
cpio.insert(e);
|
|
||||||
} else if (cmdc >= 2 && strcmp(cmdv[0], "rm") == 0) {
|
} else if (cmdc >= 2 && strcmp(cmdv[0], "rm") == 0) {
|
||||||
bool r = cmdc > 2 && strcmp(cmdv[1], "-r") == 0;
|
bool r = cmdc > 2 && strcmp(cmdv[1], "-r") == 0;
|
||||||
cpio.rm(cmdv[1 + r], r);
|
cpio.rm(cmdv[1 + r], r);
|
||||||
@ -256,7 +241,7 @@ int cpio_commands(int argc, char *argv[]) {
|
|||||||
cpio.patch(strcmp(cmdv[1], "true") == 0, strcmp(cmdv[2], "true") == 0);
|
cpio.patch(strcmp(cmdv[1], "true") == 0, strcmp(cmdv[2], "true") == 0);
|
||||||
} else if (strcmp(cmdv[0], "extract") == 0) {
|
} else if (strcmp(cmdv[0], "extract") == 0) {
|
||||||
if (cmdc == 3) {
|
if (cmdc == 3) {
|
||||||
return cpio.extract(cmdv[1], cmdv[2]);
|
return !cpio.extract(cmdv[1], cmdv[2]);
|
||||||
} else {
|
} else {
|
||||||
cpio.extract();
|
cpio.extract();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -125,11 +125,17 @@ esac
|
|||||||
|
|
||||||
ui_print "- Patching ramdisk"
|
ui_print "- Patching ramdisk"
|
||||||
|
|
||||||
|
echo "KEEPVERITY=$KEEPVERITY" > config
|
||||||
|
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
|
||||||
|
[ ! -z $SHA1 ] && echo "SHA1=$SHA1" >> config
|
||||||
|
|
||||||
./magiskboot --cpio ramdisk.cpio \
|
./magiskboot --cpio ramdisk.cpio \
|
||||||
"add 750 init magiskinit" \
|
"add 750 init magiskinit" \
|
||||||
"magisk ramdisk.cpio.orig $KEEPVERITY $KEEPFORCEENCRYPT $SHA1"
|
"patch $KEEPVERITY $KEEPFORCEENCRYPT" \
|
||||||
|
"backup ramdisk.cpio.orig" \
|
||||||
|
"add 000 .backup/.magisk config"
|
||||||
|
|
||||||
rm -f ramdisk.cpio.orig
|
rm -f ramdisk.cpio.orig config
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
# Binary patches
|
# Binary patches
|
||||||
|
Loading…
Reference in New Issue
Block a user