Flutter设备Root状态检测插件rootcheck_pro的使用

Flutter设备Root状态检测插件rootcheck_pro的使用

License

RootCheck_Pro 是一个全面的库,用于检测Android设备上的Root访问和越狱状态。它帮助开发者确保他们的应用程序在未被未经授权修改的设备上安全运行。

特性

  • Root检测:识别设备是否已被Root。
  • 越狱检测:检查Android设备是否有越狱迹象。
  • Root伪装检测:检测试图隐藏Root状态的应用程序和方法。
  • 危险应用检测:识别安装在设备上的潜在有害应用。
  • 超级用户路径检测:检查是否存在常见的超级用户路径。

安装

基于 RootBeerRootInspectorDetectMagiskHide 用于Android, 和 IOSSecuritySuite 用于iOS。 我正在开发一个Flutter包,在其中复制并修改了一些代码以创建root_jailbreak_sniffer包。 root_jailbreak_sniffer

开始使用

安装

flutter pub add root_jailbreak_sniffer

或在你的包的pubspec.yaml文件中添加以下行:

dependencies:
  root_jailbreak_sniffer: ^1.0.6

平台特定配置

Android

无需配置。

iOS

在/ios/Runner/目录下的Info.plist文件中添加以下行:

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

使用

import 'package:root_jailbreak_sniffer/rjsniffer.dart';

bool amICompromised = await Rjsniffer.amICompromised() ?? false;     // 检测越狱和Root
bool amIEmulator = await Rjsniffer.amIEmulator() ?? false;           // 检测模拟器环境
bool amIDebugged = await Rjsniffer.amIDebugged() ?? false;           // 检测调试状态

完整示例代码

示例代码

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:root_jailbreak_sniffer/rjsniffer.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  bool _amICompromised = false;
  bool _amIEmulator = false;
  bool _amIDebugged = false;
  bool _isMagisk = false;

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
    WidgetsBinding.instance.addObserver(this);
  }

  [@override](/user/override)
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  [@override](/user/override)
  void didChangeAppLifecycleState(AppLifecycleState state) {
    switch (state) {
      case AppLifecycleState.resumed:
        initPlatformState();
        break;
      case AppLifecycleState.paused:
        break;
      case AppLifecycleState.inactive:
        break;
      case AppLifecycleState.detached:
        break;
      case AppLifecycleState.hidden:
        break;
    }
  }

  // 平台消息是异步的,因此我们在异步方法中初始化。
  Future<void> initPlatformState() async {
    bool amICompromised = false;
    bool amIEmulator = false;
    bool amIDebugged = false;
    bool isMagisk = false;
    // 平台消息可能会失败,因此我们使用try/catch来捕获PlatformException。
    // 我们还处理消息可能返回null的情况。
    try {
      amICompromised = await Rjsniffer.amICompromised() ?? false;
      amIEmulator = await Rjsniffer.amIEmulator() ?? false;
      amIDebugged = await Rjsniffer.amIDebugged() ?? false;
      isMagisk = await Rjsniffer.isMagisk() ?? false;
    } catch (e) {
      print("任何错误 $e");
      // 平台调用失败
    }

    // 如果小部件从树中移除而异步平台消息还在飞行中,我们想要丢弃回复而不是调用
    // setState来更新我们的不存在的外观。
    if (!mounted) return;

    setState(() {
      _amICompromised = amICompromised;
      _amIEmulator = amIEmulator;
      _amIDebugged = amIDebugged;
      _isMagisk = isMagisk;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Column(children: [
          Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                const SizedBox(
                  height: 150,
                ),
                Text('Am I Compromised: $_amICompromised\n'),
                Text('Am I Emulator: $_amIEmulator\n'),
                Text('Am I Debugged: $_amIDebugged\n'),
                Text('Am I Magisk: $_isMagisk\n'),
              ],
            ),
          )
        ]),
      ),
    );
  }
}

更多关于Flutter设备Root状态检测插件rootcheck_pro的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter设备Root状态检测插件rootcheck_pro的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 应用中,检测设备是否已 Root 是一个常见的需求,尤其是当你需要确保应用运行在安全的、未经篡改的设备上时。rootcheck_pro 是一个用于检测 Android 设备是否已 Root 的 Flutter 插件。

以下是如何使用 rootcheck_pro 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 rootcheck_pro 依赖:

dependencies:
  flutter:
    sdk: flutter
  rootcheck_pro: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 以获取依赖。

2. 导入插件

在你的 Dart 文件中导入 rootcheck_pro 插件:

import 'package:rootcheck_pro/rootcheck_pro.dart';

3. 检测设备是否已 Root

使用 RootCheck.isRooted 方法来检测设备是否已 Root。以下是一个简单的示例:

void checkRootStatus() async {
  bool isRooted = await RootCheck.isRooted;
  
  if (isRooted) {
    print('设备已 Root');
    // 你可以在这里处理设备已 Root 的情况
  } else {
    print('设备未 Root');
    // 你可以在这里处理设备未 Root 的情况
  }
}

4. 处理回调

RootCheck.isRooted 返回一个 Future<bool>,你可以使用 await 来等待结果,或者使用 then 来处理回调:

RootCheck.isRooted.then((isRooted) {
  if (isRooted) {
    print('设备已 Root');
  } else {
    print('设备未 Root');
  }
});

5. 处理异常

在检测过程中可能会抛出异常,建议在使用时使用 try-catch 块来捕获异常:

void checkRootStatus() async {
  try {
    bool isRooted = await RootCheck.isRooted;
    
    if (isRooted) {
      print('设备已 Root');
    } else {
      print('设备未 Root');
    }
  } catch (e) {
    print('检测 Root 状态时出错: $e');
  }
}
回到顶部