diff --git a/app/libs/hook-release.aar b/app/libs/hook-release.aar index 9b1aa6e50..976bdca94 100644 Binary files a/app/libs/hook-release.aar and b/app/libs/hook-release.aar differ diff --git a/app/src/main/java/com/fongmi/android/tv/App.java b/app/src/main/java/com/fongmi/android/tv/App.java index 97186d60e..20b8b564e 100644 --- a/app/src/main/java/com/fongmi/android/tv/App.java +++ b/app/src/main/java/com/fongmi/android/tv/App.java @@ -13,6 +13,7 @@ import androidx.annotation.Nullable; import androidx.core.os.HandlerCompat; import com.fongmi.android.tv.utils.Notify; +import com.fongmi.hook.Chromium; import com.fongmi.hook.Hook; import com.github.catvod.Init; import com.google.gson.Gson; @@ -31,6 +32,7 @@ public class App extends Application implements Application.ActivityLifecycleCal private Activity activity; private final Gson gson; private final long time; + private boolean sniff; private Hook hook; public App() { @@ -42,6 +44,10 @@ public class App extends Application implements Application.ActivityLifecycleCal handler = HandlerCompat.createAsync(Looper.getMainLooper()); } + public void setSniff(boolean sniff) { + this.sniff = sniff; + } + public void setHook(Hook hook) { this.hook = hook; } @@ -66,7 +72,7 @@ public class App extends Application implements Application.ActivityLifecycleCal @Override public String getPackageName() { - return hook != null ? hook.getPackageName() : getBaseContext().getPackageName(); + return hook != null ? hook.getPackageName() : sniff && Chromium.find() ? Chromium.spoofedPackageName(this) : getBaseContext().getPackageName(); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java index f1539e7a0..0228b03d7 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java @@ -186,6 +186,7 @@ public class ParseJob implements ParseCallback { private void startWeb(String key, String from, Map headers, String url, String click) { App.post(() -> webViews.add(CustomWebView.create(App.get()).start(key, from, headers, url, click, this, !url.contains("player/?url=")))); + App.get().setSniff(true); } private Map getHeader(JsonObject object) { @@ -215,6 +216,7 @@ public class ParseJob implements ParseCallback { for (CustomWebView webView : webViews) webView.stop(false); for (CustomWebView webView : webViews) webView.destroy(); if (!webViews.isEmpty()) webViews.clear(); + App.get().setSniff(false); } public void stop() { diff --git a/hook/src/main/java/com/fongmi/hook/Chromium.java b/hook/src/main/java/com/fongmi/hook/Chromium.java index e8df112a5..e190be373 100644 --- a/hook/src/main/java/com/fongmi/hook/Chromium.java +++ b/hook/src/main/java/com/fongmi/hook/Chromium.java @@ -1,5 +1,7 @@ package com.fongmi.hook; +import android.content.Context; +import android.content.pm.PackageManager; import android.os.Looper; import java.util.Arrays; @@ -7,7 +9,7 @@ import java.util.Set; public class Chromium { - public static final String PKG = "com.android.chrome"; + private static final String SYSTEM_SETTINGS_PACKAGE = "com.android.settings"; private static final Set CHROMIUM_CLASS_NAMES = Set.of( "org.chromium.base.buildinfo", @@ -20,6 +22,23 @@ public class Chromium { "" ); + private static final Set BROWSER_PACKAGES = Set.of( + "com.android.chrome", + "com.mi.globalbrowser", + "com.huawei.browser", + "com.heytap.browser", + "com.vivo.browser" + ); + + private static boolean isInstalled(PackageManager pm, String pkg) { + try { + pm.getPackageInfo(pkg, PackageManager.GET_META_DATA); + return true; + } catch (PackageManager.NameNotFoundException ignored) { + return false; + } + } + public static boolean find() { try { return Arrays.stream(Looper.getMainLooper().getThread().getStackTrace()).anyMatch(trace -> CHROMIUM_CLASS_NAMES.contains(trace.getClassName().toLowerCase()) && CHROMIUM_METHOD_NAMES.contains(trace.getMethodName().toLowerCase())); @@ -27,4 +46,9 @@ public class Chromium { return false; } } + + public static String spoofedPackageName(Context context) { + PackageManager pm = context.getPackageManager(); + return BROWSER_PACKAGES.stream().filter(packageName -> isInstalled(pm, packageName)).findFirst().orElse(SYSTEM_SETTINGS_PACKAGE); + } }