Merge branch 'main' of https://github.com/qqlittleice233/SimplicityTools into qqlittleice233-main

This commit is contained in:
YuKongA
2022-03-11 17:03:23 +08:00
parent 6889d0ba34
commit 9b6b3a3508
13 changed files with 927 additions and 0 deletions

View File

@@ -2,19 +2,33 @@ package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.securitycenter.LockOneHundred
import com.lt2333.simplicitytools.hook.app.securitycenter.RemoveMacroBlacklist
import com.lt2333.simplicitytools.hook.app.securitycenter.ShowBatteryTemperature
import com.lt2333.simplicitytools.hook.app.securitycenter.SkipWaitingTime
import com.lt2333.simplicitytools.util.log
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
import me.iacn.biliroaming.utils.DexHelper
class SecurityCenter : IXposedHookLoadPackage {
var dexHelper: DexHelper? = null
override fun handleLoadPackage(lpparam: LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
try {
System.loadLibrary("DexBuilder")
dexHelper = DexHelper.getInstance(lpparam.classLoader)
} catch (e: UnsatisfiedLinkError) {
log("DexBuilder 加载失败")
}
//跳过 5/10秒等待时间
SkipWaitingTime().handleLoadPackage(lpparam)
//锁定 100分
LockOneHundred().handleLoadPackage(lpparam)
//去除自动连招黑名单
RemoveMacroBlacklist().handleLoadPackage(lpparam)
//显示电池温度
ShowBatteryTemperature(dexHelper).handleLoadPackage(lpparam)
}
}

View File

@@ -0,0 +1,39 @@
package com.lt2333.simplicitytools.hook.app.securitycenter
import com.lt2333.simplicitytools.util.log
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XC_MethodReplacement
import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage
import me.iacn.biliroaming.utils.DexHelper
class ShowBatteryTemperature(private val dexHelper: DexHelper?): IXposedHookLoadPackage {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
if (dexHelper == null) {
log("DexHelper为nullhook ShowBatteryTemperature 失败")
return
}
val methodIndex = dexHelper.findMethodUsingString(
"isBatteryLifeFunctionSupported",
true,
-1,
0,
null,
-1,
null,
null,
null,
true
).firstOrNull()
if (methodIndex == null) {
log("ShowBatteryTemperature 无法定位方法")
return
}
val method = dexHelper.decodeMethodIndex(methodIndex)
log(method)
XposedBridge.hookMethod(method, XC_MethodReplacement.returnConstant(true))
}
}

View File

@@ -8,6 +8,8 @@ import de.robv.android.xposed.XC_MethodReplacement
import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LayoutInflated
import me.iacn.biliroaming.utils.DexHelper
import java.lang.reflect.Field
import java.lang.reflect.Member
import java.util.*

View File

@@ -0,0 +1,87 @@
package me.iacn.biliroaming.utils;
import com.lt2333.simplicitytools.util.KotlinXposedHelperKt;
import java.io.Closeable;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import dalvik.system.BaseDexClassLoader;
public class DexHelper implements AutoCloseable, Closeable {
public static final int NO_CLASS_INDEX = -1;
private final ClassLoader classLoader;
private final long token;
private static DexHelper instance;
public static DexHelper getInstance(ClassLoader classLoader) {
synchronized (DexHelper.class) {
if (instance != null) return instance;
BaseDexClassLoader loader = KotlinXposedHelperKt.findDexClassLoader(classLoader);
if (loader == null) {
return null;
}
instance = new DexHelper(loader);
return instance;
}
}
public DexHelper(ClassLoader classLoader) {
this.classLoader = classLoader;
token = load(classLoader);
}
public native long[] findMethodUsingString(
String str, boolean matchPrefix, long returnType, short parameterCount,
String parameterShorty, long declaringClass, long[] parameterTypes,
long[] containsParameterTypes, int[] dexPriority, boolean findFirst);
public native long[] findMethodInvoking(long methodIndex, long returnType,
short parameterCount, String parameterShorty,
long declaringClass, long[] parameterTypes,
long[] containsParameterTypes,
int[] dexPriority, boolean findFirst);
public native long[] findMethodInvoked(long methodIndex, long returnType,
short parameterCount, String parameterShorty,
long declaringClass, long[] parameterTypes,
long[] containsParameterTypes,
int[] dexPriority, boolean findFirst);
public native long[] findMethodSettingField(
long fieldIndex, long returnType, short parameterCount,
String parameterShorty, long declaringClass, long[] parameterTypes,
long[] containsParameterTypes, int[] dexPriority, boolean findFirst);
public native long[] findMethodGettingField(
long fieldIndex, long returnType, short parameterCount,
String parameterShorty, long declaringClass, long[] parameterTypes,
long[] containsParameterTypes, int[] dexPriority, boolean findFirst);
public native long[] findField(long type, int[] dexPriority, boolean findFirst);
public native Member decodeMethodIndex(long methodIndex);
public native long encodeMethodIndex(Member method);
public native Field decodeFieldIndex(long fieldIndex);
public native long encodeFieldIndex(Field field);
public native long encodeClassIndex(Class<?> clazz);
public native Class<?> decodeClassIndex(long classIndex);
public native void createFullCache();
@Override
public native void close();
@Override
protected void finalize() {
close();
}
private native long load(ClassLoader classLoader);
}