搜索插件、代码仓与 APP 分类

插件详情v1.2.3

jailbreak_root_detection

使用 RootBeer + DetectFrida 进行 Android 根检测,使用 IOSSecuritySuite 进行 iOS 越狱检测。

AndroidiOS
近 30 天下载
2.3万
喜欢数
71
Pub 分数
150

安装插件

flutter pub add jailbreak_root_detection

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个 Flutter 包,使用可信库在 Android 上检测 root 访问权限,在 iOS 上检测越狱状态:Android 使用 RootBeer,iOS 使用 IOSSecuritySuite。它提供统一的 API 来检查设备完整性,帮助开发者保护应用免受篡改环境的影响。该包可通过简单的添加命令无缝集成到 Flutter 项目中,并支持两大主流移动平台。非常适合用于保护银行或认证系统等敏感应用程序。

适合场景

  • 保护金融应用程序免受越狱/越狱设备的影响
  • 防止未经授权的应用程序修改
  • 增强身份验证流程中的安全性
  • 检测被入侵的设备环境
  • 强制执行安全执行条件

主要特点

  • 结合 RootBeer 和 DetectFrida 用于 Android
  • 使用 IOSSecuritySuite 用于 iOS
  • 跨平台检测支持
  • Flutter 的简单集成
  • 轻量且可靠
  • 实时设备完整性检查

适合对象

  • 注重安全的移动应用
  • 需要高完整性验证的应用程序
  • 金融和企业级应用
  • 开发防篡改功能的开发者
  • 针对 Android 和 iOS 的项目

使用建议

  • 可能会在某些模拟器上触发误报
  • 需要在两个平台上执行原生代码
  • 仅限根目录/越狱检测
  • 未包含运行时缓解措施
  • 依赖第三方库的更新

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

jailbreak_root_detection

pub package license

Detects rooted, jailbroken, tampered and otherwise untrusted devices from Flutter.

Uses RootBeer + Magisk and Frida checks for Android root detection, and IOSSecuritySuite (~> 1.9.10) for iOS jailbreak detection.

Requirements

Minimum
Flutter 3.44.0
Dart SDK 3.12.0
Android minSdk 21, compileSdk 34, Java/Kotlin 17
iOS 11.0

The iOS side ships as a Swift Package (Swift Package Manager). A CocoaPods podspec is still included, so both dependency managers work.

Getting started

Add the dependency to your pubspec.yaml:

dependencies:
  jailbreak_root_detection: "^1.2.3"

Or:

flutter pub add jailbreak_root_detection
iOS setup

To let the plugin probe for jailbreak-related URL schemes, add them to ios/Runner/Info.plist:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>undecimus</string>
    <string>sileo</string>
    <string>zbra</string>
    <string>filza</string>
    <string>activator</string>
    <string>cydia</string>
</array>

Without this entry iOS blocks the canOpenURL checks and jailbreak detection is less accurate.

Android setup

No extra configuration required.

Usage

import 'package:jailbreak_root_detection/jailbreak_root_detection.dart';

final detector = JailbreakRootDetection.instance;

// One combined verdict — the usual entry point.
final isNotTrust = await detector.isNotTrust;
if (isNotTrust) {
  // Block, warn, or degrade functionality.
}
API
Member Returns Android iOS Description
isNotTrust Future<bool> ✅ ✅ Combined verdict: jailbroken/rooted, not a real device, or (Android) installed on external storage. Returns true if any check throws.
isJailBroken Future<bool> ✅ ✅ Rooted (RootBeer, Frida, Magisk) on Android; jailbroken on iOS.
isRealDevice Future<bool> ✅ ✅ false on an emulator or simulator.
isDebugged Future<bool> ✅ ✅ A debugger is attached to the process.
isDevMode Future<bool> ✅ — Developer options are enabled.
isOnExternalStorage Future<bool> ✅ — The app is installed on external storage.
isTampered(String bundleId) Future<bool> — ✅ The app bundle/signature has been modified.
checkForIssues Future<List<JailbreakIssue>> ✅ ✅ All detected issues in one call.

Android-only members throw a MissingPluginException on iOS and vice versa, so guard them with Platform.isAndroid / Platform.isIOS:

if (Platform.isAndroid) {
  final isOnExternalStorage = await detector.isOnExternalStorage;
  final isDevMode = await detector.isDevMode;
}

if (Platform.isIOS) {
  const bundleId = 'com.w3conext.jailbreakRootDetectionExample';
  final isTampered = await detector.isTampered(bundleId);
}
checkForIssues

checkForIssues runs every check the platform supports and returns only the problems it found — an empty list means the device looks clean.

final issues = await detector.checkForIssues;
for (final issue in issues) {
  print('issue: $issue');
}
JailbreakIssue Android iOS Meaning
jailbreak ✅ ✅ Device is rooted or jailbroken.
notRealDevice ✅ ✅ Running on an emulator or simulator.
debugged ✅ ✅ A debugger is attached.
fridaFound ✅ ✅ The Frida instrumentation framework was detected.
devMode ✅ — Developer options are enabled.
onExternalStorage ✅ — App is installed on external storage.
proxied — ✅ An HTTP proxy is configured.
reverseEngineered — ✅ Reverse-engineering tooling was detected.
cydiaFound — ✅ Cydia was detected.
tampered — — Reported only by isTampered(bundleId), not by checkForIssues.
unknown ✅ ✅ An issue this Dart version doesn't recognise. Android currently reports Magisk detection here.

Handle unknown as untrusted rather than ignoring it.

Important: test on real devices only

This package must be tested on a physical device.

Running on an emulator or simulator may cause false positives — for example, detection may incorrectly report that the device is jailbroken or rooted.

Example

See example/lib/main.dart for a complete app that runs every check and prints the results.

Reference

License

MIT

所属分类

源码仓库

使用此插件的项目

暂无相关数据。