mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-26 01:47:47 +00:00
Dump stub app to MAGISKTMP/stub.apk
This commit is contained in:
parent
01a1213463
commit
9de6e8846b
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user