feat: Enhance Blackbox core virtualization, system service proxies, and hook mechanisms for improved compatibility.

This commit is contained in:
alex5402
2026-01-30 22:13:05 +05:30
parent 64d0421685
commit 9572ccefa9
147 changed files with 488 additions and 299 deletions
+2 -1
View File
@@ -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"
+1 -1
View File
@@ -21,7 +21,7 @@
* (`・ω・∥
*  つ0
* しーJ
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
*
*/
struct {
JavaVM *vm;
+1 -1
View File
@@ -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;
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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__)
+1 -1
View File
@@ -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";
@@ -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() {
@@ -8,7 +8,7 @@ import java.io.File;
* (`・ω・∥
*  つ0
* しーJ
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
*
*/
public abstract class ClientConfiguration {
@@ -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 {
@@ -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();
@@ -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);
@@ -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();
@@ -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;
@@ -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";
@@ -16,7 +16,7 @@ import top.niunaijun.blackbox.utils.NativeUtils;
* (`ω
*  つ0
* しーJ
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
*
* 拷贝文件相关
*/
public class CopyExecutor implements Executor {
@@ -11,7 +11,7 @@ import top.niunaijun.blackbox.utils.FileUtils;
* (`ω
*  つ0
* しーJ
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
*
* 创建包相关的信息
*/
public class CreatePackageExecutor implements Executor {
@@ -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";
@@ -11,7 +11,7 @@ import top.niunaijun.blackbox.utils.FileUtils;
* (`ω
*  つ0
* しーJ
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
*
*/
public class RemoveAppExecutor implements Executor {
@Override
@@ -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;
@@ -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() {
@@ -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";
@@ -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 {
@@ -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";
@@ -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 {
@@ -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";
@@ -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;
}
@@ -17,7 +17,7 @@ import top.niunaijun.blackbox.utils.Md5Utils;
* (`ω
*  つ0
* しーJ
* TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20)
*
*/
public class IDeviceIdentifiersPolicyProxy extends BinderInvocationStub {
@@ -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