Skip to content

Commit

Permalink
Merge branch 'zjyzip:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
wfvw126 authored Jan 29, 2024
2 parents 4df9abb + 6454f3e commit 1f3ab02
Show file tree
Hide file tree
Showing 8 changed files with 91 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ public static void process() {
}

private static void hookMethods() {
HookUtil.hookMethod(Window.class, "setFlags", param -> handleFlagSecure(param));
HookUtil.hookMethod(Window.class, "addFlags", param -> handleFlagSecure(param));
HookUtil.hookMethod(Dialog.class, "setFlags", param -> handleFlagSecure(param));
HookUtil.hookAllMethods(Window.class, "setFlags", param -> handleFlagSecure(param));
HookUtil.hookAllMethods(Window.class, "addFlags", param -> handleFlagSecure(param));
HookUtil.hookAllMethods(Dialog.class, "setFlags", param -> handleFlagSecure(param));
HookUtil.hookAllConstructors(WindowManager.LayoutParams.class, param -> handleFlagSecure(param));
}

Expand Down
14 changes: 10 additions & 4 deletions app/src/main/java/com/close/hook/ads/hook/gc/DisableShakeAd.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,19 @@ public class DisableShakeAd {
public static void handle(XC_LoadPackage.LoadPackageParam lpparam) {
try {
Class<?> sensorManagerClass = lpparam.classLoader.loadClass(SensorManager.class.getName());
HookUtil.hookMethod(sensorManagerClass, "registerListener", param -> {
if (param.args != null && param.args.length == 3) {
param.setResult(true);

HookUtil.hookAllMethods(sensorManagerClass, "registerListener", param -> {
// 拦截加速度传感器的注册
if (param.args != null && param.args.length >= 2 && param.args[1] instanceof android.hardware.Sensor) {
android.hardware.Sensor sensor = (android.hardware.Sensor) param.args[1];
if (sensor.getType() == android.hardware.Sensor.TYPE_ACCELEROMETER) {
// 如果是加速度传感器,取消监听器的注册
param.setResult(false);
}
}
});
} catch (ClassNotFoundException e) {
XposedBridge.log("SensorManagerHook: ClassNotFoundException - " + e.getMessage());
XposedBridge.log("DisableShakeAd: ClassNotFoundException - " + e.getMessage());
}
}
}
43 changes: 20 additions & 23 deletions app/src/main/java/com/close/hook/ads/hook/gc/HideEnvi.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.close.hook.ads.hook.gc;

import com.close.hook.ads.hook.util.HookUtil;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;

/*
* 2023.12.8-10:14
Expand Down Expand Up @@ -45,28 +45,25 @@ public class HideEnvi {
private static final String[] MAGISK_FEATURES = {"/.magisk", "MAGISK_INJ_"};

public static void handle() {
try {
XposedHelpers.findAndHookMethod(File.class, "exists", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
File file = (File) param.thisObject;
if (XPOSED_MAGISK_PATHS.contains(file.getAbsolutePath())) {
param.setResult(false);
}
}
});
hideXposedMagiskPaths();
hideXposedMagiskInExec();
}

XposedBridge.hookAllMethods(Runtime.class, "exec", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
if (detectXposedOrMagiskInMemory()) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log("HideEnvi Error: " + e.getMessage());
}
private static void hideXposedMagiskPaths() {
HookUtil.hookAllMethods(File.class, "exists", param -> {
File file = (File) param.thisObject;
if (XPOSED_MAGISK_PATHS.contains(file.getAbsolutePath())) {
param.setResult(false);
}
});
}

private static void hideXposedMagiskInExec() {
HookUtil.hookAllMethods(Runtime.class, "exec", param -> {
if (detectXposedOrMagiskInMemory()) {
param.setResult(null);
}
});
}

private static boolean detectXposedOrMagiskInMemory() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ private static String getRandomString(int length) {
}

private static void bypassSystemProxyCheck() {
HookUtil.hookMethod(System.class, "getProperty", param -> {
HookUtil.hookAllMethods(System.class, "getProperty", param -> {
String propertyName = (String) param.args[0];
if (HTTP_PROXY_HOST.equals(propertyName)) {
param.setResult(EMPTY_STRING);
Expand All @@ -67,7 +67,7 @@ private static void bypassSystemProxyCheck() {
}
});

HookUtil.hookMethod(System.class, "setProperty", param -> {
HookUtil.hookAllMethods(System.class, "setProperty", param -> {
String propertyName = (String) param.args[0];
if (HTTP_PROXY_HOST.equals(propertyName)) {
param.args[1] = EMPTY_STRING;
Expand All @@ -84,33 +84,33 @@ public static void proxy() {
}

private static void modifyNetworkInfo() {
HookUtil.hookMethod(NetworkInfo.class, "getType",
HookUtil.hookAllMethods(NetworkInfo.class, "getType",
param -> replaceResultIfEquals(param, ConnectivityManager.TYPE_VPN, ConnectivityManager.TYPE_WIFI));
HookUtil.hookMethod(NetworkInfo.class, "getSubtype",
HookUtil.hookAllMethods(NetworkInfo.class, "getSubtype",
param -> replaceResultIfEquals(param, ConnectivityManager.TYPE_VPN, ConnectivityManager.TYPE_WIFI));
HookUtil.hookMethod(NetworkInfo.class, "getTypeName",
HookUtil.hookAllMethods(NetworkInfo.class, "getTypeName",
param -> replaceResultIfEqualsIgnoreCase(param, VPN, WIFI));
HookUtil.hookMethod(NetworkInfo.class, "getSubtypeName",
HookUtil.hookAllMethods(NetworkInfo.class, "getSubtypeName",
param -> replaceResultIfEqualsIgnoreCase(param, VPN, WIFI));
HookUtil.hookMethod(ConnectivityManager.class, "getNetworkInfo", param -> {
HookUtil.hookAllMethods(ConnectivityManager.class, "getNetworkInfo", param -> {
if (Objects.equals(Optional.ofNullable(param.args[0]).orElse(-1), ConnectivityManager.TYPE_VPN)) {
param.setResult(null);
}
});
}

private static void modifyNetworkCapabilities() {
HookUtil.hookMethod(NetworkCapabilities.class, "hasTransport", param -> {
HookUtil.hookAllMethods(NetworkCapabilities.class, "hasTransport", param -> {
if (Objects.equals(param.args[0], NetworkCapabilities.TRANSPORT_VPN)) {
param.setResult(false);
}
});
HookUtil.hookMethod(NetworkCapabilities.class, "hasCapability", param -> {
HookUtil.hookAllMethods(NetworkCapabilities.class, "hasCapability", param -> {
if (Objects.equals(param.args[0], NetworkCapabilities.NET_CAPABILITY_NOT_VPN)) {
param.setResult(true);
}
});
HookUtil.hookMethod(NetworkCapabilities.class, "getCapabilities", param -> {
HookUtil.hookAllMethods(NetworkCapabilities.class, "getCapabilities", param -> {
Optional.ofNullable(param.getResult()).ifPresent(resultObj -> {
int[] result = (int[]) resultObj;
if (result.length > 0
Expand All @@ -121,8 +121,8 @@ private static void modifyNetworkCapabilities() {
}
});
});
HookUtil.hookMethod(NetworkInterface.class, "isVirtual", param -> param.setResult(false));
HookUtil.hookMethod(NetworkInterface.class, "getName",
HookUtil.hookAllMethods(NetworkInterface.class, "isVirtual", param -> param.setResult(false));
HookUtil.hookAllMethods(NetworkInterface.class, "getName",
param -> replaceResultIfStartsWith(param, "tun", "ppp", "pptp"));
}

Expand Down
62 changes: 40 additions & 22 deletions app/src/main/java/com/close/hook/ads/hook/ha/AppAds.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,48 @@

import androidx.collection.ArrayMap;

import java.util.Properties;
import de.robv.android.xposed.*;

public class AppAds {

public static void progress(ClassLoader classLoader, String packageName) {
ArrayMap<String, HookInfo[]> appHooks = new ArrayMap<>();

appHooks.put("应用包名", new HookInfo[] { // 应用
new HookInfo("类名", "方法名", 1),
new HookInfo("类名", "方法名", null),
new HookInfo("类名", "方法名", false),
new HookInfo("类名", new String[] { "方法1", "方法2" }, null) });

// 根据传入的packageName执行相应的hook
if (appHooks.containsKey(packageName)) {
for (HookInfo hookInfo : appHooks.get(packageName)) {
HookUtil.hookMethods(classLoader, hookInfo.className, hookInfo.methodNames, hookInfo.returnValue);
}
}

if (packageName.equals("com.weico.international")) { // 微博轻享版
WeiboIE.handle(classLoader);
}

}

public static void progress(ClassLoader classLoader, String packageName) {
// 初始化appHooks映射,每个应用对应一组需要hook的信息
ArrayMap<String, HookInfo[]> appHooks = getAppHooks();

// 根据传入的packageName执行相应的hook
if (appHooks.containsKey(packageName)) {
for (HookInfo hookInfo : appHooks.get(packageName)) {
HookUtil.hookMethods(classLoader, hookInfo.className, hookInfo.methodNames, hookInfo.returnValue);
}
}

// 特定包名的特定处理逻辑
if (packageName.equals("com.weico.international")) {
WeiboIE.handle(classLoader);
}

}

// 初始化appHooks
private static ArrayMap<String, HookInfo[]> getAppHooks() {
ArrayMap<String, HookInfo[]> appHooks = new ArrayMap<>();

// 应用1
appHooks.put("应用包名", new HookInfo[] {
new HookInfo("类名", "方法名", 1),
new HookInfo("类名", "方法名", null),
new HookInfo("类名", "方法名", false),
new HookInfo("类名", new String[] { "方法1", "方法2" }, null)
});

// 应用2
appHooks.put("应用包名", new HookInfo[] {
new HookInfo("类名", "方法名", 0),
new HookInfo("类名", "方法名", "1"),
new HookInfo("类名", "方法名", true)
});

return appHooks;
}
}
8 changes: 4 additions & 4 deletions app/src/main/java/com/close/hook/ads/hook/ha/SDKAds.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ public class SDKAds {

private static final HookInfo[] HOOK_INFOS = {

new HookInfo("com.ap.android.trunk.sdk.core.APSDK", "init", null),
new HookInfo("com.ap.android.trunk.sdk.core.APSDK", "init", null),

new HookInfo("cn.xiaochuankeji.hermes.core.workflow.init.InitUtil", "init", false),
new HookInfo("cn.xiaochuankeji.hermes.core.workflow.init.InitUtil", "init", false),

new HookInfo("com.qq.e.comm.managers.status.SDKStatus", "getPluginVersion", 0),
new HookInfo("com.qq.e.comm.managers.status.SDKStatus", "getPluginVersion", 0),

new HookInfo("com.bytedance.sdk.openadsdk.TTAdSdk", new String[] { "init", "start" }, null)
new HookInfo("com.bytedance.sdk.openadsdk.TTAdSdk", new String[] { "init", "start" }, null)

};

Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/close/hook/ads/hook/ha/WeiboIE.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ private static void modifySettings(ClassLoader classLoader) {
}

private static void blockQueryUveAdRequest(ClassLoader classLoader) {
HookUtil.hookMethod(XposedHelpers.findClass("com.weico.international.api.RxApiKt", classLoader),
HookUtil.hookAllMethods(XposedHelpers.findClass("com.weico.international.api.RxApiKt", classLoader),
"queryUveAdRequest", param -> {
Map<String, Object> map = (Map<String, Object>) param.args[0];
map.remove("ip");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ protected Object replaceHookedMethod(MethodHookParam param) {
});
}

public static void hookMethod(Class<?> clazz, String methodName, Consumer<XC_MethodHook.MethodHookParam> action) {
public static void hookAllMethods(Class<?> clazz, String methodName, Consumer<XC_MethodHook.MethodHookParam> action) {
try {
XposedBridge.hookAllMethods(clazz, methodName, new XC_MethodHook() {
@Override
Expand Down

0 comments on commit 1f3ab02

Please sign in to comment.