240 lines
8.3 KiB
Dart
240 lines
8.3 KiB
Dart
// import 'dart:io';
|
|
|
|
// import 'package:device_info_plus/device_info_plus.dart';
|
|
|
|
import 'dart:async';
|
|
import 'dart:io';
|
|
import 'package:device_info_plus/device_info_plus.dart';
|
|
|
|
class DeviceHelper {
|
|
static Future<String> getDeviceFingerprint() async {
|
|
final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
|
|
var deviceData;
|
|
|
|
try {
|
|
if (Platform.isAndroid) {
|
|
// Fetch Android-specific device information
|
|
AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo;
|
|
deviceData = androidInfo.toMap(); // Convert to a map for easier access
|
|
// Log.print('deviceData: ${jsonEncode(deviceData)}');
|
|
} else if (Platform.isIOS) {
|
|
// Fetch iOS-specific device information
|
|
IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo;
|
|
deviceData = iosInfo.toMap(); // Convert to a map for easier access
|
|
} else if (Platform.isMacOS) {
|
|
// Fetch macOS-specific device information
|
|
MacOsDeviceInfo macInfo = await deviceInfoPlugin.macOsInfo;
|
|
deviceData = macInfo.toMap();
|
|
} else {
|
|
throw UnsupportedError('Unsupported platform');
|
|
}
|
|
|
|
String deviceId = 'unknown';
|
|
if (Platform.isAndroid) {
|
|
deviceId = deviceData['fingerprint'] ?? 'unknown';
|
|
} else if (Platform.isIOS) {
|
|
deviceId = deviceData['identifierForVendor'] ?? 'unknown';
|
|
} else if (Platform.isMacOS) {
|
|
deviceId = deviceData['systemGUID'] ?? 'unknown';
|
|
}
|
|
|
|
final String deviceModel = deviceData['model'] ?? 'unknown';
|
|
|
|
final String fingerprint = '${deviceId}_$deviceModel';
|
|
print(fingerprint);
|
|
return (fingerprint);
|
|
} catch (e) {
|
|
throw Exception('Failed to generate device fingerprint');
|
|
}
|
|
}
|
|
}
|
|
|
|
class SecurityHelper {
|
|
/// Performs security checks and handles potential risks
|
|
static Future<void> performSecurityChecks() async {
|
|
bool isNotTrust = false;
|
|
bool isJailBroken = false;
|
|
bool isRealDevice = true;
|
|
bool isOnExternalStorage = false;
|
|
bool checkForIssues = false;
|
|
bool isDevMode = false;
|
|
bool isTampered = false;
|
|
String bundleId = "";
|
|
|
|
try {
|
|
isNotTrust = await JailbreakRootDetection.instance.isNotTrust;
|
|
isJailBroken = await JailbreakRootDetection.instance.isJailBroken;
|
|
isRealDevice = await JailbreakRootDetection.instance.isRealDevice;
|
|
isOnExternalStorage =
|
|
await JailbreakRootDetection.instance.isOnExternalStorage;
|
|
|
|
List<JailbreakIssue> issues =
|
|
await JailbreakRootDetection.instance.checkForIssues;
|
|
checkForIssues = issues.isNotEmpty;
|
|
|
|
isDevMode = await JailbreakRootDetection.instance.isDevMode;
|
|
|
|
PackageInfo packageInfo = await PackageInfo.fromPlatform();
|
|
bundleId = packageInfo.packageName;
|
|
if (bundleId.isNotEmpty) {
|
|
isTampered = await JailbreakRootDetection.instance.isTampered(bundleId);
|
|
}
|
|
} catch (e) {
|
|
debugPrint("Error during security checks: $e");
|
|
}
|
|
|
|
await box.write('isNotTrust', isNotTrust);
|
|
await box.write('isTampered', isTampered);
|
|
await box.write('isJailBroken', isJailBroken);
|
|
|
|
if (isJailBroken || isRealDevice == false || isTampered) {
|
|
_showSecurityWarning();
|
|
}
|
|
}
|
|
|
|
static Future<void> clearAllData() async {
|
|
await box.erase();
|
|
exit(0);
|
|
}
|
|
|
|
static void _showSecurityWarning() {
|
|
RxInt secondsRemaining = 10.obs;
|
|
|
|
Get.dialog(
|
|
CupertinoAlertDialog(
|
|
title: Text("Security Warning".tr),
|
|
content: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
Obx(() => Text(
|
|
"Potential security risks detected. The application will close in @seconds seconds."
|
|
.trParams({
|
|
'seconds': secondsRemaining.value.toString(),
|
|
}),
|
|
)),
|
|
SizedBox(height: 24),
|
|
Obx(() => SizedBox(
|
|
width: double.infinity,
|
|
child: CupertinoActivityIndicator(
|
|
radius: 15,
|
|
animating: true,
|
|
))),
|
|
SizedBox(height: 8),
|
|
Obx(() => ClipRRect(
|
|
borderRadius: BorderRadius.circular(8),
|
|
child: LinearProgressIndicator(
|
|
value: secondsRemaining.value / 10,
|
|
backgroundColor: Colors.grey.shade300,
|
|
valueColor: AlwaysStoppedAnimation<Color>(
|
|
CupertinoColors.systemRed),
|
|
minHeight: 8,
|
|
),
|
|
)),
|
|
],
|
|
),
|
|
),
|
|
barrierDismissible: false,
|
|
);
|
|
|
|
Timer.periodic(Duration(seconds: 1), (timer) {
|
|
secondsRemaining.value--;
|
|
if (secondsRemaining.value <= 0) {
|
|
timer.cancel();
|
|
_clearDataAndExit();
|
|
}
|
|
});
|
|
}
|
|
|
|
static Future<void> _clearDataAndExit() async {
|
|
await box.erase();
|
|
exit(0);
|
|
}
|
|
}
|
|
|
|
// class DeviceInfoPlus {
|
|
// static List<Map<String, dynamic>> deviceDataList = [];
|
|
|
|
// static Future<List<Map<String, dynamic>>> getDeviceInfo() async {
|
|
// final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
|
|
|
|
// try {
|
|
// if (Platform.isAndroid) {
|
|
// AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo;
|
|
// Map<String, dynamic> deviceData = {
|
|
// 'platform': 'Android',
|
|
// 'brand': androidInfo.brand,
|
|
// 'model': androidInfo.model,
|
|
// 'androidId': androidInfo.device,
|
|
// 'versionRelease': androidInfo.version.release,
|
|
// 'sdkVersion': androidInfo.version.sdkInt,
|
|
// 'manufacturer': androidInfo.manufacturer,
|
|
// 'isPhysicalDevice': androidInfo.isPhysicalDevice,
|
|
// 'serialNumber': androidInfo.serialNumber,
|
|
// 'fingerprint': androidInfo.fingerprint,
|
|
// 'type': androidInfo.type,
|
|
// 'data': androidInfo.data,
|
|
// 'version': androidInfo.version,
|
|
// 'tags': androidInfo.tags,
|
|
// 'display': androidInfo.display,
|
|
// };
|
|
// deviceDataList.add(deviceData);
|
|
// } else if (Platform.isIOS) {
|
|
// IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo;
|
|
// Map<String, dynamic> deviceData = {
|
|
// 'brand': 'Apple',
|
|
// 'model': iosInfo.model,
|
|
// 'systemName': iosInfo.systemName,
|
|
// 'systemVersion': iosInfo.systemVersion,
|
|
// 'utsname': iosInfo.utsname,
|
|
// 'isPhysicalDevice': iosInfo.isPhysicalDevice,
|
|
// 'identifierForVendor': iosInfo.identifierForVendor,
|
|
// 'name': iosInfo.name,
|
|
// 'localizedModel': iosInfo.localizedModel,
|
|
// };
|
|
// deviceDataList.add(deviceData);
|
|
// } else if (Platform.isMacOS) {
|
|
// MacOsDeviceInfo macInfo = await deviceInfoPlugin.macOsInfo;
|
|
// Map<String, dynamic> deviceData = {
|
|
// 'platform': 'macOS',
|
|
// 'model': macInfo.model,
|
|
// 'version': macInfo.systemGUID,
|
|
// };
|
|
// deviceDataList.add(deviceData);
|
|
// } else if (Platform.isWindows) {
|
|
// WindowsDeviceInfo windowsInfo = await deviceInfoPlugin.windowsInfo;
|
|
// Map<String, dynamic> deviceData = {
|
|
// 'platform': 'Windows',
|
|
// 'manufacturer': windowsInfo.computerName,
|
|
// 'version': windowsInfo.majorVersion,
|
|
// 'deviceId': windowsInfo.deviceId,
|
|
// 'userName': windowsInfo.userName,
|
|
// 'productName': windowsInfo.productName,
|
|
// 'installDate': windowsInfo.installDate,
|
|
// 'productId': windowsInfo.productId,
|
|
// 'numberOfCores': windowsInfo.numberOfCores,
|
|
// 'systemMemoryInMegabytes': windowsInfo.systemMemoryInMegabytes,
|
|
// };
|
|
// deviceDataList.add(deviceData);
|
|
// } else if (Platform.isLinux) {
|
|
// LinuxDeviceInfo linuxInfo = await deviceInfoPlugin.linuxInfo;
|
|
// Map<String, dynamic> deviceData = {
|
|
// 'platform': 'Linux',
|
|
// 'manufacturer': linuxInfo.name,
|
|
// 'version': linuxInfo.version,
|
|
// };
|
|
// deviceDataList.add(deviceData);
|
|
// }
|
|
// } catch (e) {
|
|
// }
|
|
|
|
// return deviceDataList;
|
|
// }
|
|
|
|
// // Method to print all device data
|
|
// static void printDeviceInfo() {
|
|
// for (Map<String, dynamic> deviceData in deviceDataList) {
|
|
// 'Version: ${deviceData['version'] ?? deviceData['versionRelease'] ?? 'N/A'}');
|
|
// }
|
|
// }
|
|
// }
|