fixup! Add new manager hook
This commit is contained in:
parent
8114710745
commit
de040b9cda
|
|
@ -9,27 +9,11 @@ apply plugin: 'com.android.application'
|
|||
static def calcSha256(file) {
|
||||
def md = MessageDigest.getInstance("SHA-256")
|
||||
file.eachByte 4096, { bytes, size ->
|
||||
md.update(bytes, 0, size);
|
||||
md.update(bytes, 0, size)
|
||||
}
|
||||
return md.digest().encodeHex()
|
||||
}
|
||||
|
||||
// Values set here will be overriden by AppVeyor, feel free to modify during development.
|
||||
def buildVersionName = 'v0.5.1.4'
|
||||
def buildVersionCode = 233
|
||||
|
||||
if (System.env.APPVEYOR_BUILD_VERSION != null) {
|
||||
buildVersionName = "v${System.getenv('appveyor_build_version')}"
|
||||
}
|
||||
|
||||
if (System.env.APPVEYOR_BUILD_NUMBER != null) {
|
||||
// Split is necessary because PRs set the build number to "1234-something".
|
||||
def parts = System.env.APPVEYOR_BUILD_NUMBER.split('-')
|
||||
buildVersionCode = Integer.valueOf(parts[0])
|
||||
}
|
||||
|
||||
version buildVersionName
|
||||
|
||||
ext {
|
||||
module_name = "LSPosed"
|
||||
jar_dest_dir = "${projectDir}/template_override/system/framework/"
|
||||
|
|
@ -150,7 +134,7 @@ afterEvaluate {
|
|||
android.applicationVariants.all { variant ->
|
||||
def variantCapped = variant.name.capitalize()
|
||||
def variantLowered = variant.name.toLowerCase()
|
||||
def zipFileName = "${module_name}-${project.version}-${variantLowered}.zip"
|
||||
def zipFileName = "${module_name}-${rootProject.ext.versionName}-${variantLowered}.zip"
|
||||
|
||||
task("copyMainDex${variantCapped}", type: Copy) {
|
||||
def dexOutPath = variant.name.contains("release") ?
|
||||
|
|
@ -169,19 +153,13 @@ afterEvaluate {
|
|||
dependsOn "assemble${variantCapped}"
|
||||
dependsOn tasks.getByPath(":sandhook-hooklib:copySandHook${variantCapped}LibraryToMagiskTemplate")
|
||||
doFirst {
|
||||
copy {
|
||||
from "${projectDir}/tpl/edconfig.tpl"
|
||||
into templateFrameworkPath
|
||||
rename "edconfig.tpl", "edconfig.jar"
|
||||
expand(version: "$version", apiCode: "$apiCode")
|
||||
}
|
||||
copy {
|
||||
from "${projectDir}/tpl/module.prop.tpl"
|
||||
into templateRootPath
|
||||
rename "module.prop.tpl", "module.prop"
|
||||
expand(moduleId: "$module_id",
|
||||
versionName: "$version",
|
||||
versionCode: "$versionCode", authorList: "$authors",
|
||||
versionName: "$rootProject.ext.versionName",
|
||||
versionCode: "$rootProject.ext.versionCode", authorList: "$authors",
|
||||
apiCode: "$apiCode", minApi: "$moduleMinRiruApiVersion")
|
||||
filter(FixCrLfFilter.class, eol: FixCrLfFilter.CrLf.newInstance("lf"))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ import android.view.LayoutInflater;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.elderdrivers.riru.edxp.BuildConfig;
|
||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||
import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal;
|
||||
import com.elderdrivers.riru.edxp.BuildConfig;
|
||||
import com.elderdrivers.riru.edxp.core.EdxpImpl;
|
||||
import com.elderdrivers.riru.edxp.core.Main;
|
||||
import com.elderdrivers.riru.edxp.util.Utils;
|
||||
|
|
@ -26,26 +26,73 @@ import de.robv.android.xposed.XposedHelpers;
|
|||
|
||||
public class XposedInstallerHooker {
|
||||
|
||||
private static final String LEGACY_INSTALLER_PACKAGE_NAME = "de.robv.android.xposed.installer";
|
||||
|
||||
public static void hookXposedInstaller(final ClassLoader classLoader) {
|
||||
// Deopt manager. It will not throw exception.
|
||||
deoptMethod(classLoader, "org.meowcat.edxposed.manager.ModulesFragment", "onActivityCreated", Bundle.class);
|
||||
deoptMethod(classLoader, "org.meowcat.edxposed.manager.ModulesFragment", "showMenu", Context.class, View.class, ApplicationInfo.class);
|
||||
deoptMethod(classLoader, "org.meowcat.edxposed.manager.StatusInstallerFragment", "onCreateView", LayoutInflater.class, ViewGroup.class, Bundle.class);
|
||||
deoptMethod(classLoader, "org.meowcat.edxposed.manager.util.ModuleUtil", "updateModulesList", boolean.class, View.class);
|
||||
|
||||
// EdXposed Manager R
|
||||
try {
|
||||
final String xposedAppClass = LEGACY_INSTALLER_PACKAGE_NAME + ".XposedApp";
|
||||
final Class InstallZipUtil = XposedHelpers.findClass(LEGACY_INSTALLER_PACKAGE_NAME
|
||||
+ ".util.InstallZipUtil", classLoader);
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedApiVersion", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||
return XposedBridge.getXposedVersion();
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedVersion", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||
return BuildConfig.VERSION_NAME;
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedVersionCode", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||
return BuildConfig.VERSION_CODE;
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedApiVersion", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||
return XposedBridge.getXposedVersion();
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedVariant", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||
String variant = "None";
|
||||
switch (Main.getEdxpVariant()) {
|
||||
case EdxpImpl.NONE:
|
||||
break;
|
||||
case EdxpImpl.YAHFA:
|
||||
variant = "YAHFA";
|
||||
break;
|
||||
case EdxpImpl.SANDHOOK:
|
||||
variant = "SandHook";
|
||||
break;
|
||||
}
|
||||
return variant;
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getBaseDir", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||
return ConfigManager.getBaseConfigPath() + "/";
|
||||
}
|
||||
});
|
||||
Utils.logD("Hooked EdXposed Manager R");
|
||||
return;
|
||||
} catch (Throwable t) {
|
||||
Utils.logW("Could not hook EdXposed Manager R", t);
|
||||
}
|
||||
|
||||
// EdXposed Manager and Xposed Installer
|
||||
try {
|
||||
final String xposedAppClass = "de.robv.android.xposed.installer.XposedApp";
|
||||
final Class<?> InstallZipUtil = XposedHelpers.findClass("de.robv.android.xposed.installer.util.InstallZipUtil", classLoader);
|
||||
XposedHelpers.findAndHookMethod(xposedAppClass, classLoader, "getActiveXposedVersion",
|
||||
XC_MethodReplacement.returnConstant(XposedBridge.getXposedVersion())
|
||||
);
|
||||
XposedHelpers.findAndHookMethod(xposedAppClass, classLoader,
|
||||
"reloadXposedProp", new XC_MethodHook() {
|
||||
@Override
|
||||
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
||||
protected void beforeHookedMethod(MethodHookParam param) {
|
||||
Utils.logD("before reloadXposedProp...");
|
||||
final String propFieldName = "mXposedProp";
|
||||
final Object thisObject = param.thisObject;
|
||||
|
|
@ -90,6 +137,17 @@ public class XposedInstallerHooker {
|
|||
}
|
||||
}
|
||||
});
|
||||
} catch (Throwable t) {
|
||||
Utils.logW("Could not hook Xposed Installer or EdXposed Manager", t);
|
||||
return;
|
||||
}
|
||||
|
||||
// EdXposed Manager
|
||||
deoptMethod(classLoader, "org.meowcat.edxposed.manager.ModulesFragment", "onActivityCreated", Bundle.class);
|
||||
deoptMethod(classLoader, "org.meowcat.edxposed.manager.ModulesFragment", "showMenu", Context.class, View.class, ApplicationInfo.class);
|
||||
deoptMethod(classLoader, "org.meowcat.edxposed.manager.StatusInstallerFragment", "onCreateView", LayoutInflater.class, ViewGroup.class, Bundle.class);
|
||||
deoptMethod(classLoader, "org.meowcat.edxposed.manager.util.ModuleUtil", "updateModulesList", boolean.class, View.class);
|
||||
try {
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.XposedApp", classLoader, "onCreate", new XC_MethodHook() {
|
||||
@Override
|
||||
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
|
||||
|
|
@ -110,73 +168,21 @@ public class XposedInstallerHooker {
|
|||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.StatusInstallerFragment", classLoader, "getCanonicalFile", File.class, new XC_MethodHook() {
|
||||
@Override
|
||||
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
||||
File arg = (File)param.args[0];
|
||||
if(arg.equals(new File(AndroidAppHelper.currentApplicationInfo().deviceProtectedDataDir))) {
|
||||
File arg = (File) param.args[0];
|
||||
if (arg.equals(new File(AndroidAppHelper.currentApplicationInfo().deviceProtectedDataDir))) {
|
||||
param.args[0] = new File(ConfigManager.getBaseConfigPath());
|
||||
}
|
||||
}
|
||||
});
|
||||
Utils.logD("Hooked EdXposed Manager");
|
||||
} catch (Throwable t) {
|
||||
Utils.logE("Could not hook Xposed Installer", t);
|
||||
}
|
||||
|
||||
// for new manager
|
||||
try {
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedApiVersion", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return XposedBridge.getXposedVersion();
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedVersion", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return BuildConfig.VERSION_NAME;
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedVersionCode", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return BuildConfig.VERSION_CODE;
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedApiVersion", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return XposedBridge.getXposedVersion();
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedVariant", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
String variant = "None";
|
||||
switch (Main.getEdxpVariant()) {
|
||||
case EdxpImpl.NONE:
|
||||
break;
|
||||
case EdxpImpl.YAHFA:
|
||||
variant = "YAHFA";
|
||||
break;
|
||||
case EdxpImpl.SANDHOOK:
|
||||
variant = "SandHook";
|
||||
break;
|
||||
}
|
||||
return variant;
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getBaseDir", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return ConfigManager.getBaseConfigPath() + "/";
|
||||
}
|
||||
});
|
||||
} catch (Throwable t) {
|
||||
Utils.logE("Could not hook EdXposed Installer", t);
|
||||
Utils.logD("Hooked Xposed Installer");
|
||||
}
|
||||
}
|
||||
|
||||
private static void deoptMethod(ClassLoader cl, String className, String methodName, Class<?> ...params) {
|
||||
private static void deoptMethod(ClassLoader cl, String className, String methodName, Class<?>... params) {
|
||||
try {
|
||||
Class clazz = XposedHelpers.findClassIfExists(className, cl);
|
||||
Class<?> clazz = XposedHelpers.findClassIfExists(className, cl);
|
||||
if (clazz == null) {
|
||||
Utils.logE("Class " + className + " not found when deoptimizing EdXposed Manager");
|
||||
return;
|
||||
|
|
@ -184,8 +190,8 @@ public class XposedInstallerHooker {
|
|||
|
||||
Object method = XposedHelpers.findMethodExact(clazz, methodName, params);
|
||||
EdXpConfigGlobal.getHookProvider().deoptMethodNative(method);
|
||||
} catch (Throwable e) {
|
||||
Utils.logE("Error when deoptimizing " + className + ":" + methodName, e);
|
||||
} catch (Throwable t) {
|
||||
Utils.logE("Error when deoptimizing " + className + ":" + methodName, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
version=$apiCode-$version
|
||||
arch=arm64
|
||||
minsdk=26
|
||||
maxsdk=30
|
||||
requires:fbe_aware=1
|
||||
Loading…
Reference in New Issue