Dump stub app to MAGISKTMP/stub.apk

This commit is contained in:
vvb2060 2022-03-18 04:04:13 +08:00 committed by John Wu
parent 01a1213463
commit 9de6e8846b
4 changed files with 20 additions and 5 deletions

View File

@ -18,6 +18,7 @@
using namespace std; using namespace std;
static bool safe_mode = false; static bool safe_mode = false;
static int stub_fd = -1;
bool zygisk_enabled = false; bool zygisk_enabled = false;
/********* /*********
@ -122,6 +123,10 @@ static bool magisk_env() {
LOGI("* Initializing Magisk environment\n"); LOGI("* Initializing Magisk environment\n");
string stub_path = MAGISKTMP + "/stub.apk";
stub_fd = xopen(stub_path.data(), O_RDONLY | O_CLOEXEC);
unlink(stub_path.data());
string pkg; string pkg;
get_manager(&pkg); get_manager(&pkg);
@ -370,10 +375,15 @@ void boot_complete(int client) {
if (access(SECURE_DIR, F_OK) != 0) if (access(SECURE_DIR, F_OK) != 0)
xmkdir(SECURE_DIR, 0700); xmkdir(SECURE_DIR, 0700);
if (!get_manager()) { if (stub_fd > 0 && !get_manager()) {
// Install stub // Install stub
auto init = MAGISKTMP + "/magiskinit"; struct stat st{};
exec_command_sync(init.data(), "-x", "manager", "/data/magisk.apk"); fstat(stub_fd, &st);
install_apk("/data/magisk.apk"); int dfd = xopen("/data/stub.apk", O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0600);
xsendfile(dfd, stub_fd, nullptr, st.st_size);
close(stub_fd);
close(dfd);
stub_fd = -1;
install_apk("/data/stub.apk");
} }
} }

View File

@ -35,7 +35,7 @@ bool unxz(int fd, const uint8_t *buf, size_t size) {
return true; return true;
} }
static int dump_manager(const char *path, mode_t mode) { int dump_manager(const char *path, mode_t mode) {
int fd = xopen(path, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, mode); int fd = xopen(path, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, mode);
if (fd < 0) if (fd < 0)
return 1; return 1;

View File

@ -32,6 +32,7 @@ void load_kernel_info(BootConfig *config);
bool check_two_stage(); bool check_two_stage();
void setup_klog(); void setup_klog();
const char *backup_init(); const char *backup_init();
int dump_manager(const char *path, mode_t mode);
/*************** /***************
* Base classes * Base classes

View File

@ -233,6 +233,8 @@ void SARBase::patch_ro_root() {
} else { } else {
xsymlink("./magisk32", "magisk"); xsymlink("./magisk32", "magisk");
} }
dump_manager("stub.apk", 0644);
} }
if ((access(SPLIT_PLAT_CIL, F_OK) != 0 && access("/sepolicy", F_OK) == 0) || !hijack_sepolicy()) { if ((access(SPLIT_PLAT_CIL, F_OK) != 0 && access("/sepolicy", F_OK) == 0) || !hijack_sepolicy()) {
@ -305,6 +307,8 @@ void MagiskInit::patch_rw_root() {
} else { } else {
xsymlink("./magisk32", "magisk"); xsymlink("./magisk32", "magisk");
} }
dump_manager("stub.apk", 0644);
} }
if ((!treble && access("/sepolicy", F_OK) == 0) || !hijack_sepolicy()) { if ((!treble && access("/sepolicy", F_OK) == 0) || !hijack_sepolicy()) {