mirror of
https://github.com/QM4RS/FridaBox.git
synced 2026-09-23 09:32:11 +02:00
feat: Enhance Blackbox core virtualization, system service proxies, and hook mechanisms for improved compatibility.
This commit is contained in:
@@ -485,7 +485,8 @@
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AURAL_USER_SELECTED" />
|
||||
|
||||
<application>
|
||||
<application
|
||||
android:usesCleartextTraffic="true">
|
||||
<provider
|
||||
android:name="top.niunaijun.blackbox.core.system.SystemCallProvider"
|
||||
android:authorities="${applicationId}.blackbox.SystemCallProvider"
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
struct {
|
||||
JavaVM *vm;
|
||||
|
||||
@@ -14,7 +14,7 @@ list<IO::RelocateInfo> relocate_rule;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
char *replace(const char *str, const char *src, const char *dst) {
|
||||
const char *pos = str;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
struct SpoofedProp {
|
||||
const char* key;
|
||||
@@ -36,7 +36,7 @@ static int (*orig_system_property_get)(const char *name, char *value) = nullptr;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
static const char* blocked_files[] = {
|
||||
// Root detection files
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
#define LOG_TAG "VirtualSpoof"
|
||||
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
bool disable_hidden_api(JNIEnv *env) {
|
||||
char version_str[PROP_VALUE_MAX];
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.util.Objects;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ActivityThread {
|
||||
public H mH = null;
|
||||
|
||||
@@ -10,7 +10,7 @@ import android.os.IBinder;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ContentProviderHolder {
|
||||
public final ProviderInfo info = null;
|
||||
|
||||
@@ -8,7 +8,7 @@ import android.os.IInterface;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public interface IContentProvider extends IInterface {
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.jar.Attributes;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ManifestDigest implements Parcelable {
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import android.util.ArraySet;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class PackageUserState {
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.security.PublicKey;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class VerifierInfo implements Parcelable {
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ import top.niunaijun.blackbox.utils.StoragePermissionHelper;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@SuppressLint({"StaticFieldLeak", "NewApi"})
|
||||
@SuppressWarnings({"unchecked", "deprecation"})
|
||||
|
||||
@@ -92,7 +92,7 @@ import top.niunaijun.blackbox.core.system.JarManager;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BActivityThread extends IBActivityThread.Stub {
|
||||
public static final String TAG = "BActivityThread";
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ import android.os.Bundle;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class AppLifecycleCallback implements Application.ActivityLifecycleCallbacks {
|
||||
public static AppLifecycleCallback EMPTY = new AppLifecycleCallback() {
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ import java.io.File;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public abstract class ClientConfiguration {
|
||||
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ import top.niunaijun.blackbox.entity.JobRecord;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class AppJobServiceDispatcher {
|
||||
private static final AppJobServiceDispatcher sServiceDispatcher = new AppJobServiceDispatcher();
|
||||
|
||||
@@ -25,7 +25,7 @@ import static android.app.Service.START_NOT_STICKY;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class AppServiceDispatcher {
|
||||
public static final String TAG = "AppServiceDispatcher";
|
||||
|
||||
@@ -8,7 +8,7 @@ import top.niunaijun.blackbox.BlackBoxCore;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class CrashHandler implements Thread.UncaughtExceptionHandler {
|
||||
private Thread.UncaughtExceptionHandler mDefaultHandler;
|
||||
|
||||
@@ -14,7 +14,7 @@ import top.niunaijun.blackbox.entity.pm.InstallResult;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class GmsCore {
|
||||
private static final String TAG = "GmsCore";
|
||||
|
||||
@@ -28,7 +28,7 @@ import top.niunaijun.blackbox.utils.TrieTree;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@SuppressLint("SdCardPath")
|
||||
public class IOCore {
|
||||
|
||||
@@ -23,7 +23,7 @@ import top.niunaijun.blackbox.utils.Slog;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class NativeCore {
|
||||
public static final String TAG = "NativeCore";
|
||||
|
||||
@@ -15,7 +15,7 @@ import top.niunaijun.blackbox.utils.compat.BuildCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class AppSystemEnv {
|
||||
private static final List<String> sSystemPackages = new ArrayList<>();
|
||||
|
||||
@@ -13,7 +13,7 @@ import top.niunaijun.blackbox.utils.FileUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BEnvironment {
|
||||
private static final File sVirtualRoot = new File(BlackBoxCore.getContext().getCacheDir().getParent(), "blackbox");
|
||||
|
||||
@@ -39,7 +39,7 @@ import top.niunaijun.blackbox.utils.provider.ProviderCall;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BProcessManagerService implements ISystemService {
|
||||
public static final String TAG = "BProcessManager";
|
||||
|
||||
@@ -35,7 +35,7 @@ import top.niunaijun.blackbox.core.system.JarManager;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BlackBoxSystem {
|
||||
private static BlackBoxSystem sBlackBoxSystem;
|
||||
|
||||
@@ -6,7 +6,7 @@ package top.niunaijun.blackbox.core.system;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public interface ISystemService {
|
||||
void systemReady();
|
||||
|
||||
@@ -22,7 +22,7 @@ import top.niunaijun.blackbox.core.system.user.BUserManagerService;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ServiceManager {
|
||||
private static ServiceManager sServiceManager = null;
|
||||
|
||||
@@ -19,7 +19,7 @@ import top.niunaijun.blackbox.utils.compat.BundleCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class SystemCallProvider extends ContentProvider {
|
||||
public static final String TAG = "SystemCallProvider";
|
||||
|
||||
@@ -34,7 +34,7 @@ import top.niunaijun.blackbox.proxy.record.ProxyServiceRecord;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@SuppressLint("NewApi")
|
||||
public class ActiveServices {
|
||||
|
||||
@@ -15,7 +15,7 @@ import top.niunaijun.blackbox.core.system.ProcessRecord;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ActivityRecord extends Binder {
|
||||
public TaskRecord task;
|
||||
|
||||
@@ -49,7 +49,7 @@ import static android.content.pm.PackageManager.GET_ACTIVITIES;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings({"deprecation", "unchecked"})
|
||||
public class ActivityStack {
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ import static android.content.pm.PackageManager.GET_META_DATA;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BActivityManagerService extends IBActivityManagerService.Stub implements ISystemService {
|
||||
public static final String TAG = "BActivityManagerService";
|
||||
|
||||
@@ -28,7 +28,7 @@ import top.niunaijun.blackbox.proxy.ProxyManifest;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BJobManagerService extends IBJobManagerService.Stub implements ISystemService {
|
||||
private static final BJobManagerService sService = new BJobManagerService();
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.List;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class TaskRecord {
|
||||
public int id;
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.Map;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class UserSpace {
|
||||
public final ActiveServices mActiveServices = new ActiveServices();
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ import top.niunaijun.blackbox.utils.compat.BuildCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BStorageManagerService extends IBStorageManagerService.Stub implements ISystemService {
|
||||
private static final BStorageManagerService sService = new BStorageManagerService();
|
||||
|
||||
@@ -28,7 +28,7 @@ import top.niunaijun.blackbox.utils.compat.BuildCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BPackage implements Parcelable {
|
||||
public ArrayList<Activity> activities = new ArrayList<Activity>(0);
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ import top.niunaijun.blackbox.utils.Slog;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BPackageInstallerService extends IBPackageInstallerService.Stub implements ISystemService {
|
||||
private static final BPackageInstallerService sService = new BPackageInstallerService();
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BPackageManagerService extends IBPackageManagerService.Stub implements ISystemService {
|
||||
public static final String TAG = "BPackageManagerService";
|
||||
|
||||
@@ -22,7 +22,7 @@ import top.niunaijun.blackbox.utils.FileUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BPackageSettings implements Parcelable {
|
||||
public BPackage pkg;
|
||||
|
||||
@@ -9,7 +9,7 @@ import android.os.Parcelable;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BPackageUserState implements Parcelable {
|
||||
public boolean installed;
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ import top.niunaijun.blackbox.utils.compat.XposedParserCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BXposedManagerService extends IBXposedManagerService.Stub implements ISystemService, PackageMonitor {
|
||||
private static final BXposedManagerService sService = new BXposedManagerService();
|
||||
|
||||
@@ -21,7 +21,7 @@ import top.niunaijun.blackbox.utils.Slog;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ComponentResolver {
|
||||
public static final String TAG = "ComponentResolver";
|
||||
|
||||
@@ -39,7 +39,7 @@ import top.niunaijun.blackbox.utils.compat.BuildCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@SuppressLint({"SdCardPath", "NewApi"})
|
||||
public class PackageManagerCompat {
|
||||
|
||||
@@ -6,7 +6,7 @@ package top.niunaijun.blackbox.core.system.pm;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public interface PackageMonitor {
|
||||
void onPackageUninstalled(String packageName, boolean isRemove, int userId);
|
||||
|
||||
@@ -30,7 +30,7 @@ import top.niunaijun.blackbox.utils.compat.PackageParserCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
/*public*/ class Settings {
|
||||
public static final String TAG = "Settings";
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ import top.niunaijun.blackbox.utils.NativeUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
* 拷贝文件相关
|
||||
*/
|
||||
public class CopyExecutor implements Executor {
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ import top.niunaijun.blackbox.utils.FileUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
* 创建包相关的信息
|
||||
*/
|
||||
public class CreatePackageExecutor implements Executor {
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ import top.niunaijun.blackbox.utils.FileUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
* 创建用户相关
|
||||
*/
|
||||
public class CreateUserExecutor implements Executor {
|
||||
|
||||
@@ -9,7 +9,7 @@ import top.niunaijun.blackbox.entity.pm.InstallOption;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public interface Executor {
|
||||
public static final String TAG = "InstallExecutor";
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ import top.niunaijun.blackbox.utils.FileUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class RemoveAppExecutor implements Executor {
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ import top.niunaijun.blackbox.utils.FileUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
* 创建用户相关
|
||||
*/
|
||||
public class RemoveUserExecutor implements Executor {
|
||||
|
||||
@@ -9,7 +9,7 @@ import android.os.Parcelable;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BUserInfo implements Parcelable {
|
||||
public int id;
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ import top.niunaijun.blackbox.utils.FileUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BUserManagerService extends IBUserManagerService.Stub implements ISystemService {
|
||||
private static BUserManagerService sService = new BUserManagerService();
|
||||
|
||||
@@ -6,7 +6,7 @@ package top.niunaijun.blackbox.core.system.user;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public enum BUserStatus {
|
||||
ENABLE, DISABLE
|
||||
|
||||
@@ -11,7 +11,7 @@ import android.os.Parcelable;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class AppConfig implements Parcelable {
|
||||
public static final String KEY = "BlackBox_client_config";
|
||||
|
||||
@@ -13,7 +13,7 @@ import android.os.Parcelable;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class JobRecord implements Parcelable {
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ServiceRecord {
|
||||
private Service mService;
|
||||
|
||||
@@ -10,7 +10,7 @@ import android.os.Parcelable;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class UnbindRecord implements Parcelable {
|
||||
private int mBindCount;
|
||||
|
||||
@@ -9,7 +9,7 @@ import android.os.Parcelable;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class InstallOption implements Parcelable {
|
||||
public static final int FLAG_SYSTEM = 1;
|
||||
|
||||
@@ -11,7 +11,7 @@ import top.niunaijun.blackbox.utils.Slog;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class InstallResult implements Parcelable {
|
||||
public static final String TAG = "InstallResult";
|
||||
|
||||
@@ -15,7 +15,7 @@ import top.niunaijun.blackbox.core.system.user.BUserHandle;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class InstalledModule implements Parcelable {
|
||||
public String packageName;
|
||||
|
||||
@@ -16,7 +16,7 @@ import top.niunaijun.blackbox.BlackBoxCore;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class InstalledPackage implements Parcelable {
|
||||
public int userId;
|
||||
|
||||
@@ -12,7 +12,7 @@ import java.util.Map;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class XposedConfig implements Parcelable {
|
||||
public boolean enable;
|
||||
|
||||
@@ -8,7 +8,7 @@ import top.niunaijun.jnihook.ReflectCore;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class FakeCore {
|
||||
public static void init() {
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ import top.niunaijun.blackbox.utils.compat.BuildCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ContentProviderDelegate {
|
||||
public static final String TAG = "ContentProviderDelegate";
|
||||
|
||||
@@ -21,7 +21,7 @@ import top.niunaijun.blackbox.proxy.record.ProxyBroadcastRecord;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class InnerReceiverDelegate extends IIntentReceiver.Stub {
|
||||
public static final String TAG = "InnerReceiverDelegate";
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ import top.niunaijun.blackbox.utils.compat.BuildCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ServiceConnectionDelegate extends IServiceConnection.Stub {
|
||||
private static final Map<IBinder, ServiceConnectionDelegate> sServiceConnectDelegate = new HashMap<>();
|
||||
|
||||
@@ -25,7 +25,7 @@ import top.niunaijun.blackbox.utils.Slog;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BActivityManager extends BlackManager<IBActivityManagerService> {
|
||||
private static final String TAG = "BActivityManager";
|
||||
|
||||
@@ -14,7 +14,7 @@ import top.niunaijun.blackbox.entity.JobRecord;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BJobManager extends BlackManager<IBJobManagerService> {
|
||||
private static final BJobManager sJobManager = new BJobManager();
|
||||
|
||||
@@ -32,7 +32,7 @@ import top.niunaijun.blackbox.utils.TransactionThrottler;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BPackageManager extends BlackManager<IBPackageManagerService> {
|
||||
private static final BPackageManager sPackageManager = new BPackageManager();
|
||||
|
||||
@@ -13,7 +13,7 @@ import top.niunaijun.blackbox.core.system.os.IBStorageManagerService;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BStorageManager extends BlackManager<IBStorageManagerService> {
|
||||
private static final BStorageManager sStorageManager = new BStorageManager();
|
||||
|
||||
@@ -18,7 +18,7 @@ import top.niunaijun.blackbox.utils.Slog;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BUserManager extends BlackManager<IBUserManagerService> {
|
||||
private static final String TAG = "BUserManager";
|
||||
|
||||
@@ -15,7 +15,7 @@ import top.niunaijun.blackbox.entity.pm.InstalledModule;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class BXposedManager extends BlackManager<IBXposedManagerService> {
|
||||
private static final BXposedManager sXposedManager = new BXposedManager();
|
||||
|
||||
@@ -19,7 +19,7 @@ import black.android.os.BRServiceManager;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public abstract class BinderInvocationStub extends ClassInvocationStub implements IBinder {
|
||||
private IBinder mBaseBinder;
|
||||
|
||||
@@ -17,7 +17,7 @@ import top.niunaijun.blackbox.utils.MethodParameterUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public abstract class ClassInvocationStub implements InvocationHandler, IInjectHook {
|
||||
public static final String TAG = ClassInvocationStub.class.getSimpleName();
|
||||
|
||||
@@ -98,7 +98,7 @@ import top.niunaijun.blackbox.fake.service.WorkManagerProxy;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class HookManager {
|
||||
public static final String TAG = "HookManager";
|
||||
|
||||
@@ -6,7 +6,7 @@ package top.niunaijun.blackbox.fake.hook;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public interface IInjectHook {
|
||||
void injectHook();
|
||||
|
||||
@@ -10,7 +10,7 @@ import top.niunaijun.blackbox.BlackBoxCore;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public abstract class MethodHook {
|
||||
protected String getMethodName() {
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.lang.annotation.Target;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.lang.annotation.Target;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.lang.annotation.Target;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
|
||||
@@ -36,7 +36,7 @@ import static org.xmlpull.v1.XmlPullParser.START_TAG;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class FileProvider extends ContentProvider {
|
||||
private static final String[] COLUMNS = {
|
||||
|
||||
@@ -17,7 +17,7 @@ import top.niunaijun.blackbox.utils.compat.BuildCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class FileProviderHandler {
|
||||
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ import static android.content.pm.PackageManager.GET_META_DATA;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class ActivityManagerCommonProxy {
|
||||
public static final String TAG = "CommonStub";
|
||||
|
||||
@@ -43,7 +43,7 @@ import top.niunaijun.blackbox.utils.compat.BuildCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class HCallbackProxy implements IInjectHook, Handler.Callback {
|
||||
public static final String TAG = "HCallbackStub";
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ import top.niunaijun.blackbox.fake.hook.ProxyMethods;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IAccessibilityManagerProxy extends BinderInvocationStub {
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ import top.niunaijun.blackbox.utils.Slog;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IAccountManagerProxy extends BinderInvocationStub {
|
||||
public static final String TAG = "IAccountManagerProxy";
|
||||
|
||||
@@ -67,7 +67,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@ScanClass(ActivityManagerCommonProxy.class)
|
||||
public class IActivityManagerProxy extends ClassInvocationStub {
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ import top.niunaijun.blackbox.utils.compat.TaskDescriptionCompat;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@ScanClass(ActivityManagerCommonProxy.class)
|
||||
public class IActivityTaskManagerProxy extends BinderInvocationStub {
|
||||
|
||||
@@ -16,7 +16,7 @@ import top.niunaijun.blackbox.fake.hook.ProxyMethod;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IAlarmManagerProxy extends BinderInvocationStub {
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ import top.niunaijun.blackbox.utils.Slog;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IAppOpsManagerProxy extends BinderInvocationStub {
|
||||
public IAppOpsManagerProxy() {
|
||||
|
||||
@@ -16,7 +16,7 @@ import top.niunaijun.blackbox.utils.MethodParameterUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IAppWidgetManagerProxy extends BinderInvocationStub {
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ import top.niunaijun.blackbox.proxy.ProxyManifest;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IAutofillManagerProxy extends BinderInvocationStub {
|
||||
public static final String TAG = "AutofillManagerStub";
|
||||
|
||||
+155
-14
@@ -27,7 +27,7 @@ import top.niunaijun.blackbox.utils.Slog;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
@ScanClass(VpnCommonProxy.class)
|
||||
public class IConnectivityManagerProxy extends BinderInvocationStub {
|
||||
@@ -271,6 +271,75 @@ public class IConnectivityManagerProxy extends BinderInvocationStub {
|
||||
}
|
||||
}
|
||||
|
||||
// Hook for getAllNetworks - critical for modern apps to list networks
|
||||
@ProxyMethod("getAllNetworks")
|
||||
public static class GetAllNetworks extends MethodHook {
|
||||
@Override
|
||||
protected Object hook(Object who, Method method, Object[] args) throws Throwable {
|
||||
try {
|
||||
// Try original
|
||||
Object result = method.invoke(who, args);
|
||||
if (result != null) {
|
||||
// Check if array is empty
|
||||
if (Array.getLength(result) > 0) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Ignore
|
||||
}
|
||||
|
||||
Slog.d(TAG, "Creating fallback Network[] for getAllNetworks");
|
||||
|
||||
// Try to align with GetActiveNetwork to ensure consistency
|
||||
try {
|
||||
// Finds the getActiveNetwork method on the proxy to call it properly
|
||||
Method getActiveNetworkMethod = null;
|
||||
try {
|
||||
getActiveNetworkMethod = who.getClass().getMethod("getActiveNetwork");
|
||||
} catch (NoSuchMethodException e) {
|
||||
// Try searching by name if exact match fails
|
||||
for (Method m : who.getClass().getMethods()) {
|
||||
if (m.getName().equals("getActiveNetwork")) {
|
||||
getActiveNetworkMethod = m;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (getActiveNetworkMethod != null) {
|
||||
Object activeNetwork = getActiveNetworkMethod.invoke(who);
|
||||
if (activeNetwork != null) {
|
||||
Class<?> networkClass = activeNetwork.getClass();
|
||||
Object networkArray = Array.newInstance(networkClass, 1);
|
||||
Array.set(networkArray, 0, activeNetwork);
|
||||
Slog.d(TAG, "Refilled getAllNetworks with Active Network: " + activeNetwork);
|
||||
return networkArray;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Slog.w(TAG, "Failed to use Active Network for fallback: " + e.getMessage());
|
||||
}
|
||||
|
||||
// Create array with 1 fake network as last resort
|
||||
try {
|
||||
Class<?> networkClass = Class.forName("android.net.Network");
|
||||
Object networkArray = Array.newInstance(networkClass, 1);
|
||||
|
||||
// Create fake network (Network(1))
|
||||
// Note: Network(int) is hidden, but accessible via reflection
|
||||
Constructor<?> constructor = networkClass.getConstructor(int.class);
|
||||
Object network = constructor.newInstance(1);
|
||||
|
||||
Array.set(networkArray, 0, network);
|
||||
return networkArray;
|
||||
} catch (Exception e) {
|
||||
Slog.w(TAG, "Failed to create fallback Network[]: " + e.getMessage());
|
||||
return method.invoke(who, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Enhanced hook for getNetworkCapabilities for API 21+
|
||||
@ProxyMethod("getNetworkCapabilities")
|
||||
public static class GetNetworkCapabilities extends MethodHook {
|
||||
@@ -278,21 +347,33 @@ public class IConnectivityManagerProxy extends BinderInvocationStub {
|
||||
protected Object hook(Object who, Method method, Object[] args) throws Throwable {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 21) {
|
||||
try {
|
||||
// Try to get real capabilities first
|
||||
Object result = method.invoke(who, args);
|
||||
if (result != null) {
|
||||
// Force add capabilities to the real result to ensure app thinks it has internet
|
||||
try {
|
||||
Method addCapabilityMethod = result.getClass().getMethod("addCapability", int.class);
|
||||
addCapabilityMethod.setAccessible(true);
|
||||
addCapabilityMethod.invoke(result, 12); // NET_CAPABILITY_INTERNET
|
||||
addCapabilityMethod.invoke(result, 16); // NET_CAPABILITY_VALIDATED
|
||||
} catch (Exception e) {
|
||||
// Ignore if method not found (e.g. immutable on some versions)
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Create NetworkCapabilities using API-specific methods
|
||||
Object nc;
|
||||
// Use the universal NetworkCapabilities creation method for all API levels
|
||||
nc = IConnectivityManagerProxy.createNetworkCapabilities();
|
||||
|
||||
if (nc != null) {
|
||||
Slog.d(TAG, "Created enhanced NetworkCapabilities for sandboxed app");
|
||||
Slog.d(TAG, "Created enhanced NetworkCapabilities for sandboxed app (fallback)");
|
||||
return nc;
|
||||
} else {
|
||||
Slog.w(TAG, "Failed to create NetworkCapabilities, falling back to original method");
|
||||
return method.invoke(who, args);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Slog.w(TAG, "Error creating NetworkCapabilities: " + e.getMessage());
|
||||
return method.invoke(who, args);
|
||||
}
|
||||
}
|
||||
return method.invoke(who, args);
|
||||
@@ -306,6 +387,12 @@ public class IConnectivityManagerProxy extends BinderInvocationStub {
|
||||
protected Object hook(Object who, Method method, Object[] args) throws Throwable {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 21) {
|
||||
try {
|
||||
// Try to get real active network first
|
||||
Object result = method.invoke(who, args);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Create a mock Network object to ensure proper binding
|
||||
// Use reflection to handle different constructor signatures
|
||||
android.net.Network network;
|
||||
@@ -325,17 +412,43 @@ public class IConnectivityManagerProxy extends BinderInvocationStub {
|
||||
return method.invoke(who, args);
|
||||
}
|
||||
}
|
||||
Slog.d(TAG, "Created mock Network object for sandboxed app");
|
||||
Slog.d(TAG, "Created mock Network object for sandboxed app (fallback)");
|
||||
return network;
|
||||
} catch (Exception e) {
|
||||
Slog.w(TAG, "Error creating Network object: " + e.getMessage());
|
||||
return method.invoke(who, args);
|
||||
}
|
||||
}
|
||||
return method.invoke(who, args);
|
||||
}
|
||||
}
|
||||
|
||||
// Hook for getActiveNetworkInfo - critical for legacy internet checks
|
||||
@ProxyMethod("getActiveNetworkInfo")
|
||||
public static class GetActiveNetworkInfo extends MethodHook {
|
||||
@Override
|
||||
protected Object hook(Object who, Method method, Object[] args) throws Throwable {
|
||||
try {
|
||||
Object result = method.invoke(who, args);
|
||||
if (result != null) {
|
||||
// Force CONNECTED state
|
||||
try {
|
||||
Method setDetailedState = result.getClass().getMethod("setDetailedState",
|
||||
android.net.NetworkInfo.DetailedState.class, String.class, String.class);
|
||||
setDetailedState.setAccessible(true);
|
||||
setDetailedState.invoke(result, android.net.NetworkInfo.DetailedState.CONNECTED, null, null);
|
||||
} catch (Exception e) {
|
||||
// Ignore
|
||||
}
|
||||
return result;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Ignore
|
||||
}
|
||||
Slog.d(TAG, "Creating fallback NetworkInfo for getActiveNetworkInfo");
|
||||
return createNetworkInfo(ConnectivityManager.TYPE_WIFI, 0, "WIFI", "");
|
||||
}
|
||||
}
|
||||
|
||||
// Hook for getLinkProperties to handle DNS configuration
|
||||
@ProxyMethod("getLinkProperties")
|
||||
public static class GetLinkProperties extends MethodHook {
|
||||
@@ -343,20 +456,21 @@ public class IConnectivityManagerProxy extends BinderInvocationStub {
|
||||
protected Object hook(Object who, Method method, Object[] args) throws Throwable {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 21) {
|
||||
try {
|
||||
// Try to get real link properties first
|
||||
Object result = method.invoke(who, args);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Create LinkProperties using the universal method for all API levels
|
||||
Object linkProperties = IConnectivityManagerProxy.createLinkProperties();
|
||||
|
||||
if (linkProperties != null) {
|
||||
Slog.d(TAG, "Created LinkProperties with DNS configuration for sandboxed app");
|
||||
Slog.d(TAG, "Created LinkProperties with DNS configuration for sandboxed app (fallback)");
|
||||
return linkProperties;
|
||||
} else {
|
||||
Slog.w(TAG, "Failed to create LinkProperties, falling back to original method");
|
||||
return method.invoke(who, args);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
Slog.w(TAG, "Error creating LinkProperties: " + e.getMessage());
|
||||
return method.invoke(who, args);
|
||||
}
|
||||
}
|
||||
return method.invoke(who, args);
|
||||
@@ -506,6 +620,15 @@ public class IConnectivityManagerProxy extends BinderInvocationStub {
|
||||
// Try to use the original method first
|
||||
Object result = method.invoke(who, args);
|
||||
if (result != null) {
|
||||
// Force CONNECTED state
|
||||
try {
|
||||
Method setDetailedState = result.getClass().getMethod("setDetailedState",
|
||||
android.net.NetworkInfo.DetailedState.class, String.class, String.class);
|
||||
setDetailedState.setAccessible(true);
|
||||
setDetailedState.invoke(result, android.net.NetworkInfo.DetailedState.CONNECTED, null, null);
|
||||
} catch (Exception e) {
|
||||
// Ignore
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -690,6 +813,15 @@ public class IConnectivityManagerProxy extends BinderInvocationStub {
|
||||
// Try to use the original method first
|
||||
Object result = method.invoke(who, args);
|
||||
if (result != null) {
|
||||
// Force CONNECTED state
|
||||
try {
|
||||
Method setDetailedState = result.getClass().getMethod("setDetailedState",
|
||||
android.net.NetworkInfo.DetailedState.class, String.class, String.class);
|
||||
setDetailedState.setAccessible(true);
|
||||
setDetailedState.invoke(result, android.net.NetworkInfo.DetailedState.CONNECTED, null, null);
|
||||
} catch (Exception e) {
|
||||
// Ignore
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -724,6 +856,15 @@ public class IConnectivityManagerProxy extends BinderInvocationStub {
|
||||
// Try to use the original method first
|
||||
Object result = method.invoke(who, args);
|
||||
if (result != null) {
|
||||
// Force CONNECTED state
|
||||
try {
|
||||
Method setDetailedState = result.getClass().getMethod("setDetailedState",
|
||||
android.net.NetworkInfo.DetailedState.class, String.class, String.class);
|
||||
setDetailedState.setAccessible(true);
|
||||
setDetailedState.invoke(result, android.net.NetworkInfo.DetailedState.CONNECTED, null, null);
|
||||
} catch (Exception e) {
|
||||
// Ignore
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ import top.niunaijun.blackbox.utils.Md5Utils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IDeviceIdentifiersPolicyProxy extends BinderInvocationStub {
|
||||
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ import top.niunaijun.blackbox.utils.MethodParameterUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IDevicePolicyManagerProxy extends BinderInvocationStub {
|
||||
public IDevicePolicyManagerProxy() {
|
||||
|
||||
@@ -17,7 +17,7 @@ import top.niunaijun.blackbox.utils.MethodParameterUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IDisplayManagerProxy extends ClassInvocationStub {
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ import top.niunaijun.blackbox.utils.MethodParameterUtils;
|
||||
* (`・ω・∥
|
||||
* 丶 つ0
|
||||
* しーJ
|
||||
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
|
||||
*
|
||||
*/
|
||||
public class IGraphicsStatsProxy extends BinderInvocationStub {
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user