pull/137/head
FongMi 3 years ago
parent d61b810dce
commit 5d4003a2c4
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 6
      app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java
  3. 1
      settings.gradle
  4. 73
      tvbus/src/main/java/com/tvbus/engine/PmsHook.java
  5. 16
      tvbus/src/main/java/com/tvbus/engine/TVCore.java

@ -398,7 +398,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
WallConfig.get().clear();
LiveConfig.get().clear();
ApiConfig.get().clear();
Source.get().exit();
Server.get().stop();
Source.get().exit();
}
}

@ -19,11 +19,11 @@ public class TVBus implements Source.Extractor, Listener {
}
private void init(Core core) {
tvcore = new TVCore(core.getSo(), core.getSign());
tvcore = new TVCore(core.getSign(), core.getSo());
tvcore.auth(core.getAuth()).broker(core.getBroker());
tvcore.name(core.getName()).pass(core.getPass());
tvcore.serv(0).play(8902).mode(1).listener(this);
tvcore.init(App.get());
tvcore.init();
}
@Override
@ -54,7 +54,7 @@ public class TVBus implements Source.Extractor, Listener {
@Override
public void exit() {
tvcore = null;
if (tvcore != null) System.exit(0);
}
@Override

@ -20,6 +20,7 @@ dependencyResolutionManagement {
}
}
include ':app'
include ':hook'
include ':tvbus'
include ':catvod'
include ':pyramid'

@ -1,73 +0,0 @@
package com.tvbus.engine;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class PmsHook implements InvocationHandler {
private String sign;
private String name;
private Object base;
private static class Loader {
static volatile PmsHook INSTANCE = new PmsHook();
}
public static PmsHook get() {
return Loader.INSTANCE;
}
private PmsHook() {
hook();
}
public void inject(String sign) {
this.sign = sign;
}
private Context getCtx() throws Throwable {
Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
Method method = activityThreadClass.getMethod("currentApplication");
return (Context) method.invoke(null);
}
private void hook() {
try {
Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
Class<?> iPackageManagerInterface = Class.forName("android.content.pm.IPackageManager");
Method currentActivityThreadMethod = activityThreadClass.getDeclaredMethod("currentActivityThread");
Field sPackageManagerField = activityThreadClass.getDeclaredField("sPackageManager");
Object currentActivityThread = currentActivityThreadMethod.invoke(null);
sPackageManagerField.setAccessible(true);
Context context = getCtx();
this.name = context.getPackageName();
this.base = sPackageManagerField.get(currentActivityThread);
Object proxy = Proxy.newProxyInstance(iPackageManagerInterface.getClassLoader(), new Class<?>[]{iPackageManagerInterface}, this);
sPackageManagerField.set(currentActivityThread, proxy);
PackageManager pm = context.getPackageManager();
Field mPmField = pm.getClass().getDeclaredField("mPM");
mPmField.setAccessible(true);
mPmField.set(pm, proxy);
} catch (Throwable e) {
e.printStackTrace();
}
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (!method.getName().equals("getPackageInfo")) return method.invoke(base, args);
String pkg = (String) args[0];
Number flag = (Number) args[1];
if (flag.intValue() != PackageManager.GET_SIGNATURES || !name.equals(pkg)) return method.invoke(base, args);
PackageInfo info = (PackageInfo) method.invoke(base, args);
info.signatures[0] = new Signature(sign);
return info;
}
}

@ -2,16 +2,18 @@ package com.tvbus.engine;
import android.content.Context;
import com.fongmi.hook.Hook;
import com.github.catvod.Init;
import com.github.catvod.utils.Github;
public class TVCore {
private long handle;
public TVCore(String name, String sign) {
public TVCore(String sign, String so) {
try {
PmsHook.get().inject(sign);
System.load(Github.getSo(name));
Hook.pm(Init.context(), sign);
System.load(Github.getSo(so));
handle = initialise();
} catch (Throwable ignored) {
}
@ -89,13 +91,13 @@ public class TVCore {
}
}
public void init(Context context) {
new Thread(() -> start(context)).start();
public void init() {
new Thread(this::start).start();
}
private void start(Context context) {
private void start() {
try {
init(handle, context);
init(handle, Init.context());
run(handle);
} catch (Throwable ignored) {
}

Loading…
Cancel
Save