Skip to content

Commit

Permalink
Implemented reverse engineering detection
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewtsmith committed May 1, 2023
1 parent a9cfc00 commit 9680fdf
Show file tree
Hide file tree
Showing 12 changed files with 108 additions and 47 deletions.
3 changes: 3 additions & 0 deletions .idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 19 additions & 19 deletions .idea/libraries/Dart_SDK.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 1 addition & 3 deletions .idea/libraries/Flutter_Plugins.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

59 changes: 46 additions & 13 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ class FlutterJailbreakDetectionPlugin : FlutterPlugin, MethodCallHandler {
result.success(rootBeer.isRooted)
} else if (call.method.equals("developerMode")) {
result.success(isDevMode())
} else if (call.method.equals("reverseEngineered")) {
result.success(false)
} else {
result.notImplemented()
}
Expand Down
2 changes: 1 addition & 1 deletion example/.flutter-plugins-dependencies
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_jailbreak_detection","path":"C:\\\\Users\\\\jeroe\\\\Developer\\\\appmire\\\\github\\\\flutter_jailbreak_detection\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"flutter_jailbreak_detection","path":"C:\\\\Users\\\\jeroe\\\\Developer\\\\appmire\\\\github\\\\flutter_jailbreak_detection\\\\","native_build":true,"dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"flutter_jailbreak_detection","dependencies":[]}],"date_created":"2023-01-11 11:23:19.525873","version":"3.3.10"}
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_jailbreak_detection","path":"/Users/matthew/AppTree/flutter_jailbreak_detection_apptree/","native_build":true,"dependencies":[]}],"android":[{"name":"flutter_jailbreak_detection","path":"/Users/matthew/AppTree/flutter_jailbreak_detection_apptree/","native_build":true,"dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"flutter_jailbreak_detection","dependencies":[]}],"date_created":"2023-05-01 09:29:27.499181","version":"3.7.10"}
9 changes: 5 additions & 4 deletions example/ios/Flutter/flutter_export_environment.sh
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
#!/bin/sh
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=C:\Users\jeroe\fvm\versions\3.3.10"
export "FLUTTER_APPLICATION_PATH=C:\Users\jeroe\Developer\appmire\github\flutter_jailbreak_detection\example"
export "FLUTTER_ROOT=/Users/matthew/fvm/versions/stable"
export "FLUTTER_APPLICATION_PATH=/Users/matthew/AppTree/flutter_jailbreak_detection_apptree/example"
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_TARGET=lib\main.dart"
export "FLUTTER_TARGET=/Users/matthew/AppTree/flutter_jailbreak_detection_apptree/example/lib/main.dart"
export "FLUTTER_BUILD_DIR=build"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1"
export "DART_DEFINES=Zmx1dHRlci5pbnNwZWN0b3Iuc3RydWN0dXJlZEVycm9ycz10cnVl,RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ=="
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true"
export "TREE_SHAKE_ICONS=false"
export "PACKAGE_CONFIG=.dart_tool/package_config.json"
export "PACKAGE_CONFIG=/Users/matthew/AppTree/flutter_jailbreak_detection_apptree/example/.dart_tool/package_config.json"
4 changes: 3 additions & 1 deletion example/ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objectVersion = 54;
objects = {

/* Begin PBXBuildFile section */
Expand Down Expand Up @@ -206,6 +206,7 @@
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
Expand All @@ -220,6 +221,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
Expand Down
2 changes: 2 additions & 0 deletions example/ios/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,7 @@
<false/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>
19 changes: 15 additions & 4 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class MyApp extends StatefulWidget {
class _MyAppState extends State<MyApp> {
bool? _jailbroken;
bool? _developerMode;
bool? _reverseEngineered;

@override
void initState() {
Expand All @@ -25,13 +26,16 @@ class _MyAppState extends State<MyApp> {
Future<void> initPlatformState() async {
bool jailbroken;
bool developerMode;
bool reverseEngineered;
// Platform messages may fail, so we use a try/catch PlatformException.
try {
jailbroken = await FlutterJailbreakDetection.jailbroken;
developerMode = await FlutterJailbreakDetection.developerMode;
reverseEngineered = await FlutterJailbreakDetection.reverseEngineered;
} on PlatformException {
jailbroken = true;
developerMode = true;
reverseEngineered = true;
}

// If the widget was removed from the tree while the asynchronous platform
Expand All @@ -42,6 +46,7 @@ class _MyAppState extends State<MyApp> {
setState(() {
_jailbroken = jailbroken;
_developerMode = developerMode;
_reverseEngineered = reverseEngineered;
});
}

Expand All @@ -52,10 +57,16 @@ class _MyAppState extends State<MyApp> {
appBar: AppBar(
title: const Text('Jailbroken plugin example app'),
),
body: Center(
child: Column( mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[Text('Jailbroken: ${_jailbroken == null ? "Unknown" : _jailbroken! ? "YES" : "NO"}'),
Text('Developer mode: ${_developerMode == null ? "Unknown" : _developerMode! ? "YES" : "NO"}')
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Jailbroken: ${_jailbroken == null ? "Unknown" : _jailbroken! ? "YES" : "NO"}'),
Text(
'Developer mode: ${_developerMode == null ? "Unknown" : _developerMode! ? "YES" : "NO"}'),
Text(
'Reverse engineered: ${_reverseEngineered == null ? "Unknown" : _reverseEngineered! ? "YES" : "NO"}')
],
),
),
Expand Down
7 changes: 5 additions & 2 deletions ios/Classes/SwiftFlutterJailbreakDetectionPlugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@ public class SwiftFlutterJailbreakDetectionPlugin: NSObject, FlutterPlugin {
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
switch call.method {
case "jailbroken":

let check2 = IOSSecuritySuite.amIJailbroken()
result(check2)
break
case "developerMode":
result(IOSSecuritySuite.amIRunInEmulator())
break
break;
case "reverseEngineered":
result(IOSSecuritySuite.amIReverseEngineered());
break;
default:
result(FlutterMethodNotImplemented)
}
Expand Down
6 changes: 6 additions & 0 deletions lib/flutter_jailbreak_detection.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,10 @@ class FlutterJailbreakDetection {
bool? developerMode = await _channel.invokeMethod<bool>('developerMode');
return developerMode ?? true;
}

static Future<bool> get reverseEngineered async {
bool? reverseEngineered =
await _channel.invokeMethod<bool>('reverseEngineered');
return reverseEngineered ?? true;
}
}

0 comments on commit 9680fdf

Please sign in to comment.