Search in sources :

Example 1 with JarMap

use of com.topjohnwu.utils.JarMap in project MagiskManager by topjohnwu.

the class HideManager method doInBackground.

@Override
protected Boolean doInBackground(Void... voids) {
    MagiskManager mm = MagiskManager.get();
    // Generate a new unhide app with random package name
    SuFile repack = new SuFile("/data/local/tmp/repack.apk", true);
    String pkg = genPackageName("com.", Const.ORIG_PKG_NAME.length());
    try {
        // Read whole APK into memory
        JarMap apk = new JarMap(new FileInputStream(mm.getPackageCodePath()));
        JarEntry je = new JarEntry(Const.ANDROID_MANIFEST);
        byte[] xml = apk.getRawData(je);
        if (!findAndPatch(xml, Const.ORIG_PKG_NAME, pkg))
            return false;
        if (!findAndPatch(xml, Const.ORIG_PKG_NAME + ".provider", pkg + ".provider"))
            return false;
        // Write in changes
        apk.getOutputStream(je).write(xml);
        // Sign the APK
        ZipUtils.signZip(apk, new SuFileOutputStream(repack));
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    // Install the application
    if (!ShellUtils.fastCmdResult(Shell.getShell(), "pm install " + repack))
        return false;
    repack.delete();
    mm.suDB.setStrings(Const.Key.SU_REQUESTER, pkg);
    Utils.dumpPrefs();
    Utils.uninstallPkg(Const.ORIG_PKG_NAME);
    return true;
}
Also used : JarMap(com.topjohnwu.utils.JarMap) MagiskManager(com.topjohnwu.magisk.MagiskManager) SuFileOutputStream(com.topjohnwu.superuser.io.SuFileOutputStream) SuFile(com.topjohnwu.superuser.io.SuFile) JarEntry(java.util.jar.JarEntry) FileInputStream(java.io.FileInputStream)

Aggregations

MagiskManager (com.topjohnwu.magisk.MagiskManager)1 SuFile (com.topjohnwu.superuser.io.SuFile)1 SuFileOutputStream (com.topjohnwu.superuser.io.SuFileOutputStream)1 JarMap (com.topjohnwu.utils.JarMap)1 FileInputStream (java.io.FileInputStream)1 JarEntry (java.util.jar.JarEntry)1