示例#1
0
void remount_service(int fd, void *cookie)
{
    int ret = remount_system();

    if (!ret)
       write_string(fd, "remount succeeded\n");
    else {
        char    buffer[200];
        snprintf(buffer, sizeof(buffer), "remount failed: %s\n", strerror(errno));
        write_string(fd, buffer);
    }

    sdb_close(fd);
}
int main(int argc, char ** argv) {
    char * hijacked_executable = argv[0];
    struct stat info;
    int result = 0;
    int i;
    if (NULL != strstr(hijacked_executable, "hijack")) {
        if (argc >= 2) {
            return busybox_driver(argc - 1, argv + 1);
        }

        return 0;
    }
    if ( 0 == stat(RECOVERY_MODE_FILE, &info))
    
                result = remove(RECOVERY_MODE_FILE);
                result = remount_root("/system/bin/hijack", 1);
                result = mkdir("/preinstall", S_IRWXU);
                result = mkdir("/tmp", S_IRWXU);
                result = mkdir("/res", S_IRWXU);
                result = mkdir("/res/images", S_IRWXU);
                result = remove("/etc");
                result = mkdir("/etc", S_IRWXU);
                result = rename("/sbin/adbd", "/sbin/adbd.old");
                result = property_set("ctl.stop", "runtime");
                result = property_set("ctl.stop", "zygote");
                result = property_set("persist.service.adb.enable", "1");
                printf("mountting cache and mount preinstall");
                result = hijack_mount("/system/bin/hijack", "/dev/block/mmcblk0p15", "/cache");
                result = hijack_mount("/system/bin/hijack", "/dev/block/mmcblk0p17", "/preinstall");

                result = hijack_umount("/preinstall/hijack", "/pds");
                result = hijack_umount("/preinstall/hijack", "/osh");
                result = remount_system("/preinstall/hijack", 1);
                char * updater_args[] = { UPDATE_BINARY, "2", "0", RECOVERY_UPDATE_ZIP, NULL };
                result = exec_and_wait(updater_args);
                return result;

    }