freerasp-react-native 4.5.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/freeraspreactnative/FreeraspReactNativeModule.kt +4 -6
- package/android/src/main/java/com/freeraspreactnative/models/RNSuspiciousAppInfo.kt +1 -1
- package/android/src/main/java/com/freeraspreactnative/utils/Extensions.kt +22 -2
- package/lib/commonjs/api/methods/native.js +2 -1
- package/lib/commonjs/api/methods/native.js.map +1 -1
- package/lib/commonjs/utils/config.js +31 -0
- package/lib/commonjs/utils/config.js.map +1 -0
- package/lib/commonjs/utils/malware.js +1 -1
- package/lib/commonjs/utils/malware.js.map +1 -1
- package/lib/module/api/methods/native.js +2 -1
- package/lib/module/api/methods/native.js.map +1 -1
- package/lib/module/utils/config.js +23 -0
- package/lib/module/utils/config.js.map +1 -0
- package/lib/module/utils/malware.js +1 -1
- package/lib/module/utils/malware.js.map +1 -1
- package/lib/typescript/src/api/methods/native.d.ts.map +1 -1
- package/lib/typescript/src/types/types.d.ts +16 -8
- package/lib/typescript/src/types/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/config.d.ts +4 -0
- package/lib/typescript/src/utils/config.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/api/methods/native.ts +2 -1
- package/src/types/types.ts +25 -9
- package/src/utils/config.ts +42 -0
- package/src/utils/malware.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,42 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [5.0.0] - 2026-05-15
|
|
9
|
+
|
|
10
|
+
- Android SDK version: 18.3.0
|
|
11
|
+
- iOS SDK version: 6.14.4
|
|
12
|
+
|
|
13
|
+
### Breaking
|
|
14
|
+
|
|
15
|
+
- `SuspiciousAppInfo.reason` (String) renamed to `reasons` (string[])
|
|
16
|
+
- Value `"blacklist"` in `reasons` renamed to `"blocklist"`
|
|
17
|
+
- Removed `MalwareConfig` and `AndroidConfig.malwareConfig`
|
|
18
|
+
|
|
19
|
+
### React Native
|
|
20
|
+
|
|
21
|
+
#### Removed
|
|
22
|
+
|
|
23
|
+
- `TalsecMalwareConfig` type and `TalsecAndroidConfig.malwareConfig` field
|
|
24
|
+
|
|
25
|
+
### Android
|
|
26
|
+
|
|
27
|
+
#### Added
|
|
28
|
+
|
|
29
|
+
- New API class `SuspiciousAppDetectionConfig` that can be used to configure malware detection
|
|
30
|
+
- New API for malware detection configuration in `TalsecConfig`, see `TalsecConfig.Builder#suspiciousAppDetection`
|
|
31
|
+
|
|
32
|
+
#### Fixed
|
|
33
|
+
|
|
34
|
+
- Fixed `VerifyError` caused by `JaCoCo` bytecode instrumentation
|
|
35
|
+
- Fixed a potential cause of crash in the multi-instance detector
|
|
36
|
+
- Fixed Java interoperability of `ScreenProtector` methods
|
|
37
|
+
- Fixed Kotlin classpath conflicts in SDK dependency resolution (Kotlin 2.0.0)
|
|
38
|
+
|
|
39
|
+
#### Changed
|
|
40
|
+
|
|
41
|
+
- Fine-tuned location spoofing detection
|
|
42
|
+
- Modified malware incident log structure for better aggregation
|
|
43
|
+
|
|
8
44
|
## [4.5.2] - 2026-03-24
|
|
9
45
|
|
|
10
46
|
- Android SDK version: 18.0.4
|
package/android/build.gradle
CHANGED
|
@@ -105,7 +105,7 @@ dependencies {
|
|
|
105
105
|
implementation "com.facebook.react:react-native:$react_native_version"
|
|
106
106
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
107
107
|
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1"
|
|
108
|
-
implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:18.0
|
|
108
|
+
implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:18.3.0"
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
if (isNewArchitectureEnabled()) {
|
|
@@ -33,6 +33,7 @@ import com.freeraspreactnative.utils.getMapThrowing
|
|
|
33
33
|
import com.freeraspreactnative.utils.getNestedArraySafe
|
|
34
34
|
import com.freeraspreactnative.utils.getStringThrowing
|
|
35
35
|
import com.freeraspreactnative.utils.toEncodedWritableArray
|
|
36
|
+
import com.freeraspreactnative.utils.toSuspiciousAppDetectionConfig
|
|
36
37
|
|
|
37
38
|
class FreeraspReactNativeModule(private val reactContext: ReactApplicationContext) :
|
|
38
39
|
ReactContextBaseJavaModule(reactContext) {
|
|
@@ -298,12 +299,9 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
|
|
|
298
299
|
.killOnBypass(config.getBooleanSafe("killOnBypass", false))
|
|
299
300
|
.supportedAlternativeStores(androidConfig.getArraySafe("supportedAlternativeStores"))
|
|
300
301
|
|
|
301
|
-
if (androidConfig.hasKey("
|
|
302
|
-
val
|
|
303
|
-
talsecBuilder.
|
|
304
|
-
talsecBuilder.blacklistedHashes(malwareConfig.getArraySafe("blacklistedHashes"))
|
|
305
|
-
talsecBuilder.blacklistedPackageNames(malwareConfig.getArraySafe("blacklistedPackageNames"))
|
|
306
|
-
talsecBuilder.suspiciousPermissions(malwareConfig.getNestedArraySafe("suspiciousPermissions"))
|
|
302
|
+
if (androidConfig.hasKey("suspiciousAppDetectionConfig")) {
|
|
303
|
+
val suspiciousAppConfig = androidConfig.getMapThrowing("suspiciousAppDetectionConfig")
|
|
304
|
+
talsecBuilder.suspiciousAppDetection(suspiciousAppConfig.toSuspiciousAppDetectionConfig())
|
|
307
305
|
}
|
|
308
306
|
|
|
309
307
|
return talsecBuilder.build()
|
|
@@ -3,6 +3,10 @@ package com.freeraspreactnative.utils
|
|
|
3
3
|
import android.content.pm.PackageInfo
|
|
4
4
|
import android.util.Base64
|
|
5
5
|
import android.util.Log
|
|
6
|
+
import com.aheaditec.talsec_security.security.api.MalwareScanScope
|
|
7
|
+
import com.aheaditec.talsec_security.security.api.ReasonMode
|
|
8
|
+
import com.aheaditec.talsec_security.security.api.ScopeType
|
|
9
|
+
import com.aheaditec.talsec_security.security.api.SuspiciousAppDetectionConfig
|
|
6
10
|
import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo
|
|
7
11
|
import com.facebook.react.bridge.Arguments
|
|
8
12
|
import com.facebook.react.bridge.ReactContext
|
|
@@ -32,7 +36,7 @@ internal fun ReadableMap.getBooleanSafe(key: String, defaultValue: Boolean = tru
|
|
|
32
36
|
return defaultValue
|
|
33
37
|
}
|
|
34
38
|
|
|
35
|
-
|
|
39
|
+
internal inline fun <reified T> ReadableArray.toPrimitiveArray(): Array<T> {
|
|
36
40
|
val output = mutableListOf<T>()
|
|
37
41
|
|
|
38
42
|
for (i in 0 until this.size()) {
|
|
@@ -74,7 +78,7 @@ internal fun ReadableMap.getNestedArraySafe(key: String): Array<Array<String>> {
|
|
|
74
78
|
internal fun SuspiciousAppInfo.toRNSuspiciousAppInfo(context: ReactContext): RNSuspiciousAppInfo {
|
|
75
79
|
return RNSuspiciousAppInfo(
|
|
76
80
|
packageInfo = this.packageInfo.toRNPackageInfo(context),
|
|
77
|
-
|
|
81
|
+
reasons = this.reasons,
|
|
78
82
|
permissions = this.permissions
|
|
79
83
|
)
|
|
80
84
|
}
|
|
@@ -92,6 +96,22 @@ internal fun PackageInfo.toRNPackageInfo(context: ReactContext): RNPackageInfo {
|
|
|
92
96
|
)
|
|
93
97
|
}
|
|
94
98
|
|
|
99
|
+
internal fun ReadableMap.toScanScope(): MalwareScanScope {
|
|
100
|
+
val scopeType = ScopeType.valueOf(getStringThrowing("scopeType"))
|
|
101
|
+
val trustedInstallSources = getArraySafe("trustedInstallSources").toList().ifEmpty { null }
|
|
102
|
+
return MalwareScanScope(scopeType, trustedInstallSources)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
internal fun ReadableMap.toSuspiciousAppDetectionConfig(): SuspiciousAppDetectionConfig {
|
|
106
|
+
val packageNames = getArraySafe("packageNames").toSet().ifEmpty { null }
|
|
107
|
+
val hashes = getArraySafe("hashes").toSet().ifEmpty { null }
|
|
108
|
+
val requestedPermissions = getNestedArraySafe("requestedPermissions").map { it.toSet() }.toSet().ifEmpty { null }
|
|
109
|
+
val grantedPermissions = getNestedArraySafe("grantedPermissions").map { it.toSet() }.toSet().ifEmpty { null }
|
|
110
|
+
val scanScope = getMapThrowing("scanScope").toScanScope()
|
|
111
|
+
val reasonMode = ReasonMode.valueOf(getStringThrowing("reasonMode"))
|
|
112
|
+
return SuspiciousAppDetectionConfig(packageNames, hashes, requestedPermissions, grantedPermissions, scanScope, reasonMode)
|
|
113
|
+
}
|
|
114
|
+
|
|
95
115
|
/**
|
|
96
116
|
* Convert the Talsec's SuspiciousAppInfo to base64-encoded json array,
|
|
97
117
|
* which can be then sent to React Native
|
|
@@ -6,8 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.talsecStart = exports.storeExternalId = exports.removeListenerForEvent = exports.removeExternalId = exports.onInvalidCallback = exports.isScreenCaptureBlocked = exports.getAppIcon = exports.blockScreenCapture = exports.addToWhitelist = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
var _nativeModules = require("../nativeModules");
|
|
9
|
+
var _config = require("../../utils/config");
|
|
9
10
|
const talsecStart = async options => {
|
|
10
|
-
return _nativeModules.FreeraspReactNative.talsecStart(options);
|
|
11
|
+
return _nativeModules.FreeraspReactNative.talsecStart((0, _config.withDefaults)(options));
|
|
11
12
|
};
|
|
12
13
|
exports.talsecStart = talsecStart;
|
|
13
14
|
const addToWhitelist = async packageName => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_nativeModules","talsecStart","options","FreeraspReactNative","exports","addToWhitelist","packageName","Platform","OS","Promise","reject","blockScreenCapture","enable","isScreenCaptureBlocked","storeExternalId","data","removeExternalId","getAppIcon","onInvalidCallback","removeListenerForEvent","channel"],"sourceRoot":"../../../../src","sources":["api/methods/native.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_nativeModules","_config","talsecStart","options","FreeraspReactNative","withDefaults","exports","addToWhitelist","packageName","Platform","OS","Promise","reject","blockScreenCapture","enable","isScreenCaptureBlocked","storeExternalId","data","removeExternalId","getAppIcon","onInvalidCallback","removeListenerForEvent","channel"],"sourceRoot":"../../../../src","sources":["api/methods/native.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AAEO,MAAMG,WAAW,GAAG,MAAOC,OAAqB,IAAsB;EAC3E,OAAOC,kCAAmB,CAACF,WAAW,CAAC,IAAAG,oBAAY,EAACF,OAAO,CAAC,CAAC;AAC/D,CAAC;AAACG,OAAA,CAAAJ,WAAA,GAAAA,WAAA;AAEK,MAAMK,cAAc,GAAG,MAAOC,WAAmB,IAAuB;EAC7E,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CAAC,wCAAwC,CAAC;EACjE;EACA,OAAOR,kCAAmB,CAACG,cAAc,CAACC,WAAW,CAAC;AACxD,CAAC;AAACF,OAAA,CAAAC,cAAA,GAAAA,cAAA;AAEK,MAAMM,kBAAkB,GAAIC,MAAe,IAAsB;EACtE,OAAOV,kCAAmB,CAACS,kBAAkB,CAACC,MAAM,CAAC;AACvD,CAAC;AAACR,OAAA,CAAAO,kBAAA,GAAAA,kBAAA;AAEK,MAAME,sBAAsB,GAAGA,CAAA,KAAwB;EAC5D,OAAOX,kCAAmB,CAACW,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAACT,OAAA,CAAAS,sBAAA,GAAAA,sBAAA;AAEK,MAAMC,eAAe,GAAIC,IAAY,IAAsB;EAChE,OAAOb,kCAAmB,CAACY,eAAe,CAACC,IAAI,CAAC;AAClD,CAAC;AAACX,OAAA,CAAAU,eAAA,GAAAA,eAAA;AAEK,MAAME,gBAAgB,GAAGA,CAAA,KAAuB;EACrD,OAAOd,kCAAmB,CAACc,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAACZ,OAAA,CAAAY,gBAAA,GAAAA,gBAAA;AAEK,MAAMC,UAAU,GAAIX,WAAmB,IAAsB;EAClE,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,+DACF,CAAC;EACH;EACA,OAAOR,kCAAmB,CAACe,UAAU,CAACX,WAAW,CAAC;AACpD,CAAC;AAACF,OAAA,CAAAa,UAAA,GAAAA,UAAA;AAEK,MAAMC,iBAAiB,GAAGA,CAAA,KAAY;EAC3ChB,kCAAmB,CAACgB,iBAAiB,CAAC,CAAC;AACzC,CAAC;AAACd,OAAA,CAAAc,iBAAA,GAAAA,iBAAA;AAEK,MAAMC,sBAAsB,GAAIC,OAAe,IAAsB;EAC1E,OAAOlB,kCAAmB,CAACiB,sBAAsB,CAACC,OAAO,CAAC;AAC5D,CAAC;AAAChB,OAAA,CAAAe,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.withDefaults = exports.normalizeAndroidConfig = void 0;
|
|
7
|
+
const DEFAULT_SCAN_SCOPE = {
|
|
8
|
+
scopeType: 'SIDELOADED_ONLY'
|
|
9
|
+
};
|
|
10
|
+
const DEFAULT_REASON_MODE = 'HIGHEST_CONFIDENCE';
|
|
11
|
+
const withDetectionDefaults = config => ({
|
|
12
|
+
...config,
|
|
13
|
+
scanScope: config.scanScope ?? DEFAULT_SCAN_SCOPE,
|
|
14
|
+
reasonMode: config.reasonMode ?? DEFAULT_REASON_MODE
|
|
15
|
+
});
|
|
16
|
+
const normalizeAndroidConfig = androidConfig => {
|
|
17
|
+
if (!androidConfig.suspiciousAppDetectionConfig) {
|
|
18
|
+
return androidConfig;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
...androidConfig,
|
|
22
|
+
suspiciousAppDetectionConfig: withDetectionDefaults(androidConfig.suspiciousAppDetectionConfig)
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
exports.normalizeAndroidConfig = normalizeAndroidConfig;
|
|
26
|
+
const withDefaults = options => ({
|
|
27
|
+
...options,
|
|
28
|
+
androidConfig: options.androidConfig ? normalizeAndroidConfig(options.androidConfig) : undefined
|
|
29
|
+
});
|
|
30
|
+
exports.withDefaults = withDefaults;
|
|
31
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_SCAN_SCOPE","scopeType","DEFAULT_REASON_MODE","withDetectionDefaults","config","scanScope","reasonMode","normalizeAndroidConfig","androidConfig","suspiciousAppDetectionConfig","exports","withDefaults","options","undefined"],"sourceRoot":"../../../src","sources":["utils/config.ts"],"mappings":";;;;;;AAQA,MAAMA,kBAA6B,GAAG;EACpCC,SAAS,EAAE;AACb,CAAC;AAED,MAAMC,mBAA+B,GAAG,oBAAoB;AAE5D,MAAMC,qBAAqB,GACzBC,MAAoC,KACF;EAClC,GAAGA,MAAM;EACTC,SAAS,EAAED,MAAM,CAACC,SAAS,IAAIL,kBAAkB;EACjDM,UAAU,EAAEF,MAAM,CAACE,UAAU,IAAIJ;AACnC,CAAC,CAAC;AAEK,MAAMK,sBAAsB,GACjCC,aAAkC,IACV;EACxB,IAAI,CAACA,aAAa,CAACC,4BAA4B,EAAE;IAC/C,OAAOD,aAAa;EACtB;EACA,OAAO;IACL,GAAGA,aAAa;IAChBC,4BAA4B,EAAEN,qBAAqB,CACjDK,aAAa,CAACC,4BAChB;EACF,CAAC;AACH,CAAC;AAACC,OAAA,CAAAH,sBAAA,GAAAA,sBAAA;AAEK,MAAMI,YAAY,GAAIC,OAAqB,KAAoB;EACpE,GAAGA,OAAO;EACVJ,aAAa,EAAEI,OAAO,CAACJ,aAAa,GAChCD,sBAAsB,CAACK,OAAO,CAACJ,aAAa,CAAC,GAC7CK;AACN,CAAC,CAAC;AAACH,OAAA,CAAAC,YAAA,GAAAA,YAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_buffer","require","parseMalwareData","data","Promise","resolve","reject","map","entry","toSuspiciousAppInfo","error","exports","base64Value","JSON","parse","Buffer","from","toString","packageInfo","
|
|
1
|
+
{"version":3,"names":["_buffer","require","parseMalwareData","data","Promise","resolve","reject","map","entry","toSuspiciousAppInfo","error","exports","base64Value","JSON","parse","Buffer","from","toString","packageInfo","reasons","permissions"],"sourceRoot":"../../../src","sources":["utils/malware.ts"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,gBAAgB,GAAG,MAC9BC,IAAc,IACmB;EACjC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI;MACFD,OAAO,CAACF,IAAI,CAACI,GAAG,CAAEC,KAAK,IAAKC,mBAAmB,CAACD,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,OAAOE,KAAU,EAAE;MACnBJ,MAAM,CAAE,iCAAgCI,KAAM,EAAC,CAAC;IAClD;EACF,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAAT,gBAAA,GAAAA,gBAAA;AAEK,MAAMO,mBAAmB,GAAIG,WAAmB,IAAwB;EAC7E,MAAMT,IAAI,GAAGU,IAAI,CAACC,KAAK,CAACC,cAAM,CAACC,IAAI,CAACJ,WAAW,EAAE,QAAQ,CAAC,CAACK,QAAQ,CAAC,MAAM,CAAC,CAAC;EAC5E,MAAMC,WAAW,GAAGf,IAAI,CAACe,WAA0B;EACnD,OAAO;IACLA,WAAW;IACXC,OAAO,EAAEhB,IAAI,CAACgB,OAAO;IACrBC,WAAW,EAAEjB,IAAI,CAACiB;EACpB,CAAC;AACH,CAAC;AAACT,OAAA,CAAAF,mBAAA,GAAAA,mBAAA","ignoreList":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Platform } from 'react-native';
|
|
2
2
|
import { FreeraspReactNative } from '../nativeModules';
|
|
3
|
+
import { withDefaults } from '../../utils/config';
|
|
3
4
|
export const talsecStart = async options => {
|
|
4
|
-
return FreeraspReactNative.talsecStart(options);
|
|
5
|
+
return FreeraspReactNative.talsecStart(withDefaults(options));
|
|
5
6
|
};
|
|
6
7
|
export const addToWhitelist = async packageName => {
|
|
7
8
|
if (Platform.OS === 'ios') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","FreeraspReactNative","talsecStart","options","addToWhitelist","packageName","OS","Promise","reject","blockScreenCapture","enable","isScreenCaptureBlocked","storeExternalId","data","removeExternalId","getAppIcon","onInvalidCallback","removeListenerForEvent","channel"],"sourceRoot":"../../../../src","sources":["api/methods/native.ts"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,mBAAmB,QAAQ,kBAAkB;
|
|
1
|
+
{"version":3,"names":["Platform","FreeraspReactNative","withDefaults","talsecStart","options","addToWhitelist","packageName","OS","Promise","reject","blockScreenCapture","enable","isScreenCaptureBlocked","storeExternalId","data","removeExternalId","getAppIcon","onInvalidCallback","removeListenerForEvent","channel"],"sourceRoot":"../../../../src","sources":["api/methods/native.ts"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,mBAAmB,QAAQ,kBAAkB;AAEtD,SAASC,YAAY,QAAQ,oBAAoB;AAEjD,OAAO,MAAMC,WAAW,GAAG,MAAOC,OAAqB,IAAsB;EAC3E,OAAOH,mBAAmB,CAACE,WAAW,CAACD,YAAY,CAACE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,MAAMC,cAAc,GAAG,MAAOC,WAAmB,IAAuB;EAC7E,IAAIN,QAAQ,CAACO,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CAAC,wCAAwC,CAAC;EACjE;EACA,OAAOR,mBAAmB,CAACI,cAAc,CAACC,WAAW,CAAC;AACxD,CAAC;AAED,OAAO,MAAMI,kBAAkB,GAAIC,MAAe,IAAsB;EACtE,OAAOV,mBAAmB,CAACS,kBAAkB,CAACC,MAAM,CAAC;AACvD,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAGA,CAAA,KAAwB;EAC5D,OAAOX,mBAAmB,CAACW,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,MAAMC,eAAe,GAAIC,IAAY,IAAsB;EAChE,OAAOb,mBAAmB,CAACY,eAAe,CAACC,IAAI,CAAC;AAClD,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAuB;EACrD,OAAOd,mBAAmB,CAACc,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAED,OAAO,MAAMC,UAAU,GAAIV,WAAmB,IAAsB;EAClE,IAAIN,QAAQ,CAACO,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,+DACF,CAAC;EACH;EACA,OAAOR,mBAAmB,CAACe,UAAU,CAACV,WAAW,CAAC;AACpD,CAAC;AAED,OAAO,MAAMW,iBAAiB,GAAGA,CAAA,KAAY;EAC3ChB,mBAAmB,CAACgB,iBAAiB,CAAC,CAAC;AACzC,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAIC,OAAe,IAAsB;EAC1E,OAAOlB,mBAAmB,CAACiB,sBAAsB,CAACC,OAAO,CAAC;AAC5D,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const DEFAULT_SCAN_SCOPE = {
|
|
2
|
+
scopeType: 'SIDELOADED_ONLY'
|
|
3
|
+
};
|
|
4
|
+
const DEFAULT_REASON_MODE = 'HIGHEST_CONFIDENCE';
|
|
5
|
+
const withDetectionDefaults = config => ({
|
|
6
|
+
...config,
|
|
7
|
+
scanScope: config.scanScope ?? DEFAULT_SCAN_SCOPE,
|
|
8
|
+
reasonMode: config.reasonMode ?? DEFAULT_REASON_MODE
|
|
9
|
+
});
|
|
10
|
+
export const normalizeAndroidConfig = androidConfig => {
|
|
11
|
+
if (!androidConfig.suspiciousAppDetectionConfig) {
|
|
12
|
+
return androidConfig;
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
...androidConfig,
|
|
16
|
+
suspiciousAppDetectionConfig: withDetectionDefaults(androidConfig.suspiciousAppDetectionConfig)
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export const withDefaults = options => ({
|
|
20
|
+
...options,
|
|
21
|
+
androidConfig: options.androidConfig ? normalizeAndroidConfig(options.androidConfig) : undefined
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_SCAN_SCOPE","scopeType","DEFAULT_REASON_MODE","withDetectionDefaults","config","scanScope","reasonMode","normalizeAndroidConfig","androidConfig","suspiciousAppDetectionConfig","withDefaults","options","undefined"],"sourceRoot":"../../../src","sources":["utils/config.ts"],"mappings":"AAQA,MAAMA,kBAA6B,GAAG;EACpCC,SAAS,EAAE;AACb,CAAC;AAED,MAAMC,mBAA+B,GAAG,oBAAoB;AAE5D,MAAMC,qBAAqB,GACzBC,MAAoC,KACF;EAClC,GAAGA,MAAM;EACTC,SAAS,EAAED,MAAM,CAACC,SAAS,IAAIL,kBAAkB;EACjDM,UAAU,EAAEF,MAAM,CAACE,UAAU,IAAIJ;AACnC,CAAC,CAAC;AAEF,OAAO,MAAMK,sBAAsB,GACjCC,aAAkC,IACV;EACxB,IAAI,CAACA,aAAa,CAACC,4BAA4B,EAAE;IAC/C,OAAOD,aAAa;EACtB;EACA,OAAO;IACL,GAAGA,aAAa;IAChBC,4BAA4B,EAAEN,qBAAqB,CACjDK,aAAa,CAACC,4BAChB;EACF,CAAC;AACH,CAAC;AAED,OAAO,MAAMC,YAAY,GAAIC,OAAqB,KAAoB;EACpE,GAAGA,OAAO;EACVH,aAAa,EAAEG,OAAO,CAACH,aAAa,GAChCD,sBAAsB,CAACI,OAAO,CAACH,aAAa,CAAC,GAC7CI;AACN,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Buffer","parseMalwareData","data","Promise","resolve","reject","map","entry","toSuspiciousAppInfo","error","base64Value","JSON","parse","from","toString","packageInfo","
|
|
1
|
+
{"version":3,"names":["Buffer","parseMalwareData","data","Promise","resolve","reject","map","entry","toSuspiciousAppInfo","error","base64Value","JSON","parse","from","toString","packageInfo","reasons","permissions"],"sourceRoot":"../../../src","sources":["utils/malware.ts"],"mappings":"AACA,SAASA,MAAM,QAAQ,QAAQ;AAE/B,OAAO,MAAMC,gBAAgB,GAAG,MAC9BC,IAAc,IACmB;EACjC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI;MACFD,OAAO,CAACF,IAAI,CAACI,GAAG,CAAEC,KAAK,IAAKC,mBAAmB,CAACD,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,OAAOE,KAAU,EAAE;MACnBJ,MAAM,CAAE,iCAAgCI,KAAM,EAAC,CAAC;IAClD;EACF,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,MAAMD,mBAAmB,GAAIE,WAAmB,IAAwB;EAC7E,MAAMR,IAAI,GAAGS,IAAI,CAACC,KAAK,CAACZ,MAAM,CAACa,IAAI,CAACH,WAAW,EAAE,QAAQ,CAAC,CAACI,QAAQ,CAAC,MAAM,CAAC,CAAC;EAC5E,MAAMC,WAAW,GAAGb,IAAI,CAACa,WAA0B;EACnD,OAAO;IACLA,WAAW;IACXC,OAAO,EAAEd,IAAI,CAACc,OAAO;IACrBC,WAAW,EAAEf,IAAI,CAACe;EACpB,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../../../src/api/methods/native.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../../../src/api/methods/native.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,eAAO,MAAM,WAAW,YAAmB,YAAY,KAAG,QAAQ,MAAM,CAEvE,CAAC;AAEF,eAAO,MAAM,cAAc,gBAAuB,MAAM,KAAG,QAAQ,OAAO,CAKzE,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAAY,OAAO,KAAG,QAAQ,MAAM,CAElE,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAO,QAAQ,OAAO,CAExD,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,QAAQ,MAAM,CAE5D,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,QAAQ,MAAM,CAEjD,CAAC;AAEF,eAAO,MAAM,UAAU,gBAAiB,MAAM,KAAG,QAAQ,MAAM,CAO9D,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,IAEpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,YAAa,MAAM,KAAG,QAAQ,MAAM,CAEtE,CAAC"}
|
|
@@ -5,25 +5,33 @@ export type TalsecConfig = {
|
|
|
5
5
|
isProd?: boolean;
|
|
6
6
|
killOnBypass?: boolean;
|
|
7
7
|
};
|
|
8
|
+
export type ScopeType = 'SIDELOADED_ONLY' | 'SIDELOADED_AND_SYSTEM_EXCLUDE_OEM' | 'SIDELOADED_AND_OEM' | 'SIDELOADED_AND_SYSTEM_AND_OEM' | 'ALL';
|
|
9
|
+
export type ReasonMode = 'ALL' | 'HIGHEST_CONFIDENCE';
|
|
10
|
+
export type ScanScope = {
|
|
11
|
+
scopeType: ScopeType;
|
|
12
|
+
trustedInstallSources?: string[];
|
|
13
|
+
};
|
|
14
|
+
export type SuspiciousAppDetectionConfig = {
|
|
15
|
+
packageNames?: string[];
|
|
16
|
+
hashes?: string[];
|
|
17
|
+
requestedPermissions?: string[][];
|
|
18
|
+
grantedPermissions?: string[][];
|
|
19
|
+
scanScope: ScanScope;
|
|
20
|
+
reasonMode: ReasonMode;
|
|
21
|
+
};
|
|
8
22
|
export type TalsecAndroidConfig = {
|
|
9
23
|
packageName: string;
|
|
10
24
|
certificateHashes: string[];
|
|
11
25
|
supportedAlternativeStores?: string[];
|
|
12
|
-
|
|
26
|
+
suspiciousAppDetectionConfig?: SuspiciousAppDetectionConfig;
|
|
13
27
|
};
|
|
14
28
|
export type TalsecIosConfig = {
|
|
15
29
|
appBundleId: string;
|
|
16
30
|
appTeamId: string;
|
|
17
31
|
};
|
|
18
|
-
export type TalsecMalwareConfig = {
|
|
19
|
-
blacklistedHashes?: string[];
|
|
20
|
-
blacklistedPackageNames?: string[];
|
|
21
|
-
suspiciousPermissions?: string[][];
|
|
22
|
-
whitelistedInstallationSources?: string[];
|
|
23
|
-
};
|
|
24
32
|
export type SuspiciousAppInfo = {
|
|
25
33
|
packageInfo: PackageInfo;
|
|
26
|
-
|
|
34
|
+
reasons: string[];
|
|
27
35
|
permissions?: string[];
|
|
28
36
|
};
|
|
29
37
|
export type PackageInfo = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TalsecAndroidConfig, TalsecConfig } from '../types/types';
|
|
2
|
+
export declare const normalizeAndroidConfig: (androidConfig: TalsecAndroidConfig) => TalsecAndroidConfig;
|
|
3
|
+
export declare const withDefaults: (options: TalsecConfig) => TalsecConfig;
|
|
4
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,mBAAmB,EACnB,YAAY,EACb,MAAM,gBAAgB,CAAC;AAgBxB,eAAO,MAAM,sBAAsB,kBAClB,mBAAmB,KACjC,mBAUF,CAAC;AAEF,eAAO,MAAM,YAAY,YAAa,YAAY,KAAG,YAKnD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "freerasp-react-native",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "React Native plugin for improving app security and threat monitoring on Android and iOS mobile devices.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Platform } from 'react-native';
|
|
2
2
|
import { FreeraspReactNative } from '../nativeModules';
|
|
3
3
|
import type { TalsecConfig } from '../../types/types';
|
|
4
|
+
import { withDefaults } from '../../utils/config';
|
|
4
5
|
|
|
5
6
|
export const talsecStart = async (options: TalsecConfig): Promise<string> => {
|
|
6
|
-
return FreeraspReactNative.talsecStart(options);
|
|
7
|
+
return FreeraspReactNative.talsecStart(withDefaults(options));
|
|
7
8
|
};
|
|
8
9
|
|
|
9
10
|
export const addToWhitelist = async (packageName: string): Promise<boolean> => {
|
package/src/types/types.ts
CHANGED
|
@@ -6,11 +6,34 @@ export type TalsecConfig = {
|
|
|
6
6
|
killOnBypass?: boolean;
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
+
export type ScopeType =
|
|
10
|
+
| 'SIDELOADED_ONLY'
|
|
11
|
+
| 'SIDELOADED_AND_SYSTEM_EXCLUDE_OEM'
|
|
12
|
+
| 'SIDELOADED_AND_OEM'
|
|
13
|
+
| 'SIDELOADED_AND_SYSTEM_AND_OEM'
|
|
14
|
+
| 'ALL';
|
|
15
|
+
|
|
16
|
+
export type ReasonMode = 'ALL' | 'HIGHEST_CONFIDENCE';
|
|
17
|
+
|
|
18
|
+
export type ScanScope = {
|
|
19
|
+
scopeType: ScopeType;
|
|
20
|
+
trustedInstallSources?: string[];
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type SuspiciousAppDetectionConfig = {
|
|
24
|
+
packageNames?: string[];
|
|
25
|
+
hashes?: string[];
|
|
26
|
+
requestedPermissions?: string[][];
|
|
27
|
+
grantedPermissions?: string[][];
|
|
28
|
+
scanScope: ScanScope;
|
|
29
|
+
reasonMode: ReasonMode;
|
|
30
|
+
};
|
|
31
|
+
|
|
9
32
|
export type TalsecAndroidConfig = {
|
|
10
33
|
packageName: string;
|
|
11
34
|
certificateHashes: string[];
|
|
12
35
|
supportedAlternativeStores?: string[];
|
|
13
|
-
|
|
36
|
+
suspiciousAppDetectionConfig?: SuspiciousAppDetectionConfig;
|
|
14
37
|
};
|
|
15
38
|
|
|
16
39
|
export type TalsecIosConfig = {
|
|
@@ -18,16 +41,9 @@ export type TalsecIosConfig = {
|
|
|
18
41
|
appTeamId: string;
|
|
19
42
|
};
|
|
20
43
|
|
|
21
|
-
export type TalsecMalwareConfig = {
|
|
22
|
-
blacklistedHashes?: string[];
|
|
23
|
-
blacklistedPackageNames?: string[];
|
|
24
|
-
suspiciousPermissions?: string[][];
|
|
25
|
-
whitelistedInstallationSources?: string[];
|
|
26
|
-
};
|
|
27
|
-
|
|
28
44
|
export type SuspiciousAppInfo = {
|
|
29
45
|
packageInfo: PackageInfo;
|
|
30
|
-
|
|
46
|
+
reasons: string[];
|
|
31
47
|
permissions?: string[];
|
|
32
48
|
};
|
|
33
49
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ReasonMode,
|
|
3
|
+
ScanScope,
|
|
4
|
+
SuspiciousAppDetectionConfig,
|
|
5
|
+
TalsecAndroidConfig,
|
|
6
|
+
TalsecConfig,
|
|
7
|
+
} from '../types/types';
|
|
8
|
+
|
|
9
|
+
const DEFAULT_SCAN_SCOPE: ScanScope = {
|
|
10
|
+
scopeType: 'SIDELOADED_ONLY',
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const DEFAULT_REASON_MODE: ReasonMode = 'HIGHEST_CONFIDENCE';
|
|
14
|
+
|
|
15
|
+
const withDetectionDefaults = (
|
|
16
|
+
config: SuspiciousAppDetectionConfig
|
|
17
|
+
): SuspiciousAppDetectionConfig => ({
|
|
18
|
+
...config,
|
|
19
|
+
scanScope: config.scanScope ?? DEFAULT_SCAN_SCOPE,
|
|
20
|
+
reasonMode: config.reasonMode ?? DEFAULT_REASON_MODE,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export const normalizeAndroidConfig = (
|
|
24
|
+
androidConfig: TalsecAndroidConfig
|
|
25
|
+
): TalsecAndroidConfig => {
|
|
26
|
+
if (!androidConfig.suspiciousAppDetectionConfig) {
|
|
27
|
+
return androidConfig;
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
...androidConfig,
|
|
31
|
+
suspiciousAppDetectionConfig: withDetectionDefaults(
|
|
32
|
+
androidConfig.suspiciousAppDetectionConfig
|
|
33
|
+
),
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const withDefaults = (options: TalsecConfig): TalsecConfig => ({
|
|
38
|
+
...options,
|
|
39
|
+
androidConfig: options.androidConfig
|
|
40
|
+
? normalizeAndroidConfig(options.androidConfig)
|
|
41
|
+
: undefined,
|
|
42
|
+
});
|
package/src/utils/malware.ts
CHANGED
|
@@ -18,7 +18,7 @@ export const toSuspiciousAppInfo = (base64Value: string): SuspiciousAppInfo => {
|
|
|
18
18
|
const packageInfo = data.packageInfo as PackageInfo;
|
|
19
19
|
return {
|
|
20
20
|
packageInfo,
|
|
21
|
-
|
|
21
|
+
reasons: data.reasons,
|
|
22
22
|
permissions: data.permissions,
|
|
23
23
|
} as SuspiciousAppInfo;
|
|
24
24
|
};
|