From 1b1a75e14ac4685827832905b62c230803af409e Mon Sep 17 00:00:00 2001 From: alex5402 Date: Tue, 19 Aug 2025 20:35:23 +0530 Subject: [PATCH] The source code is open from now Enjoy --- Bcore/.gitignore | 88 + Bcore/build.gradle | 107 + Bcore/consumer-rules.pro | 28 + Bcore/proguard-rules.pro | 44 + Bcore/src/main/AndroidManifest.xml | 2369 +++++++++++++++++ .../accounts/IAccountAuthenticator.aidl | 86 + .../IAccountAuthenticatorResponse.aidl | 27 + .../accounts/IAccountManagerResponse.aidl | 11 + .../ContentProviderHolder.aidl | 4 + .../aidl/android/app/IServiceConnection.aidl | 26 + .../aidl/android/app/IStopUserCallback.aidl | 27 + .../app/IWallpaperManagerCallback.aidl | 24 + .../aidl/android/app/job/IJobCallback.aidl | 62 + .../aidl/android/app/job/IJobService.aidl | 15 + .../aidl/android/app/job/JobWorkItem.aidl | 4 + .../aidl/android/content/IIntentReceiver.aidl | 32 + .../aidl/android/content/ISyncAdapter.aidl | 54 + .../aidl/android/content/ISyncContext.aidl | 38 + .../android/content/ISyncStatusObserver.aidl | 6 + .../aidl/android/content/SyncStatusInfo.aidl | 3 + .../content/pm/IPackageDataObserver.aidl | 10 + .../content/pm/IPackageDeleteObserver2.aidl | 24 + .../content/pm/IPackageInstallObserver.aidl | 9 + .../content/pm/IPackageInstallObserver2.aidl | 45 + .../content/pm/IPackageInstallerCallback.aidl | 9 + .../content/pm/IPackageInstallerSession.aidl | 20 + .../android/database/IContentObserver.aidl | 13 + .../android/location/ILocationListener.aidl | 13 + .../android/net/IConnectivityManager.aidl | 16 + .../aidl/android/net/wifi/IWifiScanner.aidl | 11 + .../aidl/android/os/ISystemUpdateManager.aidl | 9 + .../internal/widget/ILockSettings.aidl | 6 + .../blackbox/core/IBActivityThread.aidl | 27 + .../top/niunaijun/blackbox/core/IEmpty.aidl | 8 + .../accounts/IBAccountManagerService.aidl | 77 + .../system/am/IBActivityManagerService.aidl | 61 + .../core/system/am/IBJobManagerService.aidl | 19 + .../location/IBLocationManagerService.aidl | 45 + .../IBNotificationManagerService.aidl | 28 + .../system/os/IBStorageManagerService.aidl | 13 + .../core/system/pm/BPackageSettings.aidl | 6 + .../system/pm/IBPackageInstallerService.aidl | 14 + .../system/pm/IBPackageManagerService.aidl | 49 + .../system/pm/IBXposedManagerService.aidl | 14 + .../blackbox/core/system/user/BUserInfo.aidl | 5 + .../system/user/IBUserManagerService.aidl | 15 + .../niunaijun/blackbox/entity/AppConfig.aidl | 6 + .../niunaijun/blackbox/entity/JobRecord.aidl | 6 + .../blackbox/entity/UnbindRecord.aidl | 3 + .../blackbox/entity/am/PendingResultData.aidl | 3 + .../blackbox/entity/am/ReceiverData.aidl | 3 + .../entity/am/RunningAppProcessInfo.aidl | 3 + .../entity/am/RunningServiceInfo.aidl | 3 + .../blackbox/entity/location/BCell.aidl | 3 + .../blackbox/entity/location/BLocation.aidl | 5 + .../entity/location/BLocationConfig.aidl | 3 + .../blackbox/entity/pm/InstallOption.aidl | 3 + .../blackbox/entity/pm/InstallResult.aidl | 3 + .../blackbox/entity/pm/InstalledModule.aidl | 3 + .../blackbox/entity/pm/InstalledPackage.aidl | 3 + Bcore/src/main/assets/empty.jar | Bin 0 -> 1483 bytes Bcore/src/main/assets/junit.jar | Bin 0 -> 87259 bytes Bcore/src/main/cpp/Android.mk | 56 + Bcore/src/main/cpp/Application.mk | 8 + Bcore/src/main/cpp/BoxCore.cpp | 182 ++ Bcore/src/main/cpp/BoxCore.h | 23 + Bcore/src/main/cpp/Dobby/arm64-v8a/libdobby.a | Bin 0 -> 366194 bytes .../src/main/cpp/Dobby/armeabi-v7a/libdobby.a | Bin 0 -> 283322 bytes Bcore/src/main/cpp/Dobby/dobby.h | 190 ++ Bcore/src/main/cpp/Hook/BaseHook.cpp | 10 + Bcore/src/main/cpp/Hook/BaseHook.h | 17 + Bcore/src/main/cpp/Hook/BinderHook.cpp | 23 + Bcore/src/main/cpp/Hook/BinderHook.h | 16 + Bcore/src/main/cpp/Hook/DexFileHook.cpp | 48 + Bcore/src/main/cpp/Hook/DexFileHook.h | 14 + Bcore/src/main/cpp/Hook/FileSystemHook.cpp | 95 + Bcore/src/main/cpp/Hook/FileSystemHook.h | 13 + Bcore/src/main/cpp/Hook/RuntimeHook.cpp | 39 + Bcore/src/main/cpp/Hook/RuntimeHook.h | 18 + .../src/main/cpp/Hook/UnixFileSystemHook.cpp | 185 ++ Bcore/src/main/cpp/Hook/UnixFileSystemHook.h | 17 + Bcore/src/main/cpp/Hook/VMClassLoaderHook.cpp | 42 + Bcore/src/main/cpp/Hook/VMClassLoaderHook.h | 19 + Bcore/src/main/cpp/IO.cpp | 121 + Bcore/src/main/cpp/IO.h | 35 + Bcore/src/main/cpp/JniHook/ArtMethod.h | 43 + Bcore/src/main/cpp/JniHook/JniHook.cpp | 312 +++ Bcore/src/main/cpp/JniHook/JniHook.h | 22 + Bcore/src/main/cpp/Log.h | 18 + Bcore/src/main/cpp/Utils/AntiDetection.cpp | 291 ++ Bcore/src/main/cpp/Utils/HexDump.cpp | 41 + Bcore/src/main/cpp/Utils/HexDump.h | 14 + Bcore/src/main/cpp/Utils/VirtualSpoof.cpp | 86 + Bcore/src/main/cpp/Utils/elf_util.cpp | 293 ++ Bcore/src/main/cpp/Utils/elf_util.h | 138 + Bcore/src/main/cpp/hidden_api.cpp | 132 + Bcore/src/main/cpp/hidden_api.h | 10 + Bcore/src/main/cpp/xdl.h | 92 + Bcore/src/main/cpp/xdl/xdl.c | 916 +++++++ Bcore/src/main/cpp/xdl/xdl.map.txt | 14 + Bcore/src/main/cpp/xdl/xdl_iterate.c | 297 +++ Bcore/src/main/cpp/xdl/xdl_iterate.h | 43 + Bcore/src/main/cpp/xdl/xdl_linker.c | 234 ++ Bcore/src/main/cpp/xdl/xdl_linker.h | 40 + Bcore/src/main/cpp/xdl/xdl_lzma.c | 187 ++ Bcore/src/main/cpp/xdl/xdl_lzma.h | 40 + Bcore/src/main/cpp/xdl/xdl_util.c | 102 + Bcore/src/main/cpp/xdl/xdl_util.h | 71 + .../main/java/android/app/ActivityThread.java | 86 + .../android/app/ContentProviderHolder.java | 19 + .../android/content/IContentProvider.java | 14 + .../main/java/android/content/SyncInfo.java | 101 + .../java/android/content/SyncStatusInfo.java | 174 ++ .../android/content/pm/ManifestDigest.java | 65 + .../android/content/pm/PackageParser.java | 704 +++++ .../android/content/pm/PackageUserState.java | 38 + .../java/android/content/pm/VerifierInfo.java | 45 + .../android/location/LocationRequest.java | 33 + .../java/android/os/ParcelableException.java | 60 + Bcore/src/main/java/android/os/SELinux.java | 15 + .../main/java/android/os/ServiceManager.java | 7 + .../android/accounts/IAccountManager.java | 16 + .../main/java/black/android/app/Activity.java | 36 + .../black/android/app/ActivityClient.java | 31 + .../black/android/app/ActivityManager.java | 20 + .../android/app/ActivityManagerNative.java | 16 + .../android/app/ActivityManagerOreo.java | 16 + .../android/app/ActivityTaskManager.java | 15 + .../black/android/app/ActivityThread.java | 215 ++ .../black/android/app/ActivityThreadNMR1.java | 14 + .../black/android/app/ActivityThreadQ.java | 14 + .../java/black/android/app/AlarmManager.java | 15 + .../java/black/android/app/AppOpsManager.java | 12 + .../android/app/ApplicationThreadNative.java | 13 + .../android/app/ClientTransactionHandler.java | 12 + .../java/black/android/app/ContextImpl.java | 40 + .../black/android/app/ContextImplICS.java | 15 + .../black/android/app/ContextImplKitkat.java | 21 + .../black/android/app/IActivityManager.java | 59 + .../black/android/app/IActivityManagerL.java | 13 + .../black/android/app/IActivityManagerN.java | 13 + .../android/app/IActivityTaskManager.java | 16 + .../java/black/android/app/IAlarmManager.java | 16 + .../black/android/app/IApplicationThread.java | 31 + .../android/app/IApplicationThreadOreo.java | 20 + .../black/android/app/ISearchManager.java | 16 + .../android/app/IServiceConnectionO.java | 13 + .../black/android/app/IUsageStatsManager.java | 16 + .../black/android/app/IWallpaperManager.java | 16 + .../black/android/app/Instrumentation.java | 16 + .../java/black/android/app/LoadedApk.java | 97 + .../black/android/app/LoadedApkHuaWei.java | 11 + .../java/black/android/app/LoadedApkICS.java | 11 + .../black/android/app/LoadedApkKitkat.java | 11 + .../java/black/android/app/Notification.java | 13 + .../android/app/NotificationChannel.java | 11 + .../android/app/NotificationChannelGroup.java | 15 + .../java/black/android/app/NotificationL.java | 16 + .../java/black/android/app/NotificationM.java | 15 + .../android/app/NotificationManager.java | 16 + .../java/black/android/app/NotificationO.java | 14 + .../black/android/app/PendingIntentJBMR2.java | 17 + .../black/android/app/PendingIntentO.java | 12 + .../main/java/black/android/app/Service.java | 19 + .../black/android/app/ServiceStartArgs.java | 25 + .../android/app/SharedPreferencesImpl.java | 12 + .../black/android/app/WallpaperManager.java | 18 + .../app/admin/IDevicePolicyManager.java | 16 + .../android/app/backup/IBackupManager.java | 16 + .../black/android/app/job/IJobScheduler.java | 16 + .../java/black/android/app/job/JobInfo.java | 21 + .../black/android/app/job/JobParameters.java | 19 + .../black/android/app/job/JobWorkItem.java | 26 + .../black/android/app/role/IRoleManager.java | 16 + .../ActivityLifecycleItem.java | 11 + .../servertransaction/ActivityResultItem.java | 12 + .../servertransaction/ClientTransaction.java | 20 + .../servertransaction/LaunchActivityItem.java | 16 + .../TopResumedActivityChangeItem.java | 11 + .../app/usage/IStorageStatsManager.java | 16 + .../black/android/app/usage/StorageStats.java | 21 + .../android/content/AttributionSource.java | 17 + .../content/AttributionSourceState.java | 16 + .../android/content/BroadcastReceiver.java | 96 + .../android/content/ClipboardManager.java | 16 + .../android/content/ClipboardManagerOreo.java | 16 + .../content/ContentProviderClient.java | 12 + .../content/ContentProviderClientQ.java | 11 + .../content/ContentProviderHolderOreo.java | 19 + .../content/ContentProviderNative.java | 13 + .../android/content/ContentResolver.java | 16 + .../black/android/content/IClipboard.java | 8 + .../android/content/IContentProvider.java | 8 + .../android/content/IContentService.java | 16 + .../android/content/IIntentReceiver.java | 13 + .../android/content/IRestrictionsManager.java | 16 + .../black/android/content/IntentFilter.java | 15 + .../black/android/content/IntentSender.java | 12 + .../black/android/content/PeriodicSync.java | 11 + .../android/content/SyncAdapterType.java | 11 + .../android/content/SyncAdapterTypeN.java | 11 + .../java/black/android/content/SyncInfo.java | 12 + .../black/android/content/SyncRequest.java | 28 + .../android/content/pm/ApplicationInfoL.java | 32 + .../android/content/pm/ApplicationInfoN.java | 20 + .../android/content/pm/ApplicationInfoP.java | 15 + .../android/content/pm/ILauncherApps.java | 16 + .../android/content/pm/IShortcutService.java | 16 + .../android/content/pm/LauncherApps.java | 20 + .../android/content/pm/PackageInstaller.java | 128 + .../android/content/pm/PackageManager.java | 12 + .../android/content/pm/PackageParser.java | 148 + .../content/pm/PackageParserLollipop.java | 36 + .../content/pm/PackageParserLollipop22.java | 36 + .../content/pm/PackageParserMarshmallow.java | 37 + .../content/pm/PackageParserNougat.java | 13 + .../android/content/pm/PackageParserPie.java | 13 + .../android/content/pm/PackageUserState.java | 11 + .../android/content/pm/ParceledListSlice.java | 38 + .../black/android/content/pm/SigningInfo.java | 16 + .../black/android/content/pm/UserInfo.java | 15 + .../android/content/res/AssetManager.java | 23 + .../content/res/CompatibilityInfo.java | 19 + .../black/android/ddm/DdmHandleAppName.java | 11 + .../black/android/graphics/Compatibility.java | 13 + .../display/DisplayManagerGlobal.java | 16 + .../hardware/display/IDisplayManager.java | 8 + .../hardware/location/IContextHubService.java | 20 + .../black/android/location/GpsStatus.java | 11 + .../black/android/location/GpsStatusL.java | 11 + .../android/location/ILocationListener.java | 21 + .../android/location/ILocationManager.java | 16 + .../android/location/LocationManager.java | 129 + .../android/location/LocationManagerQ.java | 24 + .../android/location/LocationRequestL.java | 21 + .../location/provider/ProviderProperties.java | 29 + .../black/android/media/AudioManager.java | 16 + .../black/android/media/IAudioService.java | 16 + .../android/media/IMediaRouterService.java | 16 + .../java/black/android/media/MediaRouter.java | 25 + .../media/session/ISessionManager.java | 16 + .../android/net/IConnectivityManager.java | 16 + .../java/black/android/net/IVpnManager.java | 20 + .../java/black/android/net/NetworkInfo.java | 32 + .../black/android/net/wifi/IWifiManager.java | 16 + .../java/black/android/net/wifi/WifiInfo.java | 45 + .../black/android/net/wifi/WifiManager.java | 16 + .../black/android/net/wifi/WifiScanner.java | 11 + .../java/black/android/net/wifi/WifiSsid.java | 11 + .../java/black/android/nfc/INfcAdapter.java | 16 + .../java/black/android/os/BaseBundle.java | 12 + .../src/main/java/black/android/os/Build.java | 8 + .../main/java/black/android/os/Bundle.java | 15 + .../main/java/black/android/os/BundleICS.java | 12 + .../java/black/android/os/DropBoxManager.java | 12 + .../main/java/black/android/os/Handler.java | 12 + .../os/IDeviceIdentifiersPolicyService.java | 16 + .../android/os/INetworkManagementService.java | 16 + .../java/black/android/os/IPowerManager.java | 16 + .../java/black/android/os/IUserManager.java | 16 + .../android/os/IVibratorManagerService.java | 20 + .../java/black/android/os/MemoryFile.java | 12 + .../main/java/black/android/os/Message.java | 11 + .../main/java/black/android/os/Parcel.java | 14 + .../main/java/black/android/os/Process.java | 11 + .../java/black/android/os/ServiceManager.java | 34 + .../java/black/android/os/StrictMode.java | 21 + .../java/black/android/os/UserHandle.java | 11 + .../os/health/SystemHealthManager.java | 12 + .../black/android/os/mount/IMountService.java | 16 + .../android/os/storage/IStorageManager.java | 16 + .../android/os/storage/StorageManager.java | 12 + .../android/os/storage/StorageVolume.java | 15 + .../permission/IPermissionManager.java | 16 + .../black/android/providers/Settings.java | 46 + .../renderscript/RenderScriptCacheDir.java | 12 + .../java/black/android/rms/HwSysResImplP.java | 12 + .../rms/resource/ReceiverResourceLP.java | 11 + .../rms/resource/ReceiverResourceM.java | 11 + .../rms/resource/ReceiverResourceN.java | 12 + .../rms/resource/ReceiverResourceO.java | 12 + .../config/NetworkSecurityConfigProvider.java | 12 + .../notification/StatusBarNotification.java | 20 + .../IPersistentDataBlockService.java | 16 + .../android/telephony/CellIdentityCdma.java | 21 + .../android/telephony/CellIdentityGsm.java | 24 + .../black/android/telephony/CellInfoCdma.java | 20 + .../black/android/telephony/CellInfoGsm.java | 20 + .../telephony/CellSignalStrengthCdma.java | 27 + .../telephony/CellSignalStrengthGsm.java | 18 + .../telephony/NeighboringCellInfo.java | 17 + .../black/android/telephony/SmsManager.java | 14 + .../android/telephony/TelephonyManager.java | 23 + .../java/black/android/util/Singleton.java | 15 + .../android/view/CompatibilityInfoHolder.java | 11 + .../main/java/black/android/view/Display.java | 12 + .../android/view/DisplayAdjustments.java | 11 + .../black/android/view/HardwareRenderer.java | 12 + .../black/android/view/IAutoFillManager.java | 16 + .../black/android/view/IGraphicsStats.java | 16 + .../black/android/view/IWindowManager.java | 16 + .../java/black/android/view/RenderScript.java | 12 + .../black/android/view/SurfaceControl.java | 12 + .../black/android/view/ThreadedRenderer.java | 12 + .../android/view/WindowManagerGlobal.java | 15 + .../accessibility/IAccessibilityManager.java | 16 + .../android/webkit/IWebViewUpdateService.java | 14 + .../black/android/webkit/WebViewFactory.java | 15 + .../black/android/widget/RemoteViews.java | 20 + .../main/java/black/android/widget/Toast.java | 12 + .../java/black/com/android/internal/R.java | 182 ++ .../android/internal/app/IAppOpsService.java | 16 + .../android/internal/app/IBatteryStats.java | 16 + .../android/internal/app/ISmtOpsService.java | 16 + .../internal/appwidget/IAppWidgetService.java | 16 + .../internal/content/NativeLibraryHelper.java | 26 + .../internal/content/ReferrerIntent.java | 12 + .../com/android/internal/net/VpnConfig.java | 21 + .../internal/os/IDropBoxManagerService.java | 16 + .../android/internal/os/IVibratorService.java | 16 + .../com/android/internal/os/UserManager.java | 16 + .../android/internal/policy/PhoneWindow.java | 12 + .../internal/telecom/ITelecomService.java | 16 + .../com/android/internal/telephony/IMms.java | 16 + .../internal/telephony/IPhoneSubInfo.java | 16 + .../com/android/internal/telephony/ISms.java | 16 + .../com/android/internal/telephony/ISub.java | 16 + .../internal/telephony/ITelephony.java | 16 + .../telephony/ITelephonyRegistry.java | 16 + .../internal/telephony/PhoneConstantsMtk.java | 11 + .../internal/view/IInputMethodManager.java | 8 + .../view/inputmethod/InputMethodManager.java | 12 + .../java/black/dalvik/system/VMRuntime.java | 27 + Bcore/src/main/java/black/java/io/File.java | 11 + .../main/java/black/java/io/FileSystem.java | 8 + .../java/black/java/io/UnixFileSystem.java | 8 + .../java/black/java/lang/ThreadGroup.java | 15 + .../java/black/java/lang/ThreadGroupN.java | 17 + .../java/black/libcore/io/ForwardingOs.java | 11 + .../main/java/black/libcore/io/Libcore.java | 11 + Bcore/src/main/java/black/libcore/io/Os.java | 8 + .../top/niunaijun/blackbox/BlackBoxCore.java | 2028 ++++++++++++++ .../blackbox/app/BActivityThread.java | 1387 ++++++++++ .../blackbox/app/LauncherActivity.java | 224 ++ .../configuration/AppLifecycleCallback.java | 88 + .../configuration/ClientConfiguration.java | 41 + .../dispatcher/AppJobServiceDispatcher.java | 105 + .../app/dispatcher/AppServiceDispatcher.java | 240 ++ .../niunaijun/blackbox/closecode/Entry.java | 54 + .../niunaijun/blackbox/core/CrashHandler.java | 32 + .../top/niunaijun/blackbox/core/GmsCore.java | 121 + .../top/niunaijun/blackbox/core/IOCore.java | 190 ++ .../niunaijun/blackbox/core/NativeCore.java | 233 ++ .../blackbox/core/env/AppSystemEnv.java | 85 + .../blackbox/core/env/BEnvironment.java | 151 ++ .../blackbox/core/env/VirtualRuntime.java | 30 + .../core/system/BProcessManagerService.java | 342 +++ .../blackbox/core/system/BlackBoxSystem.java | 97 + .../blackbox/core/system/DaemonService.java | 189 ++ .../blackbox/core/system/ISystemService.java | 13 + .../blackbox/core/system/JarConfig.java | 122 + .../blackbox/core/system/JarManager.java | 325 +++ .../blackbox/core/system/JarManagerTest.java | 115 + .../blackbox/core/system/ProcessRecord.java | 73 + .../blackbox/core/system/ServiceManager.java | 83 + .../core/system/SystemCallProvider.java | 107 + .../core/system/accounts/BAccount.java | 77 + .../accounts/BAccountManagerService.java | 1849 +++++++++++++ .../core/system/accounts/BUserAccounts.java | 132 + .../accounts/RegisteredServicesParser.java | 39 + .../core/system/accounts/TokenCache.java | 56 + .../core/system/am/ActiveServices.java | 304 +++ .../core/system/am/ActivityRecord.java | 42 + .../core/system/am/ActivityStack.java | 560 ++++ .../system/am/BActivityManagerService.java | 381 +++ .../core/system/am/BJobManagerService.java | 104 + .../core/system/am/BroadcastManager.java | 155 ++ .../core/system/am/PendingIntentRecord.java | 25 + .../blackbox/core/system/am/TaskRecord.java | 55 + .../blackbox/core/system/am/UserSpace.java | 20 + .../location/BLocationManagerService.java | 341 +++ .../core/system/location/LocationRecord.java | 14 + .../BNotificationManagerService.java | 305 +++ .../NotificationChannelManager.java | 45 + .../notification/NotificationRecord.java | 18 + .../system/os/BStorageManagerService.java | 69 + .../permission/XiaomiPermissionManager.java | 401 +++ .../blackbox/core/system/pm/BPackage.java | 741 ++++++ .../system/pm/BPackageInstallerService.java | 110 + .../system/pm/BPackageManagerService.java | 837 ++++++ .../core/system/pm/BPackageSettings.java | 164 ++ .../core/system/pm/BPackageUserState.java | 66 + .../core/system/pm/BXposedManagerService.java | 174 ++ .../core/system/pm/ComponentResolver.java | 643 +++++ .../core/system/pm/FastImmutableArraySet.java | 78 + .../core/system/pm/IntentResolver.java | 741 ++++++ .../core/system/pm/PackageManagerCompat.java | 384 +++ .../core/system/pm/PackageMonitor.java | 15 + .../blackbox/core/system/pm/Settings.java | 268 ++ .../core/system/pm/SharedUserSetting.java | 154 ++ .../system/pm/installer/CopyExecutor.java | 59 + .../pm/installer/CreatePackageExecutor.java | 28 + .../pm/installer/CreateUserExecutor.java | 40 + .../core/system/pm/installer/Executor.java | 18 + .../pm/installer/RemoveAppExecutor.java | 22 + .../pm/installer/RemoveUserExecutor.java | 28 + .../core/system/user/BUserHandle.java | 469 ++++ .../blackbox/core/system/user/BUserInfo.java | 65 + .../core/system/user/BUserManagerService.java | 166 ++ .../core/system/user/BUserStatus.java | 13 + .../niunaijun/blackbox/entity/AppConfig.java | 70 + .../niunaijun/blackbox/entity/JobRecord.java | 55 + .../blackbox/entity/ServiceRecord.java | 129 + .../blackbox/entity/UnbindRecord.java | 80 + .../blackbox/entity/am/PendingResultData.java | 150 ++ .../blackbox/entity/am/ReceiverData.java | 54 + .../entity/am/RunningAppProcessInfo.java | 49 + .../entity/am/RunningServiceInfo.java | 49 + .../blackbox/entity/location/BCell.java | 100 + .../blackbox/entity/location/BLocation.java | 124 + .../entity/location/BLocationConfig.java | 60 + .../blackbox/entity/pm/InstallOption.java | 76 + .../blackbox/entity/pm/InstallResult.java | 70 + .../blackbox/entity/pm/InstalledModule.java | 72 + .../blackbox/entity/pm/InstalledPackage.java | 80 + .../blackbox/entity/pm/XposedConfig.java | 61 + .../top/niunaijun/blackbox/fake/FakeCore.java | 17 + .../fake/delegate/AppInstrumentation.java | 150 ++ .../delegate/BaseInstrumentationDelegate.java | 521 ++++ .../delegate/ContentProviderDelegate.java | 117 + .../fake/delegate/InnerReceiverDelegate.java | 80 + .../delegate/ServiceConnectionDelegate.java | 70 + .../fake/frameworks/BAccountManager.java | 336 +++ .../fake/frameworks/BActivityManager.java | 458 ++++ .../blackbox/fake/frameworks/BJobManager.java | 65 + .../fake/frameworks/BLocationManager.java | 192 ++ .../fake/frameworks/BNotificationManager.java | 104 + .../fake/frameworks/BPackageManager.java | 860 ++++++ .../fake/frameworks/BResourcesManager.java | 224 ++ .../fake/frameworks/BStorageManager.java | 47 + .../fake/frameworks/BUserManager.java | 118 + .../fake/frameworks/BXposedManager.java | 74 + .../fake/frameworks/BlackManager.java | 162 ++ .../fake/hook/BinderInvocationStub.java | 87 + .../fake/hook/ClassInvocationStub.java | 136 + .../blackbox/fake/hook/HookManager.java | 341 +++ .../blackbox/fake/hook/IInjectHook.java | 15 + .../blackbox/fake/hook/MethodHook.java | 33 + .../blackbox/fake/hook/ProxyMethod.java | 20 + .../blackbox/fake/hook/ProxyMethods.java | 20 + .../blackbox/fake/hook/ScanClass.java | 20 + .../blackbox/fake/provider/FileProvider.java | 547 ++++ .../fake/provider/FileProviderHandler.java | 47 + .../service/ActivityManagerCommonProxy.java | 227 ++ .../blackbox/fake/service/AndroidIdProxy.java | 179 ++ .../blackbox/fake/service/ApkAssetsProxy.java | 88 + .../fake/service/AudioPermissionProxy.java | 309 +++ .../fake/service/AudioRecordProxy.java | 96 + .../fake/service/AuthenticationProxy.java | 205 ++ .../fake/service/ClassLoaderProxy.java | 561 ++++ .../fake/service/ContentResolverProxy.java | 148 + .../blackbox/fake/service/DeviceIdProxy.java | 138 + .../fake/service/FeatureFlagUtilsProxy.java | 143 + .../fake/service/FileSystemProxy.java | 104 + .../blackbox/fake/service/GmsProxy.java | 185 ++ .../service/GoogleAccountManagerProxy.java | 339 +++ .../blackbox/fake/service/HCallbackProxy.java | 240 ++ .../service/IAccessibilityManagerProxy.java | 62 + .../fake/service/IAccountManagerProxy.java | 426 +++ .../fake/service/IActivityClientProxy.java | 101 + .../fake/service/IActivityManagerProxy.java | 846 ++++++ .../service/IActivityTaskManagerProxy.java | 61 + .../fake/service/IAlarmManagerProxy.java | 49 + .../fake/service/IAppOpsManagerProxy.java | 267 ++ .../fake/service/IAppWidgetManagerProxy.java | 76 + .../fake/service/IAttributionSourceProxy.java | 189 ++ .../fake/service/IAudioServiceProxy.java | 224 ++ .../fake/service/IAutofillManagerProxy.java | 63 + .../service/IConnectivityManagerProxy.java | 1396 ++++++++++ .../fake/service/IContentProviderProxy.java | 195 ++ .../fake/service/IContextHubServiceProxy.java | 45 + .../IDeviceIdentifiersPolicyProxy.java | 52 + .../service/IDevicePolicyManagerProxy.java | 87 + .../fake/service/IDisplayManagerProxy.java | 60 + .../fake/service/IDnsResolverProxy.java | 182 ++ .../service/IFingerprintManagerProxy.java | 46 + .../fake/service/IGraphicsStatsProxy.java | 49 + .../fake/service/IJobServiceProxy.java | 378 +++ .../fake/service/ILauncherAppsProxy.java | 53 + .../fake/service/ILocationManagerProxy.java | 234 ++ .../service/IMediaRouterServiceProxy.java | 57 + .../service/IMediaSessionManagerProxy.java | 53 + .../service/IMiuiSecurityManagerProxy.java | 289 ++ .../INetworkManagementServiceProxy.java | 59 + .../service/INotificationManagerProxy.java | 187 ++ .../fake/service/IPackageManagerProxy.java | 743 ++++++ .../fake/service/IPermissionManagerProxy.java | 65 + .../IPersistentDataBlockServiceProxy.java | 46 + .../fake/service/IPhoneSubInfoProxy.java | 55 + .../fake/service/IPowerManagerProxy.java | 42 + .../service/ISensorPrivacyManagerProxy.java | 131 + .../fake/service/ISettingsProviderProxy.java | 196 ++ .../fake/service/ISettingsSystemProxy.java | 119 + .../fake/service/IShortcutManagerProxy.java | 118 + .../fake/service/IStorageManagerProxy.java | 86 + .../service/IStorageStatsManagerProxy.java | 44 + .../service/ISystemSensorManagerProxy.java | 113 + .../fake/service/ISystemUpdateProxy.java | 32 + .../fake/service/ITelephonyManagerProxy.java | 184 ++ .../fake/service/ITelephonyRegistryProxy.java | 59 + .../fake/service/IUserManagerProxy.java | 70 + .../fake/service/IVibratorServiceProxy.java | 57 + .../fake/service/IVpnManagerProxy.java | 39 + .../service/IWebViewUpdateServiceProxy.java | 247 ++ .../fake/service/IWifiManagerProxy.java | 83 + .../fake/service/IWifiScannerProxy.java | 35 + .../fake/service/IWindowManagerProxy.java | 55 + .../fake/service/IWindowSessionProxy.java | 71 + .../IXiaomiAttributionSourceProxy.java | 116 + .../service/IXiaomiMiuiServicesProxy.java | 242 ++ .../fake/service/IXiaomiSettingsProxy.java | 222 ++ .../blackbox/fake/service/LevelDbProxy.java | 130 + .../fake/service/MediaRecorderClassProxy.java | 136 + .../fake/service/MediaRecorderProxy.java | 206 ++ .../blackbox/fake/service/ReLinkerProxy.java | 78 + .../fake/service/ResourcesManagerProxy.java | 90 + .../fake/service/SQLiteDatabaseProxy.java | 106 + .../blackbox/fake/service/StubHelper.java | 131 + .../fake/service/SystemLibraryProxy.java | 86 + .../blackbox/fake/service/VpnCommonProxy.java | 61 + .../fake/service/WebViewFactoryProxy.java | 275 ++ .../blackbox/fake/service/WebViewProxy.java | 255 ++ .../fake/service/WorkManagerProxy.java | 257 ++ .../fake/service/base/PkgMethodProxy.java | 26 + .../fake/service/base/UidMethodProxy.java | 34 + .../fake/service/base/ValueMethodProxy.java | 26 + .../service/context/ContentServiceStub.java | 55 + .../context/RestrictionsManagerStub.java | 51 + .../context/providers/BContentProvider.java | 15 + .../providers/ContentProviderStub.java | 269 ++ .../context/providers/SystemProviderStub.java | 87 + .../blackbox/fake/service/libcore/OsStub.java | 105 + .../blackbox/proxy/ProxyActivity.java | 246 ++ .../proxy/ProxyBroadcastReceiver.java | 32 + .../blackbox/proxy/ProxyContentProvider.java | 274 ++ .../blackbox/proxy/ProxyJobService.java | 259 ++ .../blackbox/proxy/ProxyManifest.java | 61 + .../blackbox/proxy/ProxyPendingActivity.java | 237 ++ .../blackbox/proxy/ProxyService.java | 275 ++ .../blackbox/proxy/ProxyVpnService.java | 296 ++ .../proxy/TransparentProxyActivity.java | 207 ++ .../proxy/record/ProxyActivityRecord.java | 44 + .../proxy/record/ProxyBroadcastRecord.java | 40 + .../proxy/record/ProxyPendingRecord.java | 40 + .../proxy/record/ProxyServiceRecord.java | 48 + .../blackbox/util/XiaomiDeviceDetector.java | 394 +++ .../niunaijun/blackbox/utils/AbiUtils.java | 77 + .../niunaijun/blackbox/utils/ArrayUtils.java | 146 + .../utils/AttributionSourceUtils.java | 204 ++ .../niunaijun/blackbox/utils/CloseUtils.java | 28 + .../blackbox/utils/ComponentUtils.java | 112 + .../blackbox/utils/ContextWrapperHook.java | 111 + .../blackbox/utils/CrashMonitor.java | 687 +++++ .../blackbox/utils/DexCrashPrevention.java | 478 ++++ .../blackbox/utils/DexFileRecovery.java | 471 ++++ .../blackbox/utils/DrawableUtils.java | 26 + .../niunaijun/blackbox/utils/FileUtils.java | 512 ++++ .../blackbox/utils/GlobalContextWrapper.java | 194 ++ .../blackbox/utils/HackAppUtils.java | 23 + .../niunaijun/blackbox/utils/JarUtils.java | 257 ++ .../niunaijun/blackbox/utils/Md5Utils.java | 100 + .../blackbox/utils/MethodParameterUtils.java | 153 ++ .../blackbox/utils/NativeCrashPrevention.java | 536 ++++ .../niunaijun/blackbox/utils/NativeUtils.java | 111 + .../top/niunaijun/blackbox/utils/QQUtils.java | 23 + .../blackbox/utils/ReflectionClass.java | 229 ++ .../niunaijun/blackbox/utils/Reflector.java | 443 +++ .../blackbox/utils/SafeContextWrapper.java | 154 ++ .../niunaijun/blackbox/utils/ShellUtils.java | 195 ++ .../blackbox/utils/SimpleCrashFix.java | 292 ++ .../top/niunaijun/blackbox/utils/Slog.java | 90 + .../utils/SocialMediaAppCrashPrevention.java | 303 +++ .../blackbox/utils/StackTraceFilter.java | 30 + .../blackbox/utils/SystemHookManager.java | 285 ++ .../blackbox/utils/TransactionThrottler.java | 95 + .../niunaijun/blackbox/utils/TrieTree.java | 84 + .../blackbox/utils/UIDSpoofingHelper.java | 155 ++ .../blackbox/utils/XposedErrorLogger.java | 20 + .../utils/compat/AccountManagerCompat.java | 43 + .../blackbox/utils/compat/ActivityCompat.java | 93 + .../utils/compat/ActivityManagerCompat.java | 112 + .../utils/compat/ApplicationThreadCompat.java | 17 + .../blackbox/utils/compat/BuildCompat.java | 150 ++ .../blackbox/utils/compat/BundleCompat.java | 60 + .../utils/compat/ContentProviderCompat.java | 105 + .../blackbox/utils/compat/ContextCompat.java | 91 + .../blackbox/utils/compat/DexFileCompat.java | 89 + .../utils/compat/PackageParserCompat.java | 68 + .../utils/compat/ParceledListSliceCompat.java | 31 + .../utils/compat/StartActivityCompat.java | 206 ++ .../utils/compat/StrictModeCompat.java | 28 + .../utils/compat/SystemPropertiesCompat.java | 47 + .../utils/compat/TaskDescriptionCompat.java | 57 + .../utils/compat/XposedParserCompat.java | 87 + .../blackbox/utils/provider/ProviderCall.java | 96 + .../top/niunaijun/jnihook/MethodUtils.java | 93 + .../top/niunaijun/jnihook/ReflectCore.java | 37 + .../top/niunaijun/jnihook/jni/JniHook.java | 26 + Bcore/src/main/res/drawable/ic_launcher.png | Bin 0 -> 7909 bytes .../src/main/res/layout/activity_launcher.xml | 30 + Bcore/src/main/res/values/strings.xml | 5 + Bcore/src/main/res/values/styles.xml | 9 + Bcore/src/main/res/xml/filepath.xml | 13 + app/build.gradle | 24 +- app/libs/Bcore-release.aar | Bin 1880801 -> 0 bytes .../java/top/niunaijun/blackboxa/app/App.kt | 1 + .../top/niunaijun/blackboxa/app/AppManager.kt | 8 + .../blackboxa/app/rocker/RockerManager.kt | 8 + .../biz/cache/AppSharedPreferenceDelegate.kt | 11 +- .../blackboxa/data/AppsRepository.kt | 147 +- .../niunaijun/blackboxa/util/MemoryManager.kt | 150 ++ .../blackboxa/view/apps/AppsAdapter.kt | 162 +- .../blackboxa/view/apps/AppsFragment.kt | 128 +- .../blackboxa/view/apps/AppsTouchCallBack.kt | 87 +- settings.gradle | 4 +- 625 files changed, 62892 insertions(+), 94 deletions(-) create mode 100644 Bcore/.gitignore create mode 100644 Bcore/build.gradle create mode 100644 Bcore/consumer-rules.pro create mode 100644 Bcore/proguard-rules.pro create mode 100644 Bcore/src/main/AndroidManifest.xml create mode 100644 Bcore/src/main/aidl/android/accounts/IAccountAuthenticator.aidl create mode 100644 Bcore/src/main/aidl/android/accounts/IAccountAuthenticatorResponse.aidl create mode 100644 Bcore/src/main/aidl/android/accounts/IAccountManagerResponse.aidl create mode 100644 Bcore/src/main/aidl/android/app/IActivityManager/ContentProviderHolder.aidl create mode 100644 Bcore/src/main/aidl/android/app/IServiceConnection.aidl create mode 100644 Bcore/src/main/aidl/android/app/IStopUserCallback.aidl create mode 100644 Bcore/src/main/aidl/android/app/IWallpaperManagerCallback.aidl create mode 100644 Bcore/src/main/aidl/android/app/job/IJobCallback.aidl create mode 100644 Bcore/src/main/aidl/android/app/job/IJobService.aidl create mode 100644 Bcore/src/main/aidl/android/app/job/JobWorkItem.aidl create mode 100644 Bcore/src/main/aidl/android/content/IIntentReceiver.aidl create mode 100644 Bcore/src/main/aidl/android/content/ISyncAdapter.aidl create mode 100644 Bcore/src/main/aidl/android/content/ISyncContext.aidl create mode 100644 Bcore/src/main/aidl/android/content/ISyncStatusObserver.aidl create mode 100644 Bcore/src/main/aidl/android/content/SyncStatusInfo.aidl create mode 100644 Bcore/src/main/aidl/android/content/pm/IPackageDataObserver.aidl create mode 100644 Bcore/src/main/aidl/android/content/pm/IPackageDeleteObserver2.aidl create mode 100644 Bcore/src/main/aidl/android/content/pm/IPackageInstallObserver.aidl create mode 100644 Bcore/src/main/aidl/android/content/pm/IPackageInstallObserver2.aidl create mode 100644 Bcore/src/main/aidl/android/content/pm/IPackageInstallerCallback.aidl create mode 100644 Bcore/src/main/aidl/android/content/pm/IPackageInstallerSession.aidl create mode 100644 Bcore/src/main/aidl/android/database/IContentObserver.aidl create mode 100644 Bcore/src/main/aidl/android/location/ILocationListener.aidl create mode 100644 Bcore/src/main/aidl/android/net/IConnectivityManager.aidl create mode 100644 Bcore/src/main/aidl/android/net/wifi/IWifiScanner.aidl create mode 100644 Bcore/src/main/aidl/android/os/ISystemUpdateManager.aidl create mode 100644 Bcore/src/main/aidl/com/android/internal/widget/ILockSettings.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/IBActivityThread.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/IEmpty.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/accounts/IBAccountManagerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/am/IBActivityManagerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/am/IBJobManagerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/location/IBLocationManagerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/notification/IBNotificationManagerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/os/IBStorageManagerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/BPackageSettings.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBPackageInstallerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBPackageManagerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBXposedManagerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/user/BUserInfo.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/user/IBUserManagerService.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/AppConfig.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/JobRecord.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/UnbindRecord.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/PendingResultData.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/ReceiverData.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/RunningAppProcessInfo.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/RunningServiceInfo.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BCell.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BLocation.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BLocationConfig.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstallOption.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstallResult.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstalledModule.aidl create mode 100644 Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstalledPackage.aidl create mode 100644 Bcore/src/main/assets/empty.jar create mode 100644 Bcore/src/main/assets/junit.jar create mode 100644 Bcore/src/main/cpp/Android.mk create mode 100644 Bcore/src/main/cpp/Application.mk create mode 100644 Bcore/src/main/cpp/BoxCore.cpp create mode 100644 Bcore/src/main/cpp/BoxCore.h create mode 100644 Bcore/src/main/cpp/Dobby/arm64-v8a/libdobby.a create mode 100644 Bcore/src/main/cpp/Dobby/armeabi-v7a/libdobby.a create mode 100644 Bcore/src/main/cpp/Dobby/dobby.h create mode 100644 Bcore/src/main/cpp/Hook/BaseHook.cpp create mode 100644 Bcore/src/main/cpp/Hook/BaseHook.h create mode 100644 Bcore/src/main/cpp/Hook/BinderHook.cpp create mode 100644 Bcore/src/main/cpp/Hook/BinderHook.h create mode 100644 Bcore/src/main/cpp/Hook/DexFileHook.cpp create mode 100644 Bcore/src/main/cpp/Hook/DexFileHook.h create mode 100644 Bcore/src/main/cpp/Hook/FileSystemHook.cpp create mode 100644 Bcore/src/main/cpp/Hook/FileSystemHook.h create mode 100644 Bcore/src/main/cpp/Hook/RuntimeHook.cpp create mode 100644 Bcore/src/main/cpp/Hook/RuntimeHook.h create mode 100644 Bcore/src/main/cpp/Hook/UnixFileSystemHook.cpp create mode 100644 Bcore/src/main/cpp/Hook/UnixFileSystemHook.h create mode 100644 Bcore/src/main/cpp/Hook/VMClassLoaderHook.cpp create mode 100644 Bcore/src/main/cpp/Hook/VMClassLoaderHook.h create mode 100644 Bcore/src/main/cpp/IO.cpp create mode 100644 Bcore/src/main/cpp/IO.h create mode 100644 Bcore/src/main/cpp/JniHook/ArtMethod.h create mode 100644 Bcore/src/main/cpp/JniHook/JniHook.cpp create mode 100644 Bcore/src/main/cpp/JniHook/JniHook.h create mode 100644 Bcore/src/main/cpp/Log.h create mode 100644 Bcore/src/main/cpp/Utils/AntiDetection.cpp create mode 100644 Bcore/src/main/cpp/Utils/HexDump.cpp create mode 100644 Bcore/src/main/cpp/Utils/HexDump.h create mode 100644 Bcore/src/main/cpp/Utils/VirtualSpoof.cpp create mode 100644 Bcore/src/main/cpp/Utils/elf_util.cpp create mode 100644 Bcore/src/main/cpp/Utils/elf_util.h create mode 100644 Bcore/src/main/cpp/hidden_api.cpp create mode 100644 Bcore/src/main/cpp/hidden_api.h create mode 100644 Bcore/src/main/cpp/xdl.h create mode 100644 Bcore/src/main/cpp/xdl/xdl.c create mode 100644 Bcore/src/main/cpp/xdl/xdl.map.txt create mode 100644 Bcore/src/main/cpp/xdl/xdl_iterate.c create mode 100644 Bcore/src/main/cpp/xdl/xdl_iterate.h create mode 100644 Bcore/src/main/cpp/xdl/xdl_linker.c create mode 100644 Bcore/src/main/cpp/xdl/xdl_linker.h create mode 100644 Bcore/src/main/cpp/xdl/xdl_lzma.c create mode 100644 Bcore/src/main/cpp/xdl/xdl_lzma.h create mode 100644 Bcore/src/main/cpp/xdl/xdl_util.c create mode 100644 Bcore/src/main/cpp/xdl/xdl_util.h create mode 100644 Bcore/src/main/java/android/app/ActivityThread.java create mode 100644 Bcore/src/main/java/android/app/ContentProviderHolder.java create mode 100644 Bcore/src/main/java/android/content/IContentProvider.java create mode 100644 Bcore/src/main/java/android/content/SyncInfo.java create mode 100644 Bcore/src/main/java/android/content/SyncStatusInfo.java create mode 100644 Bcore/src/main/java/android/content/pm/ManifestDigest.java create mode 100644 Bcore/src/main/java/android/content/pm/PackageParser.java create mode 100644 Bcore/src/main/java/android/content/pm/PackageUserState.java create mode 100644 Bcore/src/main/java/android/content/pm/VerifierInfo.java create mode 100644 Bcore/src/main/java/android/location/LocationRequest.java create mode 100644 Bcore/src/main/java/android/os/ParcelableException.java create mode 100644 Bcore/src/main/java/android/os/SELinux.java create mode 100644 Bcore/src/main/java/android/os/ServiceManager.java create mode 100644 Bcore/src/main/java/black/android/accounts/IAccountManager.java create mode 100644 Bcore/src/main/java/black/android/app/Activity.java create mode 100644 Bcore/src/main/java/black/android/app/ActivityClient.java create mode 100644 Bcore/src/main/java/black/android/app/ActivityManager.java create mode 100644 Bcore/src/main/java/black/android/app/ActivityManagerNative.java create mode 100644 Bcore/src/main/java/black/android/app/ActivityManagerOreo.java create mode 100644 Bcore/src/main/java/black/android/app/ActivityTaskManager.java create mode 100644 Bcore/src/main/java/black/android/app/ActivityThread.java create mode 100644 Bcore/src/main/java/black/android/app/ActivityThreadNMR1.java create mode 100644 Bcore/src/main/java/black/android/app/ActivityThreadQ.java create mode 100644 Bcore/src/main/java/black/android/app/AlarmManager.java create mode 100644 Bcore/src/main/java/black/android/app/AppOpsManager.java create mode 100644 Bcore/src/main/java/black/android/app/ApplicationThreadNative.java create mode 100644 Bcore/src/main/java/black/android/app/ClientTransactionHandler.java create mode 100644 Bcore/src/main/java/black/android/app/ContextImpl.java create mode 100644 Bcore/src/main/java/black/android/app/ContextImplICS.java create mode 100644 Bcore/src/main/java/black/android/app/ContextImplKitkat.java create mode 100644 Bcore/src/main/java/black/android/app/IActivityManager.java create mode 100644 Bcore/src/main/java/black/android/app/IActivityManagerL.java create mode 100644 Bcore/src/main/java/black/android/app/IActivityManagerN.java create mode 100644 Bcore/src/main/java/black/android/app/IActivityTaskManager.java create mode 100644 Bcore/src/main/java/black/android/app/IAlarmManager.java create mode 100644 Bcore/src/main/java/black/android/app/IApplicationThread.java create mode 100644 Bcore/src/main/java/black/android/app/IApplicationThreadOreo.java create mode 100644 Bcore/src/main/java/black/android/app/ISearchManager.java create mode 100644 Bcore/src/main/java/black/android/app/IServiceConnectionO.java create mode 100644 Bcore/src/main/java/black/android/app/IUsageStatsManager.java create mode 100644 Bcore/src/main/java/black/android/app/IWallpaperManager.java create mode 100644 Bcore/src/main/java/black/android/app/Instrumentation.java create mode 100644 Bcore/src/main/java/black/android/app/LoadedApk.java create mode 100644 Bcore/src/main/java/black/android/app/LoadedApkHuaWei.java create mode 100644 Bcore/src/main/java/black/android/app/LoadedApkICS.java create mode 100644 Bcore/src/main/java/black/android/app/LoadedApkKitkat.java create mode 100644 Bcore/src/main/java/black/android/app/Notification.java create mode 100644 Bcore/src/main/java/black/android/app/NotificationChannel.java create mode 100644 Bcore/src/main/java/black/android/app/NotificationChannelGroup.java create mode 100644 Bcore/src/main/java/black/android/app/NotificationL.java create mode 100644 Bcore/src/main/java/black/android/app/NotificationM.java create mode 100644 Bcore/src/main/java/black/android/app/NotificationManager.java create mode 100644 Bcore/src/main/java/black/android/app/NotificationO.java create mode 100644 Bcore/src/main/java/black/android/app/PendingIntentJBMR2.java create mode 100644 Bcore/src/main/java/black/android/app/PendingIntentO.java create mode 100644 Bcore/src/main/java/black/android/app/Service.java create mode 100644 Bcore/src/main/java/black/android/app/ServiceStartArgs.java create mode 100644 Bcore/src/main/java/black/android/app/SharedPreferencesImpl.java create mode 100644 Bcore/src/main/java/black/android/app/WallpaperManager.java create mode 100644 Bcore/src/main/java/black/android/app/admin/IDevicePolicyManager.java create mode 100644 Bcore/src/main/java/black/android/app/backup/IBackupManager.java create mode 100644 Bcore/src/main/java/black/android/app/job/IJobScheduler.java create mode 100644 Bcore/src/main/java/black/android/app/job/JobInfo.java create mode 100644 Bcore/src/main/java/black/android/app/job/JobParameters.java create mode 100644 Bcore/src/main/java/black/android/app/job/JobWorkItem.java create mode 100644 Bcore/src/main/java/black/android/app/role/IRoleManager.java create mode 100644 Bcore/src/main/java/black/android/app/servertransaction/ActivityLifecycleItem.java create mode 100644 Bcore/src/main/java/black/android/app/servertransaction/ActivityResultItem.java create mode 100644 Bcore/src/main/java/black/android/app/servertransaction/ClientTransaction.java create mode 100644 Bcore/src/main/java/black/android/app/servertransaction/LaunchActivityItem.java create mode 100644 Bcore/src/main/java/black/android/app/servertransaction/TopResumedActivityChangeItem.java create mode 100644 Bcore/src/main/java/black/android/app/usage/IStorageStatsManager.java create mode 100644 Bcore/src/main/java/black/android/app/usage/StorageStats.java create mode 100644 Bcore/src/main/java/black/android/content/AttributionSource.java create mode 100644 Bcore/src/main/java/black/android/content/AttributionSourceState.java create mode 100644 Bcore/src/main/java/black/android/content/BroadcastReceiver.java create mode 100644 Bcore/src/main/java/black/android/content/ClipboardManager.java create mode 100644 Bcore/src/main/java/black/android/content/ClipboardManagerOreo.java create mode 100644 Bcore/src/main/java/black/android/content/ContentProviderClient.java create mode 100644 Bcore/src/main/java/black/android/content/ContentProviderClientQ.java create mode 100644 Bcore/src/main/java/black/android/content/ContentProviderHolderOreo.java create mode 100644 Bcore/src/main/java/black/android/content/ContentProviderNative.java create mode 100644 Bcore/src/main/java/black/android/content/ContentResolver.java create mode 100644 Bcore/src/main/java/black/android/content/IClipboard.java create mode 100644 Bcore/src/main/java/black/android/content/IContentProvider.java create mode 100644 Bcore/src/main/java/black/android/content/IContentService.java create mode 100644 Bcore/src/main/java/black/android/content/IIntentReceiver.java create mode 100644 Bcore/src/main/java/black/android/content/IRestrictionsManager.java create mode 100644 Bcore/src/main/java/black/android/content/IntentFilter.java create mode 100644 Bcore/src/main/java/black/android/content/IntentSender.java create mode 100644 Bcore/src/main/java/black/android/content/PeriodicSync.java create mode 100644 Bcore/src/main/java/black/android/content/SyncAdapterType.java create mode 100644 Bcore/src/main/java/black/android/content/SyncAdapterTypeN.java create mode 100644 Bcore/src/main/java/black/android/content/SyncInfo.java create mode 100644 Bcore/src/main/java/black/android/content/SyncRequest.java create mode 100644 Bcore/src/main/java/black/android/content/pm/ApplicationInfoL.java create mode 100644 Bcore/src/main/java/black/android/content/pm/ApplicationInfoN.java create mode 100644 Bcore/src/main/java/black/android/content/pm/ApplicationInfoP.java create mode 100644 Bcore/src/main/java/black/android/content/pm/ILauncherApps.java create mode 100644 Bcore/src/main/java/black/android/content/pm/IShortcutService.java create mode 100644 Bcore/src/main/java/black/android/content/pm/LauncherApps.java create mode 100644 Bcore/src/main/java/black/android/content/pm/PackageInstaller.java create mode 100644 Bcore/src/main/java/black/android/content/pm/PackageManager.java create mode 100644 Bcore/src/main/java/black/android/content/pm/PackageParser.java create mode 100644 Bcore/src/main/java/black/android/content/pm/PackageParserLollipop.java create mode 100644 Bcore/src/main/java/black/android/content/pm/PackageParserLollipop22.java create mode 100644 Bcore/src/main/java/black/android/content/pm/PackageParserMarshmallow.java create mode 100644 Bcore/src/main/java/black/android/content/pm/PackageParserNougat.java create mode 100644 Bcore/src/main/java/black/android/content/pm/PackageParserPie.java create mode 100644 Bcore/src/main/java/black/android/content/pm/PackageUserState.java create mode 100644 Bcore/src/main/java/black/android/content/pm/ParceledListSlice.java create mode 100644 Bcore/src/main/java/black/android/content/pm/SigningInfo.java create mode 100644 Bcore/src/main/java/black/android/content/pm/UserInfo.java create mode 100644 Bcore/src/main/java/black/android/content/res/AssetManager.java create mode 100644 Bcore/src/main/java/black/android/content/res/CompatibilityInfo.java create mode 100644 Bcore/src/main/java/black/android/ddm/DdmHandleAppName.java create mode 100644 Bcore/src/main/java/black/android/graphics/Compatibility.java create mode 100644 Bcore/src/main/java/black/android/hardware/display/DisplayManagerGlobal.java create mode 100644 Bcore/src/main/java/black/android/hardware/display/IDisplayManager.java create mode 100644 Bcore/src/main/java/black/android/hardware/location/IContextHubService.java create mode 100644 Bcore/src/main/java/black/android/location/GpsStatus.java create mode 100644 Bcore/src/main/java/black/android/location/GpsStatusL.java create mode 100644 Bcore/src/main/java/black/android/location/ILocationListener.java create mode 100644 Bcore/src/main/java/black/android/location/ILocationManager.java create mode 100644 Bcore/src/main/java/black/android/location/LocationManager.java create mode 100644 Bcore/src/main/java/black/android/location/LocationManagerQ.java create mode 100644 Bcore/src/main/java/black/android/location/LocationRequestL.java create mode 100644 Bcore/src/main/java/black/android/location/provider/ProviderProperties.java create mode 100644 Bcore/src/main/java/black/android/media/AudioManager.java create mode 100644 Bcore/src/main/java/black/android/media/IAudioService.java create mode 100644 Bcore/src/main/java/black/android/media/IMediaRouterService.java create mode 100644 Bcore/src/main/java/black/android/media/MediaRouter.java create mode 100644 Bcore/src/main/java/black/android/media/session/ISessionManager.java create mode 100644 Bcore/src/main/java/black/android/net/IConnectivityManager.java create mode 100644 Bcore/src/main/java/black/android/net/IVpnManager.java create mode 100644 Bcore/src/main/java/black/android/net/NetworkInfo.java create mode 100644 Bcore/src/main/java/black/android/net/wifi/IWifiManager.java create mode 100644 Bcore/src/main/java/black/android/net/wifi/WifiInfo.java create mode 100644 Bcore/src/main/java/black/android/net/wifi/WifiManager.java create mode 100644 Bcore/src/main/java/black/android/net/wifi/WifiScanner.java create mode 100644 Bcore/src/main/java/black/android/net/wifi/WifiSsid.java create mode 100644 Bcore/src/main/java/black/android/nfc/INfcAdapter.java create mode 100644 Bcore/src/main/java/black/android/os/BaseBundle.java create mode 100644 Bcore/src/main/java/black/android/os/Build.java create mode 100644 Bcore/src/main/java/black/android/os/Bundle.java create mode 100644 Bcore/src/main/java/black/android/os/BundleICS.java create mode 100644 Bcore/src/main/java/black/android/os/DropBoxManager.java create mode 100644 Bcore/src/main/java/black/android/os/Handler.java create mode 100644 Bcore/src/main/java/black/android/os/IDeviceIdentifiersPolicyService.java create mode 100644 Bcore/src/main/java/black/android/os/INetworkManagementService.java create mode 100644 Bcore/src/main/java/black/android/os/IPowerManager.java create mode 100644 Bcore/src/main/java/black/android/os/IUserManager.java create mode 100644 Bcore/src/main/java/black/android/os/IVibratorManagerService.java create mode 100644 Bcore/src/main/java/black/android/os/MemoryFile.java create mode 100644 Bcore/src/main/java/black/android/os/Message.java create mode 100644 Bcore/src/main/java/black/android/os/Parcel.java create mode 100644 Bcore/src/main/java/black/android/os/Process.java create mode 100644 Bcore/src/main/java/black/android/os/ServiceManager.java create mode 100644 Bcore/src/main/java/black/android/os/StrictMode.java create mode 100644 Bcore/src/main/java/black/android/os/UserHandle.java create mode 100644 Bcore/src/main/java/black/android/os/health/SystemHealthManager.java create mode 100644 Bcore/src/main/java/black/android/os/mount/IMountService.java create mode 100644 Bcore/src/main/java/black/android/os/storage/IStorageManager.java create mode 100644 Bcore/src/main/java/black/android/os/storage/StorageManager.java create mode 100644 Bcore/src/main/java/black/android/os/storage/StorageVolume.java create mode 100644 Bcore/src/main/java/black/android/permission/IPermissionManager.java create mode 100644 Bcore/src/main/java/black/android/providers/Settings.java create mode 100644 Bcore/src/main/java/black/android/renderscript/RenderScriptCacheDir.java create mode 100644 Bcore/src/main/java/black/android/rms/HwSysResImplP.java create mode 100644 Bcore/src/main/java/black/android/rms/resource/ReceiverResourceLP.java create mode 100644 Bcore/src/main/java/black/android/rms/resource/ReceiverResourceM.java create mode 100644 Bcore/src/main/java/black/android/rms/resource/ReceiverResourceN.java create mode 100644 Bcore/src/main/java/black/android/rms/resource/ReceiverResourceO.java create mode 100644 Bcore/src/main/java/black/android/security/net/config/NetworkSecurityConfigProvider.java create mode 100644 Bcore/src/main/java/black/android/service/notification/StatusBarNotification.java create mode 100644 Bcore/src/main/java/black/android/service/persistentdata/IPersistentDataBlockService.java create mode 100644 Bcore/src/main/java/black/android/telephony/CellIdentityCdma.java create mode 100644 Bcore/src/main/java/black/android/telephony/CellIdentityGsm.java create mode 100644 Bcore/src/main/java/black/android/telephony/CellInfoCdma.java create mode 100644 Bcore/src/main/java/black/android/telephony/CellInfoGsm.java create mode 100644 Bcore/src/main/java/black/android/telephony/CellSignalStrengthCdma.java create mode 100644 Bcore/src/main/java/black/android/telephony/CellSignalStrengthGsm.java create mode 100644 Bcore/src/main/java/black/android/telephony/NeighboringCellInfo.java create mode 100644 Bcore/src/main/java/black/android/telephony/SmsManager.java create mode 100644 Bcore/src/main/java/black/android/telephony/TelephonyManager.java create mode 100644 Bcore/src/main/java/black/android/util/Singleton.java create mode 100644 Bcore/src/main/java/black/android/view/CompatibilityInfoHolder.java create mode 100644 Bcore/src/main/java/black/android/view/Display.java create mode 100644 Bcore/src/main/java/black/android/view/DisplayAdjustments.java create mode 100644 Bcore/src/main/java/black/android/view/HardwareRenderer.java create mode 100644 Bcore/src/main/java/black/android/view/IAutoFillManager.java create mode 100644 Bcore/src/main/java/black/android/view/IGraphicsStats.java create mode 100644 Bcore/src/main/java/black/android/view/IWindowManager.java create mode 100644 Bcore/src/main/java/black/android/view/RenderScript.java create mode 100644 Bcore/src/main/java/black/android/view/SurfaceControl.java create mode 100644 Bcore/src/main/java/black/android/view/ThreadedRenderer.java create mode 100644 Bcore/src/main/java/black/android/view/WindowManagerGlobal.java create mode 100644 Bcore/src/main/java/black/android/view/accessibility/IAccessibilityManager.java create mode 100644 Bcore/src/main/java/black/android/webkit/IWebViewUpdateService.java create mode 100644 Bcore/src/main/java/black/android/webkit/WebViewFactory.java create mode 100644 Bcore/src/main/java/black/android/widget/RemoteViews.java create mode 100644 Bcore/src/main/java/black/android/widget/Toast.java create mode 100644 Bcore/src/main/java/black/com/android/internal/R.java create mode 100644 Bcore/src/main/java/black/com/android/internal/app/IAppOpsService.java create mode 100644 Bcore/src/main/java/black/com/android/internal/app/IBatteryStats.java create mode 100644 Bcore/src/main/java/black/com/android/internal/app/ISmtOpsService.java create mode 100644 Bcore/src/main/java/black/com/android/internal/appwidget/IAppWidgetService.java create mode 100644 Bcore/src/main/java/black/com/android/internal/content/NativeLibraryHelper.java create mode 100644 Bcore/src/main/java/black/com/android/internal/content/ReferrerIntent.java create mode 100644 Bcore/src/main/java/black/com/android/internal/net/VpnConfig.java create mode 100644 Bcore/src/main/java/black/com/android/internal/os/IDropBoxManagerService.java create mode 100644 Bcore/src/main/java/black/com/android/internal/os/IVibratorService.java create mode 100644 Bcore/src/main/java/black/com/android/internal/os/UserManager.java create mode 100644 Bcore/src/main/java/black/com/android/internal/policy/PhoneWindow.java create mode 100644 Bcore/src/main/java/black/com/android/internal/telecom/ITelecomService.java create mode 100644 Bcore/src/main/java/black/com/android/internal/telephony/IMms.java create mode 100644 Bcore/src/main/java/black/com/android/internal/telephony/IPhoneSubInfo.java create mode 100644 Bcore/src/main/java/black/com/android/internal/telephony/ISms.java create mode 100644 Bcore/src/main/java/black/com/android/internal/telephony/ISub.java create mode 100644 Bcore/src/main/java/black/com/android/internal/telephony/ITelephony.java create mode 100644 Bcore/src/main/java/black/com/android/internal/telephony/ITelephonyRegistry.java create mode 100644 Bcore/src/main/java/black/com/android/internal/telephony/PhoneConstantsMtk.java create mode 100644 Bcore/src/main/java/black/com/android/internal/view/IInputMethodManager.java create mode 100644 Bcore/src/main/java/black/com/android/internal/view/inputmethod/InputMethodManager.java create mode 100644 Bcore/src/main/java/black/dalvik/system/VMRuntime.java create mode 100644 Bcore/src/main/java/black/java/io/File.java create mode 100644 Bcore/src/main/java/black/java/io/FileSystem.java create mode 100644 Bcore/src/main/java/black/java/io/UnixFileSystem.java create mode 100644 Bcore/src/main/java/black/java/lang/ThreadGroup.java create mode 100644 Bcore/src/main/java/black/java/lang/ThreadGroupN.java create mode 100644 Bcore/src/main/java/black/libcore/io/ForwardingOs.java create mode 100644 Bcore/src/main/java/black/libcore/io/Libcore.java create mode 100644 Bcore/src/main/java/black/libcore/io/Os.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/BlackBoxCore.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/app/BActivityThread.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/app/LauncherActivity.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/app/configuration/AppLifecycleCallback.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/app/configuration/ClientConfiguration.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/app/dispatcher/AppJobServiceDispatcher.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/app/dispatcher/AppServiceDispatcher.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/closecode/Entry.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/CrashHandler.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/GmsCore.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/IOCore.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/NativeCore.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/env/AppSystemEnv.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/env/BEnvironment.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/env/VirtualRuntime.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/BProcessManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/BlackBoxSystem.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/DaemonService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/ISystemService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/JarConfig.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/JarManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/JarManagerTest.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/ProcessRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/ServiceManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/SystemCallProvider.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/accounts/BAccount.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/accounts/BAccountManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/accounts/BUserAccounts.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/accounts/RegisteredServicesParser.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/accounts/TokenCache.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/ActiveServices.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/ActivityRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/ActivityStack.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/BActivityManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/BJobManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/BroadcastManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/PendingIntentRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/TaskRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/UserSpace.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/location/BLocationManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/location/LocationRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/notification/BNotificationManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/notification/NotificationChannelManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/notification/NotificationRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/os/BStorageManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/permission/XiaomiPermissionManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackage.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageInstallerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageSettings.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageUserState.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BXposedManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/ComponentResolver.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/FastImmutableArraySet.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/IntentResolver.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/PackageManagerCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/PackageMonitor.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/Settings.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/SharedUserSetting.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/installer/CopyExecutor.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/installer/CreatePackageExecutor.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/installer/CreateUserExecutor.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/installer/Executor.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/installer/RemoveAppExecutor.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/installer/RemoveUserExecutor.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/user/BUserHandle.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/user/BUserInfo.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/user/BUserManagerService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/core/system/user/BUserStatus.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/AppConfig.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/JobRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/ServiceRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/UnbindRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/am/PendingResultData.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/am/ReceiverData.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/am/RunningAppProcessInfo.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/am/RunningServiceInfo.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/location/BCell.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/location/BLocation.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/location/BLocationConfig.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/pm/InstallOption.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/pm/InstallResult.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/pm/InstalledModule.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/pm/InstalledPackage.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/entity/pm/XposedConfig.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/FakeCore.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/delegate/AppInstrumentation.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/delegate/BaseInstrumentationDelegate.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/delegate/ContentProviderDelegate.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/delegate/InnerReceiverDelegate.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/delegate/ServiceConnectionDelegate.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BAccountManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BActivityManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BJobManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BLocationManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BNotificationManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BPackageManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BResourcesManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BStorageManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BUserManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BXposedManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/frameworks/BlackManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/hook/BinderInvocationStub.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/hook/ClassInvocationStub.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/hook/HookManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/hook/IInjectHook.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/hook/MethodHook.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/hook/ProxyMethod.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/hook/ProxyMethods.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/hook/ScanClass.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/provider/FileProvider.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/provider/FileProviderHandler.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ActivityManagerCommonProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/AndroidIdProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ApkAssetsProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/AudioPermissionProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/AudioRecordProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/AuthenticationProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ClassLoaderProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ContentResolverProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/DeviceIdProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/FeatureFlagUtilsProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/FileSystemProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/GmsProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/GoogleAccountManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/HCallbackProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IAccessibilityManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IAccountManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IActivityClientProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IActivityManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IActivityTaskManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IAlarmManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IAppOpsManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IAppWidgetManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IAttributionSourceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IAudioServiceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IAutofillManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IConnectivityManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IContentProviderProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IContextHubServiceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IDeviceIdentifiersPolicyProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IDevicePolicyManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IDisplayManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IDnsResolverProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IFingerprintManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IGraphicsStatsProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IJobServiceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ILauncherAppsProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ILocationManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IMediaRouterServiceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IMediaSessionManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IMiuiSecurityManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/INetworkManagementServiceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/INotificationManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IPackageManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IPermissionManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IPersistentDataBlockServiceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IPhoneSubInfoProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IPowerManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ISensorPrivacyManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ISettingsProviderProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ISettingsSystemProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IShortcutManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IStorageManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IStorageStatsManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ISystemSensorManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ISystemUpdateProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ITelephonyManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ITelephonyRegistryProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IUserManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IVibratorServiceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IVpnManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IWebViewUpdateServiceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IWifiManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IWifiScannerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IWindowManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IWindowSessionProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IXiaomiAttributionSourceProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IXiaomiMiuiServicesProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/IXiaomiSettingsProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/LevelDbProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/MediaRecorderClassProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/MediaRecorderProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ReLinkerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/ResourcesManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/SQLiteDatabaseProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/StubHelper.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/SystemLibraryProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/VpnCommonProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/WebViewFactoryProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/WebViewProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/WorkManagerProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/base/PkgMethodProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/base/UidMethodProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/base/ValueMethodProxy.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/context/ContentServiceStub.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/context/RestrictionsManagerStub.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/context/providers/BContentProvider.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/context/providers/ContentProviderStub.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/context/providers/SystemProviderStub.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/fake/service/libcore/OsStub.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/ProxyActivity.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/ProxyBroadcastReceiver.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/ProxyContentProvider.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/ProxyJobService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/ProxyManifest.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/ProxyPendingActivity.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/ProxyService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/ProxyVpnService.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/TransparentProxyActivity.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/record/ProxyActivityRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/record/ProxyBroadcastRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/record/ProxyPendingRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/proxy/record/ProxyServiceRecord.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/util/XiaomiDeviceDetector.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/AbiUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/ArrayUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/AttributionSourceUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/CloseUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/ComponentUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/ContextWrapperHook.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/CrashMonitor.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/DexCrashPrevention.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/DexFileRecovery.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/DrawableUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/FileUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/GlobalContextWrapper.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/HackAppUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/JarUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/Md5Utils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/MethodParameterUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/NativeCrashPrevention.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/NativeUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/QQUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/ReflectionClass.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/Reflector.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/SafeContextWrapper.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/ShellUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/SimpleCrashFix.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/Slog.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/SocialMediaAppCrashPrevention.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/StackTraceFilter.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/SystemHookManager.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/TransactionThrottler.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/TrieTree.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/UIDSpoofingHelper.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/XposedErrorLogger.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/AccountManagerCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/ActivityCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/ActivityManagerCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/ApplicationThreadCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/BuildCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/BundleCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/ContentProviderCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/ContextCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/DexFileCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/PackageParserCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/ParceledListSliceCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/StartActivityCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/StrictModeCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/SystemPropertiesCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/TaskDescriptionCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/compat/XposedParserCompat.java create mode 100644 Bcore/src/main/java/top/niunaijun/blackbox/utils/provider/ProviderCall.java create mode 100644 Bcore/src/main/java/top/niunaijun/jnihook/MethodUtils.java create mode 100644 Bcore/src/main/java/top/niunaijun/jnihook/ReflectCore.java create mode 100644 Bcore/src/main/java/top/niunaijun/jnihook/jni/JniHook.java create mode 100644 Bcore/src/main/res/drawable/ic_launcher.png create mode 100644 Bcore/src/main/res/layout/activity_launcher.xml create mode 100644 Bcore/src/main/res/values/strings.xml create mode 100644 Bcore/src/main/res/values/styles.xml create mode 100644 Bcore/src/main/res/xml/filepath.xml delete mode 100644 app/libs/Bcore-release.aar create mode 100644 app/src/main/java/top/niunaijun/blackboxa/util/MemoryManager.kt diff --git a/Bcore/.gitignore b/Bcore/.gitignore new file mode 100644 index 0000000..a2c8302 --- /dev/null +++ b/Bcore/.gitignore @@ -0,0 +1,88 @@ +@@ -0,0 +1,84 @@ +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +# Uncomment the following line in case you need and you don't have the release build type files in your app +# release/ + +# Gradle files +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/ + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild +.cxx/ + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +# mac +*.DS_Store \ No newline at end of file diff --git a/Bcore/build.gradle b/Bcore/build.gradle new file mode 100644 index 0000000..41b817a --- /dev/null +++ b/Bcore/build.gradle @@ -0,0 +1,107 @@ +apply plugin: 'com.android.library' + +android { + namespace 'top.niunaijun.blackbox' + + compileSdk rootProject.ext.compileSdkVersion + + + aidlPackagedList "android/app/IServiceConnection.aidl" + aidlPackagedList "android/accounts/IAccountManagerResponse.aidl" + buildFeatures { + aidl true + } + buildFeatures { + prefab true + } + defaultConfig { + minSdkVersion rootProject.ext.minSdk + versionCode rootProject.ext.versionCode + versionName rootProject.ext.versionName + + consumerProguardFiles "consumer-rules.pro" + ndk { + // 设置支持的SO库架构 + abiFilters 'arm64-v8a' , 'armeabi-v7a' + } + } + + buildTypes { + release { + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + externalNativeBuild { + ndkBuild { + path 'src/main/cpp/Android.mk' + } + ndkVersion = "29.0.13846066" + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + + // Enable incremental annotation processing for faster builds + tasks.withType(JavaCompile) { + options.compilerArgs << "-Xlint:-deprecation" << "-Xlint:-unchecked" << "-Xlint:-rawtypes" + options.fork = true + options.forkOptions.jvmArgs << "-Xmx2048m" + } + testOptions { + unitTests.returnDefaultValues = true + } + packagingOptions { + jniLibs { + useLegacyPackaging true + } + } + lintOptions { + + checkReleaseBuilds false + abortOnError false + warningsAsErrors false + disable "UnusedResources", 'RestrictedApi' + textOutput "stdout" + textReport false + checkOnly 'NewApi', 'InlinedApi' + } +} + + +tasks.withType(Javadoc) { + options.addStringOption('Xdoclint:none', '-quiet') + options.addStringOption('encoding', 'UTF-8') + options.addStringOption('charSet', 'UTF-8') +} + + +dependencies { + implementation 'com.google.android.material:material:1.3.0' + implementation "com.github.CodingGay.BlackReflection:core:$rootProject.ext.blackReflection" + annotationProcessor "com.github.CodingGay.BlackReflection:compiler:$rootProject.ext.blackReflection" + + /* // Configure annotation processors to be incremental + annotationProcessor { + arguments { + // Enable incremental processing + arg("incremental", "true") + // Set source version compatibility + arg("sourceVersion", "17") + } + }*/ + + implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"]) + implementation 'androidx.appcompat:appcompat:1.2.0' + + implementation 'com.moandjiezana.toml:toml4j:0.7.2' + + implementation 'com.github.tiann:FreeReflection:3.2.2' + implementation "com.github.CodingGay.BlackReflection:core:$rootProject.ext.blackReflection" + + + // Pine dependency removed +} diff --git a/Bcore/consumer-rules.pro b/Bcore/consumer-rules.pro new file mode 100644 index 0000000..0d7cb9b --- /dev/null +++ b/Bcore/consumer-rules.pro @@ -0,0 +1,28 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +-keep class top.niunaijun.blackbox.** {*; } +-keep class top.niunaijun.jnihook.** {*; } +-keep class mirror.** {*; } +-keep class android.** {*; } +-keep class com.android.** {*; } + diff --git a/Bcore/proguard-rules.pro b/Bcore/proguard-rules.pro new file mode 100644 index 0000000..f4e5465 --- /dev/null +++ b/Bcore/proguard-rules.pro @@ -0,0 +1,44 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +-keep class top.niunaijun.blackbox.** {*; } +-keep class top.niunaijun.jnihook.** {*; } +-keep class mirror.** {*; } +-keep class android.** {*; } +-keep class com.android.** {*; } + +-keep class top.niunaijun.blackreflection.** {*; } +-keep @top.niunaijun.blackreflection.annotation.BClass class * {*;} +-keep @top.niunaijun.blackreflection.annotation.BClassName class * {*;} +-keep @top.niunaijun.blackreflection.annotation.BClassNameNotProcess class * {*;} +-keepclasseswithmembernames class * { + @top.niunaijun.blackreflection.annotation.BField.* ; + @top.niunaijun.blackreflection.annotation.BFieldNotProcess.* ; + @top.niunaijun.blackreflection.annotation.BFieldSetNotProcess.* ; + @top.niunaijun.blackreflection.annotation.BFieldCheckNotProcess.* ; + @top.niunaijun.blackreflection.annotation.BMethod.* ; + @top.niunaijun.blackreflection.annotation.BStaticField.* ; + @top.niunaijun.blackreflection.annotation.BStaticMethod.* ; + @top.niunaijun.blackreflection.annotation.BMethodCheckNotProcess.* ; + @top.niunaijun.blackreflection.annotation.BConstructor.* ; + @top.niunaijun.blackreflection.annotation.BConstructorNotProcess.* ; +} \ No newline at end of file diff --git a/Bcore/src/main/AndroidManifest.xml b/Bcore/src/main/AndroidManifest.xml new file mode 100644 index 0000000..d2fcb02 --- /dev/null +++ b/Bcore/src/main/AndroidManifest.xml @@ -0,0 +1,2369 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Bcore/src/main/aidl/android/accounts/IAccountAuthenticator.aidl b/Bcore/src/main/aidl/android/accounts/IAccountAuthenticator.aidl new file mode 100644 index 0000000..fe5c9ea --- /dev/null +++ b/Bcore/src/main/aidl/android/accounts/IAccountAuthenticator.aidl @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.accounts; + +import android.accounts.IAccountAuthenticatorResponse; +import android.accounts.Account; +import android.os.Bundle; + +/** + * Service that allows the interaction with an authentication server. + * @hide + */ +interface IAccountAuthenticator { + /** + * prompts the user for account information and adds the result to the IAccountManager + */ + void addAccount(in IAccountAuthenticatorResponse response, String accountType, + String authTokenType, in String[] requiredFeatures, in Bundle options); + + /** + * prompts the user for the credentials of the account + */ + void confirmCredentials(in IAccountAuthenticatorResponse response, in Account account, + in Bundle options); + + /** + * gets the password by either prompting the user or querying the IAccountManager + */ + void getAuthToken(in IAccountAuthenticatorResponse response, in Account account, + String authTokenType, in Bundle options); + + /** + * Gets the user-visible label of the given authtoken type. + */ + void getAuthTokenLabel(in IAccountAuthenticatorResponse response, String authTokenType); + + /** + * prompts the user for a new password and writes it to the IAccountManager + */ + void updateCredentials(in IAccountAuthenticatorResponse response, in Account account, + String authTokenType, in Bundle options); + + /** + * launches an activity that lets the user edit and set the properties for an authenticator + */ + void editProperties(in IAccountAuthenticatorResponse response, String accountType); + + /** + * returns a Bundle where the boolean value BOOLEAN_RESULT_KEY is set if the account has the + * specified features + */ + void hasFeatures(in IAccountAuthenticatorResponse response, in Account account, + in String[] features); + + /** + * Gets whether or not the account is allowed to be removed. + */ + void getAccountRemovalAllowed(in IAccountAuthenticatorResponse response, in Account account); + + /** + * Returns a Bundle containing the required credentials to copy the account across users. + */ + void getAccountCredentialsForCloning(in IAccountAuthenticatorResponse response, + in Account account); + + /** + * Uses the Bundle containing credentials from another instance of the authenticator to create + * a copy of the account on this user. + */ + void addAccountFromCredentials(in IAccountAuthenticatorResponse response, in Account account, + in Bundle accountCredentials); +} diff --git a/Bcore/src/main/aidl/android/accounts/IAccountAuthenticatorResponse.aidl b/Bcore/src/main/aidl/android/accounts/IAccountAuthenticatorResponse.aidl new file mode 100644 index 0000000..5218bd7 --- /dev/null +++ b/Bcore/src/main/aidl/android/accounts/IAccountAuthenticatorResponse.aidl @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.accounts; +import android.os.Bundle; + +/** + * The interface used to return responses from an {@link IAccountAuthenticator} + */ +interface IAccountAuthenticatorResponse { + void onResult(in Bundle value); + void onRequestContinued(); + void onError(int errorCode, String errorMessage); +} diff --git a/Bcore/src/main/aidl/android/accounts/IAccountManagerResponse.aidl b/Bcore/src/main/aidl/android/accounts/IAccountManagerResponse.aidl new file mode 100644 index 0000000..ed33d90 --- /dev/null +++ b/Bcore/src/main/aidl/android/accounts/IAccountManagerResponse.aidl @@ -0,0 +1,11 @@ +package android.accounts; + +import android.os.Bundle; + +/** + * The interface used to return responses for asynchronous calls to the {@link IAccountManager} + */ +interface IAccountManagerResponse { + void onResult(in Bundle value); + void onError(int errorCode, String errorMessage); +} diff --git a/Bcore/src/main/aidl/android/app/IActivityManager/ContentProviderHolder.aidl b/Bcore/src/main/aidl/android/app/IActivityManager/ContentProviderHolder.aidl new file mode 100644 index 0000000..8643b69 --- /dev/null +++ b/Bcore/src/main/aidl/android/app/IActivityManager/ContentProviderHolder.aidl @@ -0,0 +1,4 @@ +// ContentProviderHolder.aidl +package android.app.IActivityManager; + +parcelable ContentProviderHolder; \ No newline at end of file diff --git a/Bcore/src/main/aidl/android/app/IServiceConnection.aidl b/Bcore/src/main/aidl/android/app/IServiceConnection.aidl new file mode 100644 index 0000000..e312ecb --- /dev/null +++ b/Bcore/src/main/aidl/android/app/IServiceConnection.aidl @@ -0,0 +1,26 @@ +/* //device/java/android/android/app/IServiceConnection.aidl +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.app; + +import android.content.ComponentName; + +/** @hide */ +interface IServiceConnection { + void connected(in ComponentName name, IBinder service); +} + diff --git a/Bcore/src/main/aidl/android/app/IStopUserCallback.aidl b/Bcore/src/main/aidl/android/app/IStopUserCallback.aidl new file mode 100644 index 0000000..19ac1d5 --- /dev/null +++ b/Bcore/src/main/aidl/android/app/IStopUserCallback.aidl @@ -0,0 +1,27 @@ +/* +** Copyright 2012, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.app; + +/** + * Callback to find out when we have finished stopping a user. + * {@hide} + */ +interface IStopUserCallback +{ + void userStopped(int userId); + void userStopAborted(int userId); +} diff --git a/Bcore/src/main/aidl/android/app/IWallpaperManagerCallback.aidl b/Bcore/src/main/aidl/android/app/IWallpaperManagerCallback.aidl new file mode 100644 index 0000000..9bc1943 --- /dev/null +++ b/Bcore/src/main/aidl/android/app/IWallpaperManagerCallback.aidl @@ -0,0 +1,24 @@ +/* //device/java/android/android/app/IServiceConnection.aidl +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.app; + +/** @hide */ +interface IWallpaperManagerCallback { + void onWallpaperChanged(); +} + diff --git a/Bcore/src/main/aidl/android/app/job/IJobCallback.aidl b/Bcore/src/main/aidl/android/app/job/IJobCallback.aidl new file mode 100644 index 0000000..e567268 --- /dev/null +++ b/Bcore/src/main/aidl/android/app/job/IJobCallback.aidl @@ -0,0 +1,62 @@ +/** + * Copyright 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app.job; + +import android.app.job.JobWorkItem; + +/** + * The server side of the JobScheduler IPC protocols. The app-side implementation + * invokes on this interface to indicate completion of the (asynchronous) instructions + * issued by the server. + * + * In all cases, the 'who' parameter is the caller's service binder, used to track + * which Job Service instance is reporting. + * + */ +interface IJobCallback { + /** + * Immediate callback to the system after sending a start signal, used to quickly detect ANR. + * + * @param jobId Unique integer used to identify this job. + * @param ongoing True to indicate that the client is processing the job. False if the job is + * complete + */ + void acknowledgeStartMessage(int jobId, boolean ongoing); + /** + * Immediate callback to the system after sending a stop signal, used to quickly detect ANR. + * + * @param jobId Unique integer used to identify this job. + * @param reschedule Whether or not to reschedule this job. + */ + void acknowledgeStopMessage(int jobId, boolean reschedule); + /* + * Called to deqeue next work item for the job. + */ + JobWorkItem dequeueWork(int jobId); + /* + * Called to report that job has completed processing a work item. + */ + boolean completeWork(int jobId, int workId); + /* + * Tell the job manager that the client is done with its execution, so that it can go on to + * the next one and stop attributing wakelock time to us etc. + * + * @param jobId Unique integer used to identify this job. + * @param reschedule Whether or not to reschedule this job. + */ + void jobFinished(int jobId, boolean reschedule); +} diff --git a/Bcore/src/main/aidl/android/app/job/IJobService.aidl b/Bcore/src/main/aidl/android/app/job/IJobService.aidl new file mode 100644 index 0000000..7992da3 --- /dev/null +++ b/Bcore/src/main/aidl/android/app/job/IJobService.aidl @@ -0,0 +1,15 @@ +package android.app.job; + +import android.app.job.JobParameters; + +/** + * Interface that the framework uses to communicate with application code that implements a + * JobService. End user code does not implement this interface directly; instead, the app's + * service implementation will extend android.app.job.JobService. + */ +interface IJobService { + /** Begin execution of application's job. */ + void startJob(in JobParameters jobParams); + /** Stop execution of application's job. */ + void stopJob(in JobParameters jobParams); +} diff --git a/Bcore/src/main/aidl/android/app/job/JobWorkItem.aidl b/Bcore/src/main/aidl/android/app/job/JobWorkItem.aidl new file mode 100644 index 0000000..4634ec2 --- /dev/null +++ b/Bcore/src/main/aidl/android/app/job/JobWorkItem.aidl @@ -0,0 +1,4 @@ +// JobWorkItem.aidl +package android.app.job; + +parcelable JobWorkItem; diff --git a/Bcore/src/main/aidl/android/content/IIntentReceiver.aidl b/Bcore/src/main/aidl/android/content/IIntentReceiver.aidl new file mode 100644 index 0000000..40d9303 --- /dev/null +++ b/Bcore/src/main/aidl/android/content/IIntentReceiver.aidl @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content; + +import android.content.Intent; +import android.os.Bundle; + +/** + * System private API for dispatching intent broadcasts. This is given to the + * activity manager as part of registering for an intent broadcasts, and is + * called when it receives intents. + * + */ +interface IIntentReceiver { + void performReceive(in Intent intent, int resultCode, String data, + in Bundle extras, boolean ordered, boolean sticky, int sendingUser); +} + diff --git a/Bcore/src/main/aidl/android/content/ISyncAdapter.aidl b/Bcore/src/main/aidl/android/content/ISyncAdapter.aidl new file mode 100644 index 0000000..2325fff --- /dev/null +++ b/Bcore/src/main/aidl/android/content/ISyncAdapter.aidl @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content; + +import android.accounts.Account; +import android.os.Bundle; +import android.content.ISyncContext; + +/** + * Interface used to control the sync activity on a SyncAdapter + */ +interface ISyncAdapter { + /** + * Initiate a sync for this account. SyncAdapter-specific parameters may + * be specified in extras, which is guaranteed to not be null. + * + * @param syncContext the ISyncContext used to indicate the progress of the sync. When + * the sync is finished (successfully or not) ISyncContext.onFinished() must be called. + * @param authority the authority that should be synced + * @param account the account that should be synced + * @param extras SyncAdapter-specific parameters + */ + void startSync(ISyncContext syncContext, String authority, + in Account account, in Bundle extras); + + /** + * Cancel the most recently initiated sync. Due to race conditions, this may arrive + * after the ISyncContext.onFinished() for that sync was called. + * @param syncContext the ISyncContext that was passed to {@link #startSync} + */ + void cancelSync(ISyncContext syncContext); + + /** + * Initialize the SyncAdapter for this account and authority. + * + * @param account the account that should be synced + * @param authority the authority that should be synced + */ + void initialize(in Account account, String authority); +} diff --git a/Bcore/src/main/aidl/android/content/ISyncContext.aidl b/Bcore/src/main/aidl/android/content/ISyncContext.aidl new file mode 100644 index 0000000..6d18a1c --- /dev/null +++ b/Bcore/src/main/aidl/android/content/ISyncContext.aidl @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content; + +import android.content.SyncResult; + +/** + * Interface used by the SyncAdapter to indicate its progress. + * @hide + */ +interface ISyncContext { + /** + * Call to indicate that the SyncAdapter is making progress. E.g., if this SyncAdapter + * downloads or sends records to/from the server, this may be called after each record + * is downloaded or uploaded. + */ + void sendHeartbeat(); + + /** + * Signal that the corresponding sync session is completed. + * @param result information about this sync session + */ + void onFinished(in SyncResult result); +} diff --git a/Bcore/src/main/aidl/android/content/ISyncStatusObserver.aidl b/Bcore/src/main/aidl/android/content/ISyncStatusObserver.aidl new file mode 100644 index 0000000..88ea23a --- /dev/null +++ b/Bcore/src/main/aidl/android/content/ISyncStatusObserver.aidl @@ -0,0 +1,6 @@ +package android.content; + + +interface ISyncStatusObserver { + void onStatusChanged(int which); +} diff --git a/Bcore/src/main/aidl/android/content/SyncStatusInfo.aidl b/Bcore/src/main/aidl/android/content/SyncStatusInfo.aidl new file mode 100644 index 0000000..fe0293c --- /dev/null +++ b/Bcore/src/main/aidl/android/content/SyncStatusInfo.aidl @@ -0,0 +1,3 @@ +package android.content; + +parcelable SyncStatusInfo; \ No newline at end of file diff --git a/Bcore/src/main/aidl/android/content/pm/IPackageDataObserver.aidl b/Bcore/src/main/aidl/android/content/pm/IPackageDataObserver.aidl new file mode 100644 index 0000000..118ba5a --- /dev/null +++ b/Bcore/src/main/aidl/android/content/pm/IPackageDataObserver.aidl @@ -0,0 +1,10 @@ +package android.content.pm; + +/** + * API for package data change related callbacks from the Package Manager. + * Some usage scenarios include deletion of cache directory, generate + * statistics related to code, data, cache usage(TODO) + */ +interface IPackageDataObserver { + void onRemoveCompleted(in String packageName, boolean succeeded); +} diff --git a/Bcore/src/main/aidl/android/content/pm/IPackageDeleteObserver2.aidl b/Bcore/src/main/aidl/android/content/pm/IPackageDeleteObserver2.aidl new file mode 100644 index 0000000..8ab0c5c --- /dev/null +++ b/Bcore/src/main/aidl/android/content/pm/IPackageDeleteObserver2.aidl @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.pm; + +import android.content.Intent; + +interface IPackageDeleteObserver2 { + void onUserActionRequired(in Intent intent); + void onPackageDeleted(String packageName, int returnCode, String msg); +} diff --git a/Bcore/src/main/aidl/android/content/pm/IPackageInstallObserver.aidl b/Bcore/src/main/aidl/android/content/pm/IPackageInstallObserver.aidl new file mode 100644 index 0000000..4ec7d4b --- /dev/null +++ b/Bcore/src/main/aidl/android/content/pm/IPackageInstallObserver.aidl @@ -0,0 +1,9 @@ +package android.content.pm; + +/** + * API for installation callbacks from the Package Manager. + */ +interface IPackageInstallObserver { + void packageInstalled(in String packageName, int returnCode); +} + diff --git a/Bcore/src/main/aidl/android/content/pm/IPackageInstallObserver2.aidl b/Bcore/src/main/aidl/android/content/pm/IPackageInstallObserver2.aidl new file mode 100644 index 0000000..6894622 --- /dev/null +++ b/Bcore/src/main/aidl/android/content/pm/IPackageInstallObserver2.aidl @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.pm; + +import android.content.Intent; +import android.os.Bundle; + +/** + * API for installation callbacks from the Package Manager. In certain result cases + * additional information will be provided. + */ +interface IPackageInstallObserver2 { + void onUserActionRequired(in Intent intent); + + /** + * The install operation has completed. {@code returnCode} holds a numeric code + * indicating success or failure. In certain cases the {@code extras} Bundle will + * contain additional details: + * + *

+ * + * + * + * + *
INSTALL_FAILED_DUPLICATE_PERMISSIONTwo strings are provided in the extras bundle: EXTRA_EXISTING_PERMISSION + * is the name of the permission that the app is attempting to define, and + * EXTRA_EXISTING_PACKAGE is the package name of the app which has already + * defined the permission.
+ */ + void onPackageInstalled(String basePackageName, int returnCode, String msg, in Bundle extras); +} diff --git a/Bcore/src/main/aidl/android/content/pm/IPackageInstallerCallback.aidl b/Bcore/src/main/aidl/android/content/pm/IPackageInstallerCallback.aidl new file mode 100644 index 0000000..14b0d36 --- /dev/null +++ b/Bcore/src/main/aidl/android/content/pm/IPackageInstallerCallback.aidl @@ -0,0 +1,9 @@ +package android.content.pm; + +interface IPackageInstallerCallback { + void onSessionCreated(int sessionId); + void onSessionBadgingChanged(int sessionId); + void onSessionActiveChanged(int sessionId, boolean active); + void onSessionProgressChanged(int sessionId, float progress); + void onSessionFinished(int sessionId, boolean success); +} diff --git a/Bcore/src/main/aidl/android/content/pm/IPackageInstallerSession.aidl b/Bcore/src/main/aidl/android/content/pm/IPackageInstallerSession.aidl new file mode 100644 index 0000000..c2c70fe --- /dev/null +++ b/Bcore/src/main/aidl/android/content/pm/IPackageInstallerSession.aidl @@ -0,0 +1,20 @@ +package android.content.pm; + +import android.content.pm.IPackageInstallObserver2; +import android.content.IntentSender; +import android.os.ParcelFileDescriptor; + +interface IPackageInstallerSession { + void setClientProgress(float progress); + void addClientProgress(float progress); + + String[] getNames(); + ParcelFileDescriptor openWrite(String name, long offsetBytes, long lengthBytes); + ParcelFileDescriptor openRead(String name); + + void removeSplit(String splitName); + + void close(); + void commit(in IntentSender statusReceiver); + void abandon(); +} diff --git a/Bcore/src/main/aidl/android/database/IContentObserver.aidl b/Bcore/src/main/aidl/android/database/IContentObserver.aidl new file mode 100644 index 0000000..e395dc7 --- /dev/null +++ b/Bcore/src/main/aidl/android/database/IContentObserver.aidl @@ -0,0 +1,13 @@ +package android.database; + +import android.net.Uri; + +interface IContentObserver +{ + /** + * This method is called when an update occurs to the cursor that is being + * observed. selfUpdate is true if the update was caused by a call to + * commit on the cursor that is being observed. + */ + void onChange(boolean selfUpdate, in Uri uri, int userId); +} diff --git a/Bcore/src/main/aidl/android/location/ILocationListener.aidl b/Bcore/src/main/aidl/android/location/ILocationListener.aidl new file mode 100644 index 0000000..1571ae2 --- /dev/null +++ b/Bcore/src/main/aidl/android/location/ILocationListener.aidl @@ -0,0 +1,13 @@ +// ILocationListener.aidl +package android.location; + +import android.location.Location; +import android.os.Bundle; + +interface ILocationListener +{ + void onLocationChanged(in Location location); + void onStatusChanged(String provider, int status, in Bundle extras); + void onProviderEnabled(String provider); + void onProviderDisabled(String provider); +} \ No newline at end of file diff --git a/Bcore/src/main/aidl/android/net/IConnectivityManager.aidl b/Bcore/src/main/aidl/android/net/IConnectivityManager.aidl new file mode 100644 index 0000000..b60a420 --- /dev/null +++ b/Bcore/src/main/aidl/android/net/IConnectivityManager.aidl @@ -0,0 +1,16 @@ +package android.net; + +import android.net.NetworkInfo; +import android.net.LinkProperties; + +interface IConnectivityManager { +NetworkInfo getActiveNetworkInfo(); + NetworkInfo getActiveNetworkInfoForUid(int uid, boolean ignoreBlocked); + + NetworkInfo getNetworkInfo(int networkType); + NetworkInfo[] getAllNetworkInfo(); + boolean isActiveNetworkMetered(); + boolean requestRouteToHostAddress(int networkType, int address); + LinkProperties getActiveLinkProperties(); + LinkProperties getLinkProperties(int networkType); +} \ No newline at end of file diff --git a/Bcore/src/main/aidl/android/net/wifi/IWifiScanner.aidl b/Bcore/src/main/aidl/android/net/wifi/IWifiScanner.aidl new file mode 100644 index 0000000..3e71a5f --- /dev/null +++ b/Bcore/src/main/aidl/android/net/wifi/IWifiScanner.aidl @@ -0,0 +1,11 @@ +package android.net.wifi; + +import android.os.Messenger; +import android.os.Bundle; + +interface IWifiScanner +{ + Messenger getMessenger(); + + Bundle getAvailableChannels(int band); +} diff --git a/Bcore/src/main/aidl/android/os/ISystemUpdateManager.aidl b/Bcore/src/main/aidl/android/os/ISystemUpdateManager.aidl new file mode 100644 index 0000000..cfce210 --- /dev/null +++ b/Bcore/src/main/aidl/android/os/ISystemUpdateManager.aidl @@ -0,0 +1,9 @@ +package android.os; + +import android.os.Bundle; +import android.os.PersistableBundle; + +interface ISystemUpdateManager { + Bundle retrieveSystemUpdateInfo(); + void updateSystemUpdateInfo(in PersistableBundle data); +} \ No newline at end of file diff --git a/Bcore/src/main/aidl/com/android/internal/widget/ILockSettings.aidl b/Bcore/src/main/aidl/com/android/internal/widget/ILockSettings.aidl new file mode 100644 index 0000000..7c725f8 --- /dev/null +++ b/Bcore/src/main/aidl/com/android/internal/widget/ILockSettings.aidl @@ -0,0 +1,6 @@ +package com.android.internal.widget; + +interface ILockSettings { + void setRecoverySecretTypes(in int[] secretTypes); + int[] getRecoverySecretTypes(); +} \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/IBActivityThread.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/IBActivityThread.aidl new file mode 100644 index 0000000..8e9530d --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/IBActivityThread.aidl @@ -0,0 +1,27 @@ +// IBActivityThread.aidl +package top.niunaijun.blackbox.core; + +// Declare any non-default types here with import statements + +import android.os.IBinder; +import android.content.ComponentName; +import android.content.Intent; +import java.util.List; +import android.content.pm.ResolveInfo; +import android.content.pm.ActivityInfo; +import top.niunaijun.blackbox.entity.am.ReceiverData; + +interface IBActivityThread { + IBinder getActivityThread(); + void bindApplication(); + void restartJobService(String selfId); + IBinder acquireContentProviderClient(in ProviderInfo providerInfo); + + IBinder peekService(in Intent intent); + void stopService(in Intent componentName); + + void finishActivity(IBinder token); + void handleNewIntent(IBinder token, in Intent intent); + + void scheduleReceiver(in ReceiverData data); +} diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/IEmpty.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/IEmpty.aidl new file mode 100644 index 0000000..9103cc0 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/IEmpty.aidl @@ -0,0 +1,8 @@ +// IBActivityThread.aidl +package top.niunaijun.blackbox.core; + +// Declare any non-default types here with import statements + +interface IEmpty { + +} diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/accounts/IBAccountManagerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/accounts/IBAccountManagerService.aidl new file mode 100644 index 0000000..f2f577a --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/accounts/IBAccountManagerService.aidl @@ -0,0 +1,77 @@ +package top.niunaijun.blackbox.core.system.accounts; + +import android.accounts.IAccountManagerResponse; +import android.accounts.Account; +import android.accounts.AuthenticatorDescription; +import android.content.IntentSender; +import android.os.Bundle; +import android.os.RemoteCallback; +import android.os.UserHandle; + +import java.util.Map; + + +interface IBAccountManagerService { + String getPassword(in Account account, int userId); + String getUserData(in Account account, String key, int userId); + AuthenticatorDescription[] getAuthenticatorTypes(int userId); + Account[] getAccountsForPackage(String packageName, int uid, int userId); + Account[] getAccountsByTypeForPackage(String type, String packageName, int userId); + Account[] getAccountsAsUser(String accountType, int userId); + void getAccountByTypeAndFeatures(in IAccountManagerResponse response, String accountType, + in String[] features, int userId); + void getAccountsByFeatures(in IAccountManagerResponse response, String accountType, + in String[] features, int userId); + boolean addAccountExplicitly(in Account account, String password, in Bundle extras, int userId); + void removeAccountAsUser(in IAccountManagerResponse response, in Account account, + boolean expectActivityLaunch, int userId); + boolean removeAccountExplicitly(in Account account, int userId); + void copyAccountToUser(in IAccountManagerResponse response, in Account account, + int userFrom, int userTo); + void invalidateAuthToken(String accountType, String authToken, int userId); + String peekAuthToken(in Account account, String authTokenType, int userId); + void setAuthToken(in Account account, String authTokenType, String authToken, int userId); + void setPassword(in Account account, String password, int userId); + void clearPassword(in Account account, int userId); + void setUserData(in Account account, String key, String value, int userId); + void updateAppPermission(in Account account, String authTokenType, int uid, boolean value); + + void getAuthToken(in IAccountManagerResponse response, in Account account, + String authTokenType, boolean notifyOnAuthFailure, boolean expectActivityLaunch, + in Bundle options, int userId); + void addAccount(in IAccountManagerResponse response, String accountType, + String authTokenType, in String[] requiredFeatures, boolean expectActivityLaunch, + in Bundle options, int userId); + void addAccountAsUser(in IAccountManagerResponse response, String accountType, + String authTokenType, in String[] requiredFeatures, boolean expectActivityLaunch, + in Bundle options, int userId); + void updateCredentials(in IAccountManagerResponse response, in Account account, + String authTokenType, boolean expectActivityLaunch, in Bundle options, int userId); + void editProperties(in IAccountManagerResponse response, String accountType, + boolean expectActivityLaunch, int userId); + void confirmCredentialsAsUser(in IAccountManagerResponse response, in Account account, + in Bundle options, boolean expectActivityLaunch, int userId); + boolean accountAuthenticated(in Account account, int userId); + void getAuthTokenLabel(in IAccountManagerResponse response, String accountType, + String authTokenType, int userId); + + /* Returns Map from package name to visibility with all values stored for given account */ + Map getPackagesAndVisibilityForAccount(in Account account, int userId); + boolean addAccountExplicitlyWithVisibility(in Account account, String password, in Bundle extras, + in Map visibility, int userId); + boolean setAccountVisibility(in Account a, in String packageName, int newVisibility, int userId); + int getAccountVisibility(in Account a, in String packageName, int userId); + /* Type may be null returns Map */ + Map getAccountsAndVisibilityForPackage(in String packageName, in String accountType, int userId); + + void registerAccountListener(in String[] accountTypes, String opPackageName, int userId); + void unregisterAccountListener(in String[] accountTypes, String opPackageName, int userId); + + /* Check if the package in a user can access an account */ +// boolean hasAccountAccess(in Account account, String packageName, in UserHandle userHandle); + /* Crate an intent to request account access for package and a given user id */ +// IntentSender createRequestAccountAccessIntentSenderAsUser(in Account account, +// String packageName, in UserHandle userHandle); + +// void onAccountAccessed(String token); +} diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/am/IBActivityManagerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/am/IBActivityManagerService.aidl new file mode 100644 index 0000000..5c7245e --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/am/IBActivityManagerService.aidl @@ -0,0 +1,61 @@ +// IBActivityManagerService.aidl +package top.niunaijun.blackbox.core.system.am; + +import android.content.Intent; +import android.content.ComponentName; +import android.content.pm.ServiceInfo; +import android.content.pm.ProviderInfo; +import android.os.IBinder; +import java.lang.String; +import android.app.IServiceConnection; +import top.niunaijun.blackbox.entity.AppConfig; +import top.niunaijun.blackbox.entity.UnbindRecord; +import android.os.Bundle; +import top.niunaijun.blackbox.entity.am.RunningAppProcessInfo; +import top.niunaijun.blackbox.entity.am.PendingResultData; +import top.niunaijun.blackbox.entity.am.RunningServiceInfo; + +// Declare any non-default types here with import statements + +interface IBActivityManagerService { + AppConfig initProcess(String packageName, String processName, int userId); + void restartProcess(String packageName, String processName, int userId); + + void startActivity(in Intent intent, int userId); + int startActivityAms(int userId, in Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags, in Bundle options); + int startActivities(int userId, in Intent[] intent, in String[] resolvedType, IBinder resultTo, in Bundle options); + + ComponentName startService(in Intent intent, String resolvedType, boolean requireForeground, int userId); + int stopService(in Intent intent,in String resolvedType, int userId); + + Intent bindService(in Intent service, in IBinder binder, String resolvedType, int userId); + void unbindService(in IBinder binder, int userId); + + void stopServiceToken(in ComponentName className, in IBinder token, int userId); + + void onStartCommand(in Intent proxyIntent, int userId); + UnbindRecord onServiceUnbind(in Intent proxyIntent, int userId); + void onServiceDestroy(in Intent proxyIntent, int userId); + + IBinder acquireContentProviderClient(in ProviderInfo providerInfo); + Intent sendBroadcast(in Intent intent, String resolvedType, int userId); + IBinder peekService(in Intent intent, String resolvedType, int userId); + + void onActivityCreated(int taskId, IBinder token, IBinder activityRecord); + void onActivityResumed(IBinder token); + void onActivityDestroyed(IBinder token); + void onFinishActivity(IBinder token); + + RunningAppProcessInfo getRunningAppProcesses(String callerPackage, int userId); + RunningServiceInfo getRunningServices(String callerPackage, int userId); + + void scheduleBroadcastReceiver(in Intent intent, in PendingResultData pendingResultData, int userId); + void finishBroadcast(in PendingResultData data); + + String getCallingPackage(in IBinder token, int userId); + ComponentName getCallingActivity(in IBinder token, int userId); + + void getIntentSender(in IBinder target, String packageName, int uid, int userId); + String getPackageForIntentSender(in IBinder target, int userId); + int getUidForIntentSender(in IBinder target, int userId); +} diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/am/IBJobManagerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/am/IBJobManagerService.aidl new file mode 100644 index 0000000..97d9b36 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/am/IBJobManagerService.aidl @@ -0,0 +1,19 @@ +// IBJobManagerService.aidl +package top.niunaijun.blackbox.core.system.am; + +import android.content.Intent; +import android.content.ComponentName; +import android.os.IBinder; +import java.lang.String; +import android.app.job.JobInfo; +import top.niunaijun.blackbox.entity.JobRecord; + +// Declare any non-default types here with import statements + +interface IBJobManagerService { + JobInfo schedule(in JobInfo info, int userId); + JobRecord queryJobRecord(String processName, int jobId, int userId); + void cancelAll(String processName, int userId); + int cancel(String processName, int jobId, int userId); + +} diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/location/IBLocationManagerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/location/IBLocationManagerService.aidl new file mode 100644 index 0000000..a7de050 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/location/IBLocationManagerService.aidl @@ -0,0 +1,45 @@ +// IFakeLocationManager.aidl +package top.niunaijun.blackbox.core.system.location; + +import top.niunaijun.blackbox.entity.location.BLocation; +import top.niunaijun.blackbox.entity.location.BCell; + +import java.util.List; + + +interface IBLocationManagerService { + int getPattern(int userId, String pkg); + + void setPattern(int userId, String pkg, int mode); + + void setCell(int userId, String pkg,in BCell cell); + + void setAllCell(int userId, String pkg,in List cell); + + void setNeighboringCell(int userId, String pkg,in List cells); + List getNeighboringCell(int userId, String pkg); + + void setGlobalCell(in BCell cell); + + void setGlobalAllCell(in List cell); + + void setGlobalNeighboringCell(in List cell); + + List getGlobalNeighboringCell(); + + BCell getCell(int userId, String pkg); + + List getAllCell(int userId, String pkg); + + void setLocation(int userId, String pkg,in BLocation location); + + BLocation getLocation(int userId, String pkg); + + void setGlobalLocation(in BLocation location); + + BLocation getGlobalLocation(); + + void requestLocationUpdates(in IBinder listener, String packageName, int userId); + + void removeUpdates(in IBinder listener); +} \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/notification/IBNotificationManagerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/notification/IBNotificationManagerService.aidl new file mode 100644 index 0000000..8de080d --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/notification/IBNotificationManagerService.aidl @@ -0,0 +1,28 @@ +// IBNotificationManagerService.aidl +package top.niunaijun.blackbox.core.system.notification; + +// Declare any non-default types here with import statements +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationChannelGroup; + +interface IBNotificationManagerService { + + NotificationChannel getNotificationChannel(String channelId, int userId); + + List getNotificationChannels(String packageName, int userId); + + List getNotificationChannelGroups(String packageName, int userId); + + void createNotificationChannel(in NotificationChannel notificationChannel, int userId); + + void deleteNotificationChannel(String channelId, int userId); + + void createNotificationChannelGroup(in NotificationChannelGroup notificationChannelGroup, int userId); + + void deleteNotificationChannelGroup(String groupId, int userId); + + void enqueueNotificationWithTag(int id, String tag, in Notification notification, int userId); + + void cancelNotificationWithTag(int id, String tag, int userId); +} \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/os/IBStorageManagerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/os/IBStorageManagerService.aidl new file mode 100644 index 0000000..8b9e915 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/os/IBStorageManagerService.aidl @@ -0,0 +1,13 @@ +// IBStorageManagerService.aidl +package top.niunaijun.blackbox.core.system.os; + +import android.os.storage.StorageVolume; +import java.lang.String; +import android.net.Uri; + +// Declare any non-default types here with import statements + +interface IBStorageManagerService { + StorageVolume[] getVolumeList(int uid, String packageName, int flags, int userId); + Uri getUriForFile(String file); +} diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/BPackageSettings.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/BPackageSettings.aidl new file mode 100644 index 0000000..fd33024 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/BPackageSettings.aidl @@ -0,0 +1,6 @@ +// BPackageSettings.aidl +package top.niunaijun.blackbox.core.system.pm; + +// Declare any non-default types here with import statements + +parcelable BPackageSettings; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBPackageInstallerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBPackageInstallerService.aidl new file mode 100644 index 0000000..b352e03 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBPackageInstallerService.aidl @@ -0,0 +1,14 @@ +// IBPackageInstallerService.aidl +package top.niunaijun.blackbox.core.system.pm; + +import top.niunaijun.blackbox.core.system.pm.BPackageSettings; +import top.niunaijun.blackbox.entity.pm.InstallOption; + +// Declare any non-default types here with import statements + +interface IBPackageInstallerService { + int installPackageAsUser(in BPackageSettings ps, int userId); + int uninstallPackageAsUser(in BPackageSettings ps, boolean removeApp, int userId); + int clearPackage(in BPackageSettings ps, int userId); + int updatePackage(in BPackageSettings ps); +} diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBPackageManagerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBPackageManagerService.aidl new file mode 100644 index 0000000..1613405 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBPackageManagerService.aidl @@ -0,0 +1,49 @@ +// IBPackageManagerService.aidl +package top.niunaijun.blackbox.core.system.pm; + +// Declare any non-default types here with import statements +import android.content.pm.ApplicationInfo; +import android.content.pm.ResolveInfo; +import android.content.pm.PackageInfo; +import android.content.pm.ServiceInfo; +import android.content.pm.ActivityInfo; +import android.content.pm.ProviderInfo; +import android.content.Intent; +import android.content.ComponentName; +import java.util.List; +import top.niunaijun.blackbox.entity.pm.InstallResult; +import top.niunaijun.blackbox.entity.pm.InstallOption; +import top.niunaijun.blackbox.entity.pm.InstalledPackage; + + +interface IBPackageManagerService { + ResolveInfo resolveService(in Intent intent, int flags, String resolvedType, int userId); + ResolveInfo resolveActivity(in Intent intent, int flags, String resolvedType, int userId); + ProviderInfo resolveContentProvider(String authority, int flag, int userId); + ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId); + + ApplicationInfo getApplicationInfo(String packageName, int flags, int userId); + PackageInfo getPackageInfo(String packageName, int flags, int userId); + ServiceInfo getServiceInfo(in ComponentName component, int flags, int userId); + ActivityInfo getReceiverInfo(in ComponentName componentName, int flags, int userId); + ActivityInfo getActivityInfo(in ComponentName component, int flags, int userId); + ProviderInfo getProviderInfo(in ComponentName component, int flags, int userId); + List getInstalledApplications(int flags, int userId); + List getInstalledPackages(int flags, int userId); + + List queryIntentActivities(in Intent intent, int flags, String resolvedType, int userId); + List queryBroadcastReceivers(in Intent intent, int flags, String resolvedType, int userId); + List queryIntentServices(in Intent intent, int flags, int userId); + List queryContentProviders(String processName, int uid, int flags, int userId); + + InstallResult installPackageAsUser(String file, in InstallOption option, int userId); + void uninstallPackageAsUser(String packageName, int userId); + void uninstallPackage(String packageName); + void clearPackage(String packageName, int userId); + void stopPackage(String packageName, int userId); + void deleteUser(int userId); + + boolean isInstalled(String packageName, int userId); + List getInstalledPackagesAsUser(int userId); + String[] getPackagesForUid(int uid, int userId); +} diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBXposedManagerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBXposedManagerService.aidl new file mode 100644 index 0000000..86fa504 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/pm/IBXposedManagerService.aidl @@ -0,0 +1,14 @@ +// IBXposedManagerService.aidl + +package top.niunaijun.blackbox.core.system.pm; + +import java.util.List; +import top.niunaijun.blackbox.entity.pm.InstalledModule; + +interface IBXposedManagerService { + boolean isXPEnable(); + void setXPEnable(boolean enable); + boolean isModuleEnable(String packageName); + void setModuleEnable(String packageName, boolean enable); + List getInstalledModules(); +} \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/user/BUserInfo.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/user/BUserInfo.aidl new file mode 100644 index 0000000..573c98d --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/user/BUserInfo.aidl @@ -0,0 +1,5 @@ +// BUserInfo.aidl +package top.niunaijun.blackbox.core.system.user; + +// Declare any non-default types here with import statements +parcelable BUserInfo; diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/user/IBUserManagerService.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/user/IBUserManagerService.aidl new file mode 100644 index 0000000..896e865 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/core/system/user/IBUserManagerService.aidl @@ -0,0 +1,15 @@ +// IBUserManagerService.aidl +package top.niunaijun.blackbox.core.system.user; + +// Declare any non-default types here with import statements +import top.niunaijun.blackbox.core.system.user.BUserInfo; +import java.util.List; + + +interface IBUserManagerService { + BUserInfo getUserInfo(int userId); + boolean exists(int userId); + BUserInfo createUser(int userId); + List getUsers(); + void deleteUser(int userId); +} diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/AppConfig.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/AppConfig.aidl new file mode 100644 index 0000000..aac73d9 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/AppConfig.aidl @@ -0,0 +1,6 @@ +// AppConfig.aidl +package top.niunaijun.blackbox.entity; + +// Declare any non-default types here with import statements + +parcelable AppConfig; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/JobRecord.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/JobRecord.aidl new file mode 100644 index 0000000..15486d1 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/JobRecord.aidl @@ -0,0 +1,6 @@ +// JobRecord.aidl +package top.niunaijun.blackbox.entity; + +// Declare any non-default types here with import statements + +parcelable JobRecord; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/UnbindRecord.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/UnbindRecord.aidl new file mode 100644 index 0000000..ae1908f --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/UnbindRecord.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity; + +parcelable UnbindRecord; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/PendingResultData.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/PendingResultData.aidl new file mode 100644 index 0000000..65d4a93 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/PendingResultData.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.am; + +parcelable PendingResultData; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/ReceiverData.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/ReceiverData.aidl new file mode 100644 index 0000000..931ebd3 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/ReceiverData.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.am; + +parcelable ReceiverData; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/RunningAppProcessInfo.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/RunningAppProcessInfo.aidl new file mode 100644 index 0000000..8229bad --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/RunningAppProcessInfo.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.am; + +parcelable RunningAppProcessInfo; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/RunningServiceInfo.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/RunningServiceInfo.aidl new file mode 100644 index 0000000..1572359 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/am/RunningServiceInfo.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.am; + +parcelable RunningServiceInfo; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BCell.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BCell.aidl new file mode 100644 index 0000000..ba71e32 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BCell.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.location; + +parcelable BCell; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BLocation.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BLocation.aidl new file mode 100644 index 0000000..883e3cf --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BLocation.aidl @@ -0,0 +1,5 @@ +package top.niunaijun.blackbox.entity.location; + +// Declare any non-default types here with import statements + +parcelable BLocation; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BLocationConfig.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BLocationConfig.aidl new file mode 100644 index 0000000..e64117e --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/location/BLocationConfig.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.location; + +parcelable BLocationConfig; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstallOption.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstallOption.aidl new file mode 100644 index 0000000..ab8cacb --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstallOption.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.pm; + +parcelable InstallOption; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstallResult.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstallResult.aidl new file mode 100644 index 0000000..bb15a61 --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstallResult.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.pm; + +parcelable InstallResult; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstalledModule.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstalledModule.aidl new file mode 100644 index 0000000..1fd84cb --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstalledModule.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.pm; + +parcelable InstalledModule; \ No newline at end of file diff --git a/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstalledPackage.aidl b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstalledPackage.aidl new file mode 100644 index 0000000..b66321f --- /dev/null +++ b/Bcore/src/main/aidl/top/niunaijun/blackbox/entity/pm/InstalledPackage.aidl @@ -0,0 +1,3 @@ +package top.niunaijun.blackbox.entity.pm; + +parcelable InstalledPackage; \ No newline at end of file diff --git a/Bcore/src/main/assets/empty.jar b/Bcore/src/main/assets/empty.jar new file mode 100644 index 0000000000000000000000000000000000000000..b8187a378536c165fbcb801c13cce18b8b370715 GIT binary patch literal 1483 zcmWIWW@Zs#;Nak3XkEJ@hye+RFt9NAx`sIFdiuHP`#So0y1532==r++JH^28+4sz8 zA8%c~i@e^tTIbH3-yCFc#rVO~BG0uKzMk~=(_!RReXb%VzFh3}(j{RZiY&#Ks!dz6 z?1fcml;)BUhN;rCJ{El}Vq^&LX6N{DZ}SXy1_lOC1_p)zoQ~mOU|>khODW3FOwnfs z>jSxz2}I!4$AhFVv7mq?z1$2849Pi(#l@+`dMT+DQ>WVI$he9ezyId#I{QaI&iTzb zdZSS9$b$seC;>;usM8vp9@}bEj&(B0xSG7_>+k&Dy?5{BosJ5Qjw%AKTvk#lUK0YW zT3RxgMOA&Jv`&eX#LEF*K)oY-W;O!Nji9pt^x+)&u1aqCZ&wEX?u!(WJY9+m125>Gy;557rw5s^wys zq8*xQ3&d-%cTWA2Y`jwpr zWh_`_KBz=6biX=t;KI*MUw%vsJXL6$|7ypQzpHlTCoJ83>;Fn8BdhQeT)N_y7A@a; z*SK}gf~iikTKgZBDDp;Ks!K1KQ&qU^QeM`Hc`rAw`X=#~QB8QajP~8rWt!`=D{t#P zHhjCdXxcTMp7fV*X9Yg#$_&}uz1ioW+t)C+n*aTIGTMJ<`)%dwHT!yY<)3&1uixEK zw=8~3F4-I?$C z`(|^>>3nYwch-DV-=G_>_%-P!QV~GymL1iZoU5Mg~a^Zx=FsXK3hx5e7d-M z@yTf?N`o?_YM-1FfBVf;j&qgQ9Txt>b#^Z!mh4@caoMLt_2rR+7jh>H=3eN`5SHKd zlXdSY0s@*ER4ON-jmt{Ha-4a;ZfA!S9RoC72#)R*UPTTt>bnApIwSmf8 z_g0DjX8{!)n##RCJ7~3|dY=DO{ymfH$fsAmy+k22=on z_z>KSRIK3B1uA|ZIzZ%6Bwe7w2wf+#k3fYFNDl-vGNKek0p6@^APE)*7KZl>3=GFu GKs*5ckV(h@ literal 0 HcmV?d00001 diff --git a/Bcore/src/main/assets/junit.jar b/Bcore/src/main/assets/junit.jar new file mode 100644 index 0000000000000000000000000000000000000000..93abe1ffd12300d0720b51dc4fc5a112d847d00e GIT binary patch literal 87259 zcmWIWW@Zs#;Nak3NNZdg#DD}u7+4s5T|*poJ^kGDeI5Ng-CTo1^nBg^onm14?0e?4 zkGHPgMP6@Rt#fD2Zw@lJV*KD~(HUoLWtvlTllb}|HbvvXW?d7M+pz`)SMz`ziI)A`&C3=BS=&aQsJu6iXE zCA}fO{f{gJ_PU>{*EpLQb!yXE%QK1JQ-qv#T3fcxO|w`gd^xxC$XXSXSM~ePvzg@d zht1-anEtvpv~%gH6&uz{stLOnPT94+|Kh$q=e}&MU69}3-(UaWakbO)&y^o=Qh zy>r8#Vf$z8orX2LFUz>^ef{R(wqAFS6_UJrXKvj7ImfC>`tI(x1vBDjOUkop9A9jG z`(bO8dC4_%--Rp9KgaL)nsq`pFDmN#!<(729wz23xcJ!g{JXo;^8$JD+?+VG$`&b4 zU=VQs9^?GoljFy&Etc_S0avvvyNKR1_3|0#>$Y8wUHJ0smb&l@DSx?o z>%1RW=$tXR>+(8ABj~Ev`x#GKK8J<*D?OIf{l28wFLUc%?~Uh7pN38>T-h;IGS6H0 z=%#C;dixAo&*?8baH>}3qkQzqsf)ZO-N@l)G&$fMmUS@HX^~I2mGDz5MTLOKOsyks z88(+gg(B*6yBBAOp;Ex+}9=e$Q8*97EP z#5h;#`nTGDke4Z&aYsEo;OPIAA30o4-Dq38bJ6<$@?32#AqLa8Osi?Oa}rt=r=?r6 z)^hD?E$&Edz4Yj)KJM-8Va9yUzrXgQ&n%#rG)UhI^@!8!A3$fT}I9;I4d zpIZdHo*8qe|`4aY~Sxuuj8`se!utj z^4{Yca;E03Osn&>t#H44JKXf_=i9TUeGi#^b>;0o-F|*v{(oz)eVibf&?9+mS(e=5 z|G(t8XX-@ubjv6A&YY6uvu=W+u$T1ZmV&*zj+JyvO}=+!hVqh`CS38eC(Qh~%P@Y; z<}|h%=GPC^Z!q0{!10Iq8+-P;#-<5e-yPCl@b({)iC~-kfMHJCi>gb9dkff2+V_2s zu;Dv@c=rd*8rJy3QWjk54@~|rAFbc=EG&adcY$z8>%0r{Z3mJ+@c6WdKh&MUbvaQl zr)7Sk^_#Z%hY~SOOwwyKdCi?%S1^}5aqken<)|*fdHDfz1dDcp>6+%dAGH6l)gQS3 zfxo40lbZCC#@7o)rnE;du)4#>yO4ED`#S@sV+Vo_1ml{^9~#f#?oN>X!?XX8p#|rE zrx z?eo_}+PDJbtqvv3V8}ldbc64|!@~F((greahb<}u@3l#8kf>{FF5uggo7(4Gr@{5~ zp;-oR>_YyYM)L%@HBEmDxHjc(R%6XNu=fIgT$_HP>YB#+4;f_Il0Wc2xs&H>xq`La zN&N-y;)j(L{LcSayN8?Z9LM$$c%M1q^!5>te4>X~_x@&T_8JVDVjOxuvbFK)$4veIdUM zPyZnfkM=?X!MHZf4`zF~vmfZ6*gX3u_xD2yGg$Hu1bg6Uc4)&^p92Kl~t*sjv`JCR>UNdP-{Gh1QWLv<;_5V~%tJ(!Qxu)X} zLVs{vJ9xj~ZQU=?r~?cYT=!b!AIPLwJ46PE?>ZsNnk!yF_WE#F12-r2gPY{-A^A7mNpKWy@+JOJs0X~gC>e&ik8mA|6 z{$X_emn7SupP>H4=G0#f=LEhv4PD1~#4E_E9W=SYx?Hj7&aBr9WUjRReqi{6tL(u3 zfFCU1`FI+xC#t?_?hbgA|4#n}=lKK2H*oPezfk$jdWYBffo}w>`ho|V-#ju{Yad$v z5ZTwRJmINHGH34s>z-Dg8T|VX+@J88=jmbD4-7qxCqJ;RX{nv?dyT2Nv%3V_`hzk* zSkE0OeZGVLA?pvuqB-ej+g=rj-{EggVA{iOe>n5RU;ekvuP!j{I^Z&cJze!*ld1DV z=NnAdV^sLwwJ%R#`@?Gf$Gc8~HU5CziSm=Pjv4UWYvwKBTosollPHzb?xmJeb*SV9 zb8F6tJIu)sl7Gm)YH><4In!AGaN3dyl`Qw#cnjoCwKy-+@eor)h zaz@^0`$2^nY~G3bPjm!~Oc(Oxp7(TJI)w z6~7H&%W{(X(ir%`Xb=1RgHAsr|223AEO9w8r9C8rFLt4RPgD5A+8Nxd6Rl+$Hw);U zjBs*Y!Be_W^$t7#;fxs!>ko@>kSjZEcp|XNYN3@$(>4Q!OAj??Fz6q2-ypc@o`8|= zgUlH`@dwK{aQ|!R4p?FGUF=F@*arrlHuZ<175vW*N8R9C{&1F2jQt&+?T7DP;FfFs z_<`w6+tdP%a}Gf_C!FMUec-l&|NFsg18%beVHOOOm*5)H*j4$$aaJ2c7nM~ z!{Gvve{Gu!1f9%{&MR0yY07?BrNNi_Fl_~w=|VY^#%G`c>)Zv|Uk4Z@xcUzUe~{V3 zvEGqw54-%~=LX!*4w-L|C_5Zq!1zwbU$%gMORL`n(JBY|7wpXm8a*wBA5?63&pWc6 zX$URgTenic$o$~j3ygBjD>pEGJE*Er5qu(~arXlLJ>0J!Sct4TQN_J#87J!Lw0_+n%XjF00q3T>GDg=OJvI2ZJ8Qq-u}$RYY20YQX!L-22JiiYYB!ko zA9g(v)wyW_+m^<420U`@o*&H4v~B$$oYQ=_fThoQg;6nY&;qV44SXL2dRjhyklMo= ze^4oceRhJlOzY$Vxg61JDJM8rUf_s2s8GQ)uQfbDtA=HBqUay4bj2F)6HgkGF7O>Y zwAw&+Uz6(x+doXdA6mq;WL%wal6&bwsVnWzK;`8>0|~k2!VgS7Z7V-8)-Y{Ouv^n2 zpD6vNK!jhb8~OZUf}&@DDx~5X_#b9RaL#^ck+SmOEuN_h&6XT&{vcDs^f^&8r_K3;wM^@N z#g%H=JWCu>SFrm&kbA)p`%qDW@%(|=A4GMUN;in}9kT4Wb1aJg=mMrYT&4@mOd7;4 z$W)?jZ*c5> zU@)g`%~y-%4v9NhvmCu&Fx*WPu;CMaU^;`XIDxZnB3vn?xdW- zmitgqg3bTn=?RST2h2AxnH?zm!P|F;wd2mY8Hc_GaA`T}X0UyCP_N)%JM2**71vn) zP&k6a{*ajk%kl?CN2Cn=7f4KLoV|c^$w6iV2DihPKQQg#oqr&F14~_#><88-WkZm zHEe l`ZFQTh+#@`EOc|J(iqu&r{e&0xKopkTu;f0*e9Y zSq$@&c99hS7sxyLi>LBIlm>_E0*fh)p9-X}w5nZTlxwLoV42r^(t!8bA)yF%=|t;4tkV@& zivHzU`XFqF?4<{GFF2bMd2G1XA57oCV|FO+2lKh6y|c@l3U^3mIV5MWes|=TU`bA3 z+QS(9ka-59bfWf~#?2G%%rdsQ!x)<=;M2mNz^Bu0x`DCmK%xa-`U9bs_YdziXD^hv z!!dP%oJp%m2Dj|Px)+T62Q^MKWE#kW!a(-h0r>(UJtvjky_}z%Z8P|46M1a-^A9XH zkbZVpD1y`eu$~3abH&?x*BD-qkZa%gL1zz7@I&VroZ1iFZ}7Dr*pj%my(U0L%egdz zMRy_dmqtbdp?R&-6SaKW`yUj~V7`CQ?1!*lQ|9Tfjz%J_j{-zrIY+cA2K)2}_x;v#CB1+rj&;p?V=ZPt!yLF|~v0A4F@I zPbV_xH1927TKDqAUM|-KG9ist7dYiw7!9Q6HBNt+`$Ht{u+tC5ZHE|tNGr{a_zX%5 zuP#Vf9a#K9Xb<=NgEK7R zhO;|CH>a_-Kt#{!U0#pm9geFD?Y6Y^eNfW(Hho_-_kzT&L(T?b%MR!KkOMWauFSS;nf<^lgQMKJ`URJ5 zB8v^D{9&62uGxwDb6767XE!|xkj-n~{m||OGjk$GPs8yCoHH2LOC{fHS)Zu=hjIFX zDW=cZGjjbKhMp|hR^@NYApj8`!QL`o4j$uHowk<(!83 z3CcN5XE(6cwZ$iB=QO|Fz+84n??QjV*|;0*`w!JwFt9%qkZDu?z&@v8|3j5IZJP_^ z{xxzJ2>xsJE|BC2zV5^^Nr6YO!-;2;L)ZznUx8ga*^1i!lqXD5G=I{#X9EAa*4GO5 zA`MLe9P8Q-1+a8E8D0o~v5aL(OHcvxls2OPu~P?o1LU+0_y!2(wRr_dt~#I_AiC<{ z+5p+0g=|+^ZZ8nK!Y22fxBo@k@vOti8y-%)`e8<9g^7vHy_wd3l&3u`Jo@28g2guJ zzAJ5yH$3FXwrG>;>ugh=ck%Honbkb*QilbP6yzA>d~MUcwPC8%Hmk#BDL3qRq8k!9 z&2@ISExo!yMQWPK;Z3O#eLZ^W&lF#9|6O2j!^8YQP=cd5!N7*gIYEP``Jn-m+aV1J z-u{CU9__~;a#jc(I}~idH?QsE2Ob;l^9NaGaGXEPZNM4VGW|hn1#4U@I2NuyOt`hIMly-Q3qyOrNc-UMgWi+LFH|IXhk&VFe< z-wo*vssFn&ZtJbyJN3toz2RbkuiqZNv2#Ol=C7tKd3C!y@4c>9?Zi9y^*>jB&c2tj zwOAltXtzX}oo}#Fz`h%;({E~Tn-cHzHmLE(T5qOrms(;yPw#O&eWo`y?D%SfGRrq1 zzQJ*qpB!AbAbGm@?oEB&OLn?mesX+W*R{)LA-q?nuFCwhO1F}G#a)-n%U@ZD1?|3S zbbnrm?ByMI^(O4|K9IM~B=P&Ds%-Xk8@I(J$8BB8`}4}Q%F?;Fm`}`(e_M5nZDV_8 z?AEPwKmPdQu&3wf*R1~dXUAjTgfl($;k_Zx`bP3#5!1Iv4YKmV8^hTjt!BHmS#gG4 z!tv+Pa}UIHG zoRuxLF?wZe#M|y!&*nMI+Qzs$cEO*rTj8x&`Sib6TC-d#=UO6e-M(z6zJPw2UGICL z6SqU()@1o#`1f+v^-zmEeg7Lvr>S2`d10kc*6L7Gv*xHD?~&`=Q!c9r+}BD7=X#PW z-f>?#BYL_+&H9E~tqJCJ`)vev+?&^E_p;aQiqX-&``NY3rC$%rEqMB!|IEz5Mx)~^ z=7zuhQ6nwR zBma!F1ODA{__N31SEZHtlPEFvVa>KKf&L|Ys25%oK^0hAoHE=O+53r ze+{*o0n^{i{aC7#BV4SUCj9dA4VS8yuk*Lw`_ovl@v=$&N{4%w8cmXpKc94C#az?+mhQ4 zYYSz1>H6OIXzKVzrqN_7Q|htnjYW-BN6(3S$j4V}v;11ysd)>&h+~>dN%TKYZSQWABE? zmF(<~E;D~?ahMs*^f5SG<1rT=@ERUTSxn7M1^Ua8-VTc76KjD5>{ zq1dIBB(oHtU#)h>l_9a+xyriyX5=Yc%Y4XJX+PEV|q*#5Mx zCg^S1694e%YZEGF6)4m`bg236aQjzMfA@FAZOC%-c+uvxua<9iW;_coW{j2_}f1B{* z&f+->KNhOjRqRrRDODB=SGPJ+qk!hH_orHHJeZ#bl}{9I-7g*Z}=biZ9E~Z@IajShV5)`m{&8^ z%4Pij=0CEN znZ9W^{){)Busu$}cd|pxYSYHAS_1cN6TZhz)+jDesI6LXhV!5q%cnG!Pk#JMR*FV+ zbFp7LEZO+wGt*NY{u{5Eo`S9VTc#lJKmEWx>4^FMtdI8dp3$ycXdCucCtLXAPo}bm zTRV%qSl@VM3%^}2x?wiUn=KBOu}o#_w|0Iz@l&NvmzgQEjrGkJhnbI=Kdxta)8jC+ zy1Cj>;a}2&TlU;XPVdx+`}fA-&!dLDRsq-B9R6HuxT_lQ@1DbKe)eB)Ll(&VG*FzU zcKUncKmHr7`}yy1-&a4iQlKMWBBMS_A^&j0U7dvGte^6D*Hp(cJuTr{@?LZUJIkBI z#-dBi-+mk@_2pVJz4+zSYWoe_PwmvRV>e=Yxt#sfOsS09>5V@s8>^t?z(rc{OjyeIBy62x2?v7NbmD;xF_O$a4pWN5ZIxYD%bn8={U$bt_^{|i3tvqhw znp^2ExSgB*(bJl*yKWWj>pFg(`&Q$ZP5H+zujhO6cAwtFW%&oriLclmci^6sM*W9f zE|!a#Dvz_h+1qGVBdxJKXo0OT)5~hsOM8Sm&U4&|{wle)-`D2%7v39xa~?&mobPL+ z{_S$r`mO&qpMUxK&+ga%tiE%tlC9tWrC`CC#zrIdta`6M3mj%0Wc+>6;g|bXULkvx z327Av-P;~Pumm%MDB)#2&b zKJ!*u`7XqPL`rE|S*Uw-1fe9!BS`Z=$EnCsj+utcbCQq83QozFN#jXl_E+!}-hp+WP*kp7rg!$=m&z zx9(rwBELMd-v9Eyy71q>V}1XxTUH(Z`z`a;ejoqfzAy5Z|1C~jU#a}bZvB#-0^eq} zewaS1u5D)KvIWLxb*`^Bez||DVdeSo+c^`?^PY_nR{WcDsa`_#ZQ8r8&U2+NpRYKl z`Y-3kYt`jDeN2>Iz5Y3?DB9)8-2~R()=$qouX-l1zoF{dqWdfKo}IIqsuFdn#-T#; zWB1%;v%bD4(#>BQ`SjM_OC=k#FNCJ`W*^u3ym)5sx@#X^X+I44y!J9*nc%LrZz=s2 zTen-hO;~NkJNx&C{|*-X55NBS&vm-`%$Lie|Uev+nXs}v+f^W6zhAfBO`b6 z?Ump2)oKiMer-A_Dd=mub?&zfrE`9j>=&rl(wQGywy1y4zf%@(E>&)u{l)#zr@SrO zDvx)RZJXM0-@X21smzi;uU;sweZJw9;Gf$kzwdtbKlc6c`zzOP37-F-Klo_doN1en zUbJ8NzarvFd;hDyl~+tQu*U9a(|r16(&_r1*Z-AuUY)jHcfHi<{bgY(yOlrvX9efY z@q1ZSdTUPU!^=OWFGx43ITo^g^~KFm=Oa(8ZkuQP{H~2fzTS?K=bHc7zsU2(U-%Yx z;g?>)-q1O5W=8kKx5kQZz2m(l`q=kPnW-s%^t1PD+$WPx0-t(!G*M14t`@Jdh z#gwlnSMGm5>E!p=2)pZFeiq%f(W{l4ef?Qi$F~i~L;YQz)K-O0mYH~d-MZ43pC;yq z`P^IneEX+&_V)iCuVH5G$QPV!Yc^d{;-l5{A5PcSUvAA6oW6gpx%{5(t0=EGTgB>v97p#y z<9e&Lx#ujte%`r7HzmvR>*IL0=gyJQ7uPAo+zTuC8nU7G?ES>R{ra93VuHOhCaroJ zx^#}$mH(wa`=*B-eJcLftu)l)-3$Ix$W!k6kgwQ z>9@1rT=^cY%X@v%+)e+lT`S1_di`R7?5({DYWK@OKisvgZLa*}_xpYp*!srDAO31u zWBt>w&9%0M`Sth5Y-hR;WjN=C3*Wx-^Zh2}yMK$P?>&7k{A}jlQ@hHi$HjBc<=4%r zuikrknqIy4DSH8--1JXJp6o8q)cf~N`_=V{*QD~!*35f;<@o)@A2X*+77^Tge_CnO z-Fq*tyywsTFun7{_wTcI>nCkV-{-mS+m`f|mqR|+`rLc^yL9p5udlt__uli9dbi}^ zZ9Pjg`!gY%A zc40D|=a+x{>EpV2?vL!qLY03}z5B!Ld`~FdH~;wYr*C4hn&*}+u|lG@$=BR#BepPT z_b<_2@bLB4e}}66w)%R1p0tMl7Qd_MK8>#xzNXyDpXN?edgdP~e#1~@AB%NMhNn&B z;YCw@b(d?VdAMxZktO|k&t;DntjkwEOI>b0L(@)7P@cO?U&K+{c(DxkzUQ>Z|Rk9w|@#hbTw3Z<*!etXUlGjIn%y$ zzxD?GuKi7&JAY|?*zl=iP5Kpur}tAX`Rwjk;U6D(dVl0rqv#daJ9g@6&ANQ1IO_7! z^*-E7=V+<5|FzS)|MO+)E4QcCc7oH_uR58wtHt&63_rbnP2TZmTh2^Uxws)K?6UQ% zQkRf@s~@j7pZaf(xR`F1n!Ag#+M0jibAOe2|FDQ+wsoxWJsTgqe(|zz;l6LzM?I@v z{^{>@w#18b*3I2|mhtxamFu^gov%Esv}j+P=k)8DVwb%R$0&w>{_m|)K zyn5q(>$UmUTx2o?_3p}hb0igC&U#&YGv@v2XI1j1*MG0Dd@5HIb!OUvd1A{p z&-C4~^xW}jxAZQ~75sUwU%o#qDoL`SrfrZ#GX|6t{ZOTFw83pYC?oEv}0ACOua^cV=bWd-KmqpKO)y z?|*xvbC28>>B%nrw|xD+-v|l}tlz)oxu><5*xj`J$$vc`ThF@p%=_m2inu?wGTDDm z?|%Q{Qt6Uu_g2N9_?KF=UEe>9TR!`ZxJ% zPj1}|y?s0Mwszu9{au@kPW&jl`mOwGS=asN_F3O8duLpkks*KiTxL*))~()>zlRsq z%_~VhdP8FBd-0!Twh8aH$Nl|N+fciD@8{!}Q@57~`<3U$m#^L4zAo6-WM6ybg&IMz zuW#QjeEVkM+o}n#*NIJgZ}fKi(mC@CrzS7j>npmvf95y8;}&mI-DamRic@!cy4!DR z%+A`acWX7Tw<|we*-`U+CH-$Dr@ptfP2AP$DsRs3_Ov!Y{QAB2(!Ej(p7K0k zd2iaEm3g(!Y~H*0<$H5X)V%f@%GWEYy`Q>k_m_SF`xAT9KmC-uSZRB~=D{E4PJLmq zuP@nVZA=S4a@_k@S(Mw>HLrSCJq^tdTDzpGJInNHbZGX9YeBKge=W}PoqhWy|0>tF zTm4qA5Zin`^XK)I_WOT*UcJBJ7k5Tw>lT~!={|ouGBRI(6}uhqm9IDd&6dV!`?jq8 zyjKh5Pt_V2>b$!CJW=iBQU2t(SRbLa`Btra?>#rUS`z;D;g_D5LLYCLD!u=kSNgO4 zv44NXUzgBR@(Vxbv-sD={rw}6cyIIDx%KNR?`H;XzMYw0eBh;Iw3*hfD}P>HIo~b# ztaiI!?}eWxmr9DC_L<1vP>-qTstqa)^0}u!FL7O!?29jwlXZ1|tvLDa%6fSr`&%pH z-Q8xYpDkI=ex_)7-Chabok8a^_V!)8_3z@XeHU-7J6=-Pf3YO_%KUY2J+6QBxc+m_ zy3dxe&x?1RdtNg4{7b9(mrL!IzpnA4ro=x_^Yb$k6Ytv_t-oAaxBT@Vzw1BeuKR2q z`@DSDyVH~If6reu-+$$)U1~qQj@Inh^QvLSdHu&~Z0t)rS@(pPegs(RQ0p zh{@SKvY-EDu6lp$$?t`>Z}dGE@!!hzliyH$C{FtLliII`*WFPswd=Y1QGWH$V_Ew) zE?a;1<(BQ4@?u|~_AIU6SNdx~HNW!1G(q`1!H++`?Jla`{aWll>vG%NAfJ-{y_U~T zXUly4y8Y6RV8crLck`v^U;0<)^*ejcw&FSW_CGH9FR}b{*_@w|U&XJozgh3OsQmU{ zPrLh!SMSgHRVbG}uk8Cxi_16Gl)XBhFQY!y)~|m1)Wvbx7GED*`h8zsXw~;P<7L6} z$7fE=(68^g%zoC}F#es%^2cZI8&=MLf4%WzRqW%f|Bq+?_pZ6U;eX5n;pO}OAK%RP zuCVGxS;vnL;eOJqpBZJF+kzgFb)+bo&SKQGN~d;3^wp2+97GuFM_-*fW0nB86DHJ|&f zdv9?1Y2SEm`lo5xYJ#WR^*(=`8 z%wSt#mwv3pRejd>Id1X#z8Eq>C#O5Z+mHnFb^Tx~9X`Po(K1({% zzIR{ZztUgJUafw1YlVOKm6xZVrC!wx{3-X-`&rJU7v0b1T=slcGpXkJ?j5zJI=?#R zzWK7i+J0Zss#{Gh@sBxmx>w!NpS<<1WcZeCX9dO9E{+P{IxnmC>g`bJ6=orK7yO$1 z%I&J}s@b92SLB7?U0ZeWZL{Pq{j?YRW-R=j*!Hena@ibk!J@tL-lAI$rMp+%zi(7h zKe_5t=Fgv7{?tU}+3D)fpZ5If`*z7)@@X&XVA>EI&4&dD?}VMVG(CSoW&_T#UyY^j`RSLxpiw{9&C|bs z_4Cu+Rr_kf&rg3p^ZpsZXKzamEs}pxT63bZ$T`BKzfxUoe*dqEi*kY&rE?z6sPX%? zSo?pn@$n_CuI00P1uxpBWgj`t-`n-hXuiwS;wyLb{;JQBf8F95eAe5~_l58B^f&f` z7q|QBO|M%yQ~2vg(UtFmZ>hfh!gwb4SEj zesx`MU7}v3=5y~_{;#Un)!#>_&2ZGSxy%!G_u0DaY5VTaO)Z<{m3Yx~+4jqd%XWWG zk60gkcCnxL%>23ko?JT~nb!U4{HoVJZ)cp3KmXEtS*eemdfk<)#(glCU+}vKT_cAr^Z0a(bSC8_I;#a&Y^{RJw z{XTn}U;OsjA?EJ2`_}rMpV4G^@!hkHGiu`Q9-R7r>&=8GpI=o<&2z8b`|I;{o3sa; z4KIEV`CFO1Z=d;$^{?O7T)Q0?cv09-{Ke1A#$Vzus{ZsIt6%)_e#W2eR{8r=kLJk< z&P~!=(KhFQYA|o?iq9DvHP`%_y;knqtXErlUy2Flu6}jDTKCzWpH0F4|M^^+UwrFo zNN;CZaP5(oLb>OK=AEfmzZ*37_-UW6)!}yQr&sPe6Jp}7WT*3YQ_SbJI~K{$SST1c zzpiyzd}iD3qOeJMff07sMLM z>n_wq>4(+h5r&zj{VrZ@&EYug~(MjkNBk?>Im8v$FQn ziz*lUeI9OD!D}lh$lH3%s`kFml@BUcx6gGuV=Wc8>d-12e zoz^k6(qI0*X1jdi%J+|}N_}U~STWz+erESJfsfLq_j0a$%Qu=DYdL$z{W?FPufGqf zo!vh3ujilHU-#WQWA}9Hu2;FM{?*-H^K*NKZS)QK$%htQpOHOBY_sKDxsv(k|Ezgg zcdf*J^?&idHqXTW&UqsK_5Y%OYv=SotxmXY^4~1>`L>xU%Ws?3?LL-&{fF$YKbxHY zTKkxN|9Oe;^5GoE@~l68y7klN^_R~q39a|Lzx4U%*k{hWPc5xJK6kh4b&Idh-^K2V zd!JNWr}gYFD7k*k`&Ox0Zf^Z}qsm49Gp2zT{m;hw*&CmolV`p&IgZ=HHfPuIC%?73 zWB%F3G`?}JHn|(Ow{Nf1z2)Dp+TH#CZD#-7pMS!AziYp~dRFhv<@eWr{FSm>@Q_*R zpYP%Q6ZJKd{9;QH;BUtj-nEOyzt@uuX|_xFDk z@nu@JZ<*s9bx!fq{Qiz#f7(s{C!Q^j_$+&^rrq>@;-}cI4!J8|?CuNhou_=u-`zso zMnLfI-D%}@`}<`s*6h#Tb>G)9v|jJW;XQ8;)o1+h|2&QR|H_AppBanWow9VE_q#9X z{r$l8%R`^mHfLO$QN#ZtYWlw!ktuO}-Fyb?-CX`!$Xzb9Nqe^?eetJS#d=xwFLkyH zf4}40?7emS>H14H4-cuIoxJK_<(DOP{qs`NyV_j;etzK@e5mHdC)3jRl76p>pJ={q z5B~MKmgXG@%=U@D-343jyt+Y@~@6GqEo1@-GuKm7dpS!4&{{4nh;Kie9 z6N2x{T@3KKvi?K?UQhYM&sDPj zXDpBXA0CQ^_@lpjb}ab(i0SzoW2tH1%@-Li7p(U6*;oIyNBgV*_WI0=Kl%*{XX9KTu<-G@7rsB2>qPb(_xpQ=2G*+b@|&n&%aE! zSbwJc)$hYy108CjR|B1BEehL->C?wf5TJtMAztZIXYo>HN;BqR9IHD%rLt zzfA6N-n93sNy$gm9OdPqq335L8~%*D%dJGOeo||#q!Z!0?;jEnNJB!%jF3QiDw(Yg)p19XLZI!Gp%Y@rL+%nO2>BH%Z7M*>w zWkt>Y^V_xce?Bd~xaV8y=jE@?CSJUL_j}f-Tlbc2yKGxl9R-QIoKTV*af zdoJ2{S4i*mAN8IZ`wv#tr;a|q{&Q~p`{qBh?Do&i)wBM4>I}#45A1mGVdU)S*W zc8rJ6*RNt%s<@;6%R~me)?e|pi?3|f{hmu7KKrdVws&)>-)inw`y+BWYsh-z^O-lY z6|c^?D?IhR>8~p8n<1Mml&p@LJ^i)r`fH7x_`||~_svn-)|o3Ln42}*YHm`sMeSv~7hepcmDQ|{UF)f=zdYmn{gn^-u{Bu;wj0KXbj9nA6$|pH2;^ z=iDprb?c;Ftmo_V=}S#wHDBL9KV{RuzdoAQ$3?nN<}>{IyJ^e0$(PL5pN_xvEO>6x z_8spl&zbrjUKGE(cHfr2ZeOjhRz5Ra{yB7iXzYqt^P|0Px23hLK5y?neH;Id=Pxd8 z>#jVTxvDbuEA!Q(et)0O`D7dPbDu}%>;2yqs#a&Mx*V0}aAo=A^QJ2MZLUwbSf`O} zUo>BQ>cd~^pk|J|VBr6_=s&;b=9Rq8lH46x+Wks@RrLBF|1WO1?)z-h<>PBRPkxVC zzOzmz`)}ojIolS`iA@w!t=y}wv+LSkckT50kl0i)tH1Y3N`78jee85(rd(gwzl5Tr zF5$DS41e0Kt-l|1&oA`v0lx0a+CwYr`&E8TSvG$~;?J1HP21Ktoqc}oJlD6V%|4~A zmrFKZdKs|U>+tHi@64SK{rkOhzPn5HY<*=roAA=+%Qnx{m;Wo?GJ8!ue^B7-wJSbv zT=ez%rY@^K^VR>;qOY8)*?;rb_jdE!waXH&{JdLz$m?4DxfsvCQ%&}5n)~jNc6Lo_ z@A^fb_jOH+cRjs+(aTjCKSSTdT|T_>e0lfR=Vw>VT0iUS^JCGbHLJfqzZSi=o7MLY z71ytPT(|OZZ1C~uka^zump@<4J@fziqDB8=0#Dbye3YG8quaZF?aS=!n%v&?$@Zlm zOHKCm9lO5OIHo4Hcm3**U$@Mul8X0#{5rd)ws-ydkK2v)RsNOz?p*c#{wB#4+WNlCEb$rPbM(S(-<>-<$?w|n zW!sim>zi-=dsb-qKiiot->uKSK6lY~=l-0KEBo!Uv;J1^TlP)=bMBSp_OG@~v3>p} z`s&qhlP*7dSLuH1=j2yvSI@4pU!50x_wkkqch^5`Ue%tw@80HB&*#dSiks8~evMy# z{LIoBfBe?GU%vaxzMZG(`qTHUR4b+_Kt zeQR0%FC(*k_vae#=zD*jZt0Mf6T6#yS!vPUv&O5|TiT|CS%3YyearUQ%NH$5J$q(F zP5giD@H*|+_WhZuf1ewc-?r5ImuD-#W!vW19b4~-f6v%gU9#8na@n$p{$(e|g!f=b5wCHD})XXA-+z#pd+N_t#C{UN_mh&LsB!<&uA% zKlTLM|G)GmDB4V|>e|}vnY;Ea+n9H)=+*qgOJk+y{HmOO?C1BMSC&`nlRi}+`uBOB z**B~5ySX`xS6_#Uuht9vdj0w_z2LiPX;yo4j=Q@2{krYqx9uC>Tjgd)@A#9u_P>{Da*ef}o4{Qrt~h4;&Im%sM1)?GgLS^n~$w=@5h zeVcLmy5HyRm;bzd%XEF-w_SW&ua~Z9&VBmG`o+#Q&GU|1W!TE*sDI!4n=dM!{q_Fs zw-5e$|F-PHFY6bTYns<)aan(T`*OkC7YX_+etj$1P=Axx&-%vQb+WJD+FgxL{&c_o z$M*=?ua-L(+ifq|^3OI*owxfLSNE@CH}$*n?=QdJ#lQbd|L+{{-FGu*-F^5aZujL( z>D}6D|7|t*ux%utuf7Ub4ZJYm!BlLgVx4OOj@2~&f&^_(C z>-)p&s^*t&jlbRe>2K`s4V6|(za~h&FPTtj_UQ5a%Re~%{#ul5{kPXUT(*7Pwz-iD zUv9I!o80Z{`uF#=hduebH~iUtHBR2_UwrM=nnM|jQfed)Vu%mu{~WM zvj2}+^oGAXpX@h1HvhT%d-;_gKi)4mt@TUr@0x#sQFZB)KTJP*U-o~{y8My_|AMc~ z_dQ)1`gwV`{hS%{S6A$p`}ut3|BpU@ql4Gi-(-6~{r*Cpxc|AY{zw1y&#I}ZyK>OJ z;Zw4G<^LN#PrK`F{w2MtKXsy>`PpsF|4;r!^!~5?diw8&`m^&tR@FY5eqXi9cirSa z+$Z)=`d6tI{QGt0@87vRGq?VjfA-2g@vHy;xW)f3{=f7eXXBrs`mj&)7yo-XtA5e1 z1-d1Z*j;~u?%=|BM_TK+*eV+QC3;Aa~^G~qR&*f>K>f7Y_e=J{l>~;C~_v+XF z?7VsZ{`*<0ud{ztf4qLr(fjw`r)vFInAPdyu+Pt<_qqNrj{5g^=C%Ip(mLCP|N498|9>?7{^g&uU&KAB zcl^85Xsx_)qQt-cEB`lcTR+7t@{|9;{V{((&7S!2xAVWZ?Ug_JSN#`08}ItryFT|o z{Ezha|4lA`?X>?HoE^3D|K|S>^t<=({iV(J>b&~?!)vbJ_x+pss(kXkuz5hG6?e|^qm(^}_+Js;GPh7E+JRkOB`HKJEXXXFPez071 zx$fg*>HGeVo_cTps`P*Qto<>|{`H>v*Z1H0>-j4`iW>iPe^k%?`Y-a?tB<1p+5TLA zeBbA9yk|<$A^p2S4?Z9HGw1Ey@NfJdrysrVeY!us|H<_GD~0RD|4hDWZyr$3`j!8{ z|GQ!Jf8*Idowom}dq?ue=KRk;pQmR1cg?i_m-K4>`nR*!{L?9_f0)1OAM2}n#Rul` z5tpO?-v7g1Z}d<7>i^tjzmCpt`mg&{-z5Be|J4gz|DC?pr>~nQKWX1}@y>s-Q%?Sm zRr~+Q=j;4MHxhqb&-m$m=IZCiCKr!?e17lUUvJ~7_48in#2f9ux?d^yAGgc$2m0&( zrQWjFX8Kq4LwaTX&Ye|t-TS%!&Aa{gN7+e}`rwrR$NsN)7Qgai?3YQ=C;#=<&-pbw zZI}I1^SR3()kptbZBl>P;a{Bbn#{e*C8;+5+<$`dV(&Kl7xTO7H~qT4%0A*>+@Jat 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%0AL&)c!bo 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 NlYwEDHzNZB0|3{mqjdlP literal 0 HcmV?d00001 diff --git a/Bcore/src/main/cpp/Android.mk b/Bcore/src/main/cpp/Android.mk new file mode 100644 index 0000000..1f71f08 --- /dev/null +++ b/Bcore/src/main/cpp/Android.mk @@ -0,0 +1,56 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_MODULE := libdobby +LOCAL_SRC_FILES := Dobby/$(TARGET_ARCH_ABI)/libdobby.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := xdl +LOCAL_CXXFLAGS := -std=c++11 -fno-exceptions -fno-rtti +LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) +LOCAL_SRC_FILES := xdl/xdl.c \ + xdl/xdl_iterate.c \ + xdl/xdl_linker.c \ + xdl/xdl_lzma.c \ + xdl/xdl_util.c +LOCAL_C_INCLUDES := $(LOCAL_PATH) +include $(BUILD_STATIC_LIBRARY) + + +include $(CLEAR_VARS) +# Collect all source files in the current directory +SRC1 := $(wildcard $(LOCAL_PATH)/*.cpp) $(wildcard $(LOCAL_PATH)/*.c) +# Collect all source files in Utils/ +SRC2 := $(wildcard $(LOCAL_PATH)/Utils/*.cpp) $(wildcard $(LOCAL_PATH)/Utils/*.c) +# Collect all source files in Hook/ +SRC3 := $(wildcard $(LOCAL_PATH)/Hook/*.cpp) $(wildcard $(LOCAL_PATH)/Hook/*.c) +# Collect all source files in JniHook/ +SRC4 := $(wildcard $(LOCAL_PATH)/JniHook/*.cpp) $(wildcard $(LOCAL_PATH)/JniHook/*.c) + +LOCAL_MODULE := blackbox +LOCAL_SRC_FILES := BoxCore.cpp \ +hidden_api.cpp \ +IO.cpp \ +Utils/elf_util.cpp \ +Hook/DexFileHook.cpp \ +Hook/FileSystemHook.cpp \ +Utils/VirtualSpoof.cpp \ +Utils/HexDump.cpp \ +Utils/AntiDetection.cpp \ +Hook/VMClassLoaderHook.cpp \ +Hook/UnixFileSystemHook.cpp \ +Hook/BinderHook.cpp \ +Hook/BaseHook.cpp \ +JniHook/JniHook.cpp + +LOCAL_C_INCLUDES += $(LOCAL_PATH) +LOCAL_CFLAGS += -Wno-error=format-security -fvisibility=hidden -ffunction-sections -fdata-sections -w -std=c++17 +LOCAL_CPPFLAGS += -Wno-error=format-security -fvisibility=hidden -ffunction-sections -fdata-sections -w -Werror -fms-extensions +LOCAL_LDFLAGS += -Wl,--gc-sections,--strip-all +LOCAL_ARM_MODE := arm + +LOCAL_CPP_FEATURES := exceptions +LOCAL_STATIC_LIBRARIES := libdobby xdl +LOCAL_LDLIBS := -llog -landroid -lz +include $(BUILD_SHARED_LIBRARY) diff --git a/Bcore/src/main/cpp/Application.mk b/Bcore/src/main/cpp/Application.mk new file mode 100644 index 0000000..e9cabc3 --- /dev/null +++ b/Bcore/src/main/cpp/Application.mk @@ -0,0 +1,8 @@ +APP_ABI := armeabi-v7a arm64-v8a +APP_PLATFORM := android-24 +APP_STL := c++_static +APP_OPTIM := release +APP_THIN_ARCHIVE := true +APP_PIE := true +APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true + diff --git a/Bcore/src/main/cpp/BoxCore.cpp b/Bcore/src/main/cpp/BoxCore.cpp new file mode 100644 index 0000000..17c31fb --- /dev/null +++ b/Bcore/src/main/cpp/BoxCore.cpp @@ -0,0 +1,182 @@ +// +// updated by alex5402 on 4/9/21. +// + +#include "BoxCore.h" +#include "Log.h" +#include "IO.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "Utils/HexDump.h" +#include "hidden_api.h" +/** + * updated by alex5402 on 4/9/21. + * * ∧_∧ + * (`・ω・∥ + * 丶 つ0 + * しーJ + * TFNQw5HgWUS33Ke1eNmSFTwoQySGU7XNsK (USDT TRC20) + */ +struct { + JavaVM *vm; + jclass NativeCoreClass; + jmethodID getCallingUidId; + jmethodID redirectPathString; + jmethodID redirectPathFile; + jmethodID loadEmptyDex; + jmethodID loadEmptyDexL; + int api_level; +} VMEnv; + + +JNIEnv *getEnv() { + JNIEnv *env; + VMEnv.vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_6); + return env; +} + +JNIEnv *ensureEnvCreated() { + JNIEnv *env = getEnv(); + if (env == NULL) { + VMEnv.vm->AttachCurrentThread(&env, NULL); + } + return env; +} + +int BoxCore::getCallingUid(JNIEnv *env, int orig) { + env = ensureEnvCreated(); + return env->CallStaticIntMethod(VMEnv.NativeCoreClass, VMEnv.getCallingUidId, orig); +} + +jstring BoxCore::redirectPathString(JNIEnv *env, jstring path) { + env = ensureEnvCreated(); + return (jstring) env->CallStaticObjectMethod(VMEnv.NativeCoreClass, VMEnv.redirectPathString, path); +} + +jobject BoxCore::redirectPathFile(JNIEnv *env, jobject path) { + env = ensureEnvCreated(); + return env->CallStaticObjectMethod(VMEnv.NativeCoreClass, VMEnv.redirectPathFile, path); +} + +jlongArray BoxCore::loadEmptyDex(JNIEnv *env) { + env = ensureEnvCreated(); + return (jlongArray) env->CallStaticObjectMethod(VMEnv.NativeCoreClass, VMEnv.loadEmptyDex); +} + +int BoxCore::getApiLevel() { + return VMEnv.api_level; +} + +JavaVM *BoxCore::getJavaVM() { + return VMEnv.vm; +} + +void nativeHook(JNIEnv *env) { + BaseHook::init(env); + UnixFileSystemHook::init(env); + FileSystemHook::init(); + VMClassLoaderHook::init(env); +// RuntimeHook::init(env); + BinderHook::init(env); + DexFileHook::init(env); +} + +void hideXposed(JNIEnv *env, jclass clazz) { + ALOGD("set hideXposed"); + VMClassLoaderHook::hideXposed(); +} + +void init(JNIEnv *env, jobject clazz, jint api_level) { + ALOGD("NativeCore init."); + VMEnv.api_level = api_level; + VMEnv.NativeCoreClass = (jclass) env->NewGlobalRef(env->FindClass(VMCORE_CLASS)); + VMEnv.getCallingUidId = env->GetStaticMethodID(VMEnv.NativeCoreClass, "getCallingUid", "(I)I"); + VMEnv.redirectPathString = env->GetStaticMethodID(VMEnv.NativeCoreClass, "redirectPath", + "(Ljava/lang/String;)Ljava/lang/String;"); + VMEnv.redirectPathFile = env->GetStaticMethodID(VMEnv.NativeCoreClass, "redirectPath", + "(Ljava/io/File;)Ljava/io/File;"); + VMEnv.loadEmptyDex = env->GetStaticMethodID(VMEnv.NativeCoreClass, "loadEmptyDex", + "()[J"); + + JniHook::InitJniHook(env, api_level); +} + +void addIORule(JNIEnv *env, jclass clazz, jstring target_path, + jstring relocate_path) { + ALOGD("set addIORule"); + IO::addRule(env->GetStringUTFChars(target_path, JNI_FALSE), + env->GetStringUTFChars(relocate_path, JNI_FALSE)); +} + +void enableIO(JNIEnv *env, jclass clazz) { + ALOGD("set enableIO"); + IO::init(env); + nativeHook(env); +} + +bool disableHiddenApi(JNIEnv *env, jclass clazz) { + ALOGD("set disableHiddenApi"); + if(!disable_hidden_api(env)){ + ALOGD("set disableHiddenApi Fail!!!"); + return false; + } + return true; +} + +bool disableResourceLoading(JNIEnv *env, jclass clazz) { + ALOGD("set disableResourceLoading"); + if(!disable_resource_loading()){ + ALOGD("set disableResourceLoading Fail!!!"); + return false; + } + return true; +} + +static JNINativeMethod gMethods[] = { + {"disableHiddenApi", "()Z", (void *) disableHiddenApi}, + {"disableResourceLoading", "()Z", (void *) disableResourceLoading}, + {"hideXposed", "()V", (void *) hideXposed}, + {"addIORule", "(Ljava/lang/String;Ljava/lang/String;)V", (void *) addIORule}, + {"enableIO", "()V", (void *) enableIO}, + {"init", "(I)V", (void *) init}, +}; + +int registerNativeMethods(JNIEnv *env, const char *className, + JNINativeMethod *gMethods, int numMethods) { + jclass clazz; + clazz = env->FindClass(className); + if (clazz == nullptr) { + return JNI_FALSE; + } + if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) { + return JNI_FALSE; + } + return JNI_TRUE; +} + +int registerNatives(JNIEnv *env) { + if (!registerNativeMethods(env, VMCORE_CLASS, gMethods, + sizeof(gMethods) / sizeof(gMethods[0]))) + return JNI_FALSE; + return JNI_TRUE; +} + +void registerMethod(JNIEnv *jenv) { + registerNatives(jenv); +} + +JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { + JNIEnv *env; + VMEnv.vm = vm; + if (vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_6) != JNI_OK) { + return JNI_EVERSION; + } + registerMethod(env); + return JNI_VERSION_1_6; +} \ No newline at end of file diff --git a/Bcore/src/main/cpp/BoxCore.h b/Bcore/src/main/cpp/BoxCore.h new file mode 100644 index 0000000..a1aba9d --- /dev/null +++ b/Bcore/src/main/cpp/BoxCore.h @@ -0,0 +1,23 @@ +// +// updated by alex5402 on 4/9/21. +// + +#ifndef VIRTUALM_VMCORE_H +#define VIRTUALM_VMCORE_H + +#include + +#define VMCORE_CLASS "top/niunaijun/blackbox/core/NativeCore" + +class BoxCore { +public: + static JavaVM *getJavaVM(); + static int getApiLevel(); + static int getCallingUid(JNIEnv *env, int orig); + static jstring redirectPathString(JNIEnv *env, jstring path); + static jobject redirectPathFile(JNIEnv *env, jobject path); + static jlongArray loadEmptyDex(JNIEnv *env); +}; + + +#endif //VIRTUALM_VMCORE_H diff --git a/Bcore/src/main/cpp/Dobby/arm64-v8a/libdobby.a b/Bcore/src/main/cpp/Dobby/arm64-v8a/libdobby.a new file mode 100644 index 0000000000000000000000000000000000000000..c9a4b11b7a3937b55267e355d5810e5367c83f95 GIT binary patch literal 366194 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