Skip to content

Commit c7f8843

Browse files
committed
add implementation
1 parent d75a3d7 commit c7f8843

File tree

76 files changed

+4532
-1909
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+4532
-1909
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ dependencies {
9999
implementation "com.facebook.react:react-native:$react_native_version"
100100
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
101101
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1"
102-
implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:16.0.4"
102+
implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:17.0.0"
103103
}
104104

105105
if (isNewArchitectureEnabled()) {

android/src/main/java/com/freeraspreactnative/FreeraspReactNativeModule.kt

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.os.Build
44
import android.os.Handler
55
import android.os.HandlerThread
66
import android.os.Looper
7+
import android.util.Log
78
import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo
89
import com.aheaditec.talsec_security.security.api.Talsec
910
import com.aheaditec.talsec_security.security.api.TalsecConfig
@@ -18,6 +19,9 @@ import com.facebook.react.bridge.ReadableMap
1819
import com.facebook.react.bridge.UiThreadUtil.runOnUiThread
1920
import com.facebook.react.bridge.WritableArray
2021
import com.facebook.react.modules.core.DeviceEventManagerModule
22+
import com.freeraspreactnative.events.BaseRaspEvent
23+
import com.freeraspreactnative.events.RaspExecutionStateEvent
24+
import com.freeraspreactnative.events.ThreatEvent
2125
import com.freeraspreactnative.utils.Utils
2226
import com.freeraspreactnative.utils.getArraySafe
2327
import com.freeraspreactnative.utils.getBooleanSafe
@@ -29,7 +33,7 @@ import com.freeraspreactnative.utils.toEncodedWritableArray
2933
class FreeraspReactNativeModule(private val reactContext: ReactApplicationContext) :
3034
ReactContextBaseJavaModule(reactContext) {
3135

32-
private val listener = ThreatListener(FreeraspThreatHandler, FreeraspThreatHandler)
36+
private val listener = ThreatListener(FreeraspThreatHandler, FreeraspThreatHandler, FreeraspThreatHandler)
3337
private val lifecycleListener = object : LifecycleEventListener {
3438
override fun onHostResume() {
3539
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
@@ -90,19 +94,39 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
9094
*/
9195
@ReactMethod
9296
fun getThreatIdentifiers(promise: Promise) {
93-
promise.resolve(Threat.getThreatValues())
97+
promise.resolve(ThreatEvent.ALL_EVENTS)
9498
}
9599

96100
/**
97-
* Method to setup the message passing between native and React Native
101+
* Method to get the random identifiers of callbacks
102+
*/
103+
@ReactMethod
104+
fun getRaspExecutionStateIdentifiers(promise: Promise) {
105+
promise.resolve(RaspExecutionStateEvent.ALL_EVENTS)
106+
}
107+
108+
/**
109+
* Method to setup the threat message passing between native and React Native
98110
* @return list of [THREAT_CHANNEL_NAME, THREAT_CHANNEL_KEY]
99111
*/
100112
@ReactMethod
101113
fun getThreatChannelData(promise: Promise) {
102114
val channelData: WritableArray = Arguments.createArray()
103-
channelData.pushString(THREAT_CHANNEL_NAME)
104-
channelData.pushString(THREAT_CHANNEL_KEY)
105-
channelData.pushString(MALWARE_CHANNEL_KEY)
115+
channelData.pushString(ThreatEvent.CHANNEL_NAME)
116+
channelData.pushString(ThreatEvent.CHANNEL_KEY)
117+
channelData.pushString(ThreatEvent.MALWARE_CHANNEL_KEY)
118+
promise.resolve(channelData)
119+
}
120+
121+
/**
122+
* Method to setup the execution state message passing between native and React Native
123+
* @return list of [THREAT_CHANNEL_NAME, THREAT_CHANNEL_KEY]
124+
*/
125+
@ReactMethod
126+
fun getRaspExecutionStateChannelData(promise: Promise) {
127+
val channelData: WritableArray = Arguments.createArray()
128+
channelData.pushString(RaspExecutionStateEvent.CHANNEL_NAME)
129+
channelData.pushString(RaspExecutionStateEvent.CHANNEL_KEY)
106130
promise.resolve(channelData)
107131
}
108132

@@ -223,12 +247,6 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
223247

224248
companion object {
225249
const val NAME = "FreeraspReactNative"
226-
private val THREAT_CHANNEL_NAME = (10000..999999999).random()
227-
.toString() // name of the channel over which threat callbacks are sent
228-
private val THREAT_CHANNEL_KEY = (10000..999999999).random()
229-
.toString() // key of the argument map under which threats are expected
230-
private val MALWARE_CHANNEL_KEY = (10000..999999999).random()
231-
.toString() // key of the argument map under which malware data is expected
232250

233251
private val backgroundHandlerThread = HandlerThread("BackgroundThread").apply { start() }
234252
private val backgroundHandler = Handler(backgroundHandlerThread.looper)
@@ -238,11 +256,11 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
238256

239257
internal var talsecStarted = false
240258

241-
private fun notifyListeners(threat: Threat) {
259+
private fun notifyEvent(event: BaseRaspEvent) {
242260
val params = Arguments.createMap()
243-
params.putInt(THREAT_CHANNEL_KEY, threat.value)
261+
params.putInt(event.channelKey, event.value)
244262
appReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
245-
.emit(THREAT_CHANNEL_NAME, params)
263+
.emit(event.channelName, params)
246264
}
247265

248266
/**
@@ -256,25 +274,29 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
256274

257275
mainHandler.post {
258276
val params = Arguments.createMap()
259-
params.putInt(THREAT_CHANNEL_KEY, Threat.Malware.value)
277+
params.putInt(ThreatEvent.CHANNEL_KEY, ThreatEvent.Malware.value)
260278
params.putArray(
261-
MALWARE_CHANNEL_KEY, encodedSuspiciousApps
279+
ThreatEvent.MALWARE_CHANNEL_KEY, encodedSuspiciousApps
262280
)
263281

264282
appReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
265-
.emit(THREAT_CHANNEL_NAME, params)
283+
.emit(ThreatEvent.CHANNEL_NAME, params)
266284
}
267285
}
268286
}
269287
}
270288

271289
internal object ThreatListener : FreeraspThreatHandler.TalsecReactNative {
272-
override fun threatDetected(threatType: Threat) {
273-
notifyListeners(threatType)
290+
override fun threatDetected(threatEventType: ThreatEvent) {
291+
notifyEvent(threatEventType)
274292
}
275293

276294
override fun malwareDetected(suspiciousApps: MutableList<SuspiciousAppInfo>) {
277295
notifyMalware(suspiciousApps)
278296
}
297+
298+
override fun raspExecutionStateChanged(event: RaspExecutionStateEvent) {
299+
notifyEvent(event)
300+
}
279301
}
280302
}

android/src/main/java/com/freeraspreactnative/FreeraspThreatHandler.kt

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,82 +2,102 @@ package com.freeraspreactnative
22

33
import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo
44
import com.aheaditec.talsec_security.security.api.ThreatListener
5+
import com.freeraspreactnative.events.RaspExecutionStateEvent
6+
import com.freeraspreactnative.events.ThreatEvent
57

6-
internal object FreeraspThreatHandler : ThreatListener.ThreatDetected, ThreatListener.DeviceState {
8+
internal object FreeraspThreatHandler : ThreatListener.ThreatDetected, ThreatListener.DeviceState, ThreatListener.RaspExecutionState() {
79

810
internal var listener: TalsecReactNative? = null
911

1012
override fun onRootDetected() {
11-
listener?.threatDetected(Threat.PrivilegedAccess)
13+
listener?.threatDetected(ThreatEvent.PrivilegedAccess)
1214
}
1315

1416
override fun onDebuggerDetected() {
15-
listener?.threatDetected(Threat.Debug)
17+
listener?.threatDetected(ThreatEvent.Debug)
1618
}
1719

1820
override fun onEmulatorDetected() {
19-
listener?.threatDetected(Threat.Simulator)
21+
listener?.threatDetected(ThreatEvent.Simulator)
2022
}
2123

2224
override fun onTamperDetected() {
23-
listener?.threatDetected(Threat.AppIntegrity)
25+
listener?.threatDetected(ThreatEvent.AppIntegrity)
2426
}
2527

2628
override fun onUntrustedInstallationSourceDetected() {
27-
listener?.threatDetected(Threat.UnofficialStore)
29+
listener?.threatDetected(ThreatEvent.UnofficialStore)
2830
}
2931

3032
override fun onHookDetected() {
31-
listener?.threatDetected(Threat.Hooks)
33+
listener?.threatDetected(ThreatEvent.Hooks)
3234
}
3335

3436
override fun onDeviceBindingDetected() {
35-
listener?.threatDetected(Threat.DeviceBinding)
37+
listener?.threatDetected(ThreatEvent.DeviceBinding)
3638
}
3739

3840
override fun onObfuscationIssuesDetected() {
39-
listener?.threatDetected(Threat.ObfuscationIssues)
41+
listener?.threatDetected(ThreatEvent.ObfuscationIssues)
4042
}
4143

42-
override fun onMalwareDetected(suspiciousAppInfos: MutableList<SuspiciousAppInfo>?) {
44+
override fun onMalwareDetected(suspiciousAppInfos: MutableList<SuspiciousAppInfo>) {
4345
listener?.malwareDetected(suspiciousAppInfos ?: mutableListOf())
4446
}
4547

4648
override fun onUnlockedDeviceDetected() {
47-
listener?.threatDetected(Threat.Passcode)
49+
listener?.threatDetected(ThreatEvent.Passcode)
4850
}
4951

5052
override fun onHardwareBackedKeystoreNotAvailableDetected() {
51-
listener?.threatDetected(Threat.SecureHardwareNotAvailable)
53+
listener?.threatDetected(ThreatEvent.SecureHardwareNotAvailable)
5254
}
5355

5456
override fun onDeveloperModeDetected() {
55-
listener?.threatDetected(Threat.DevMode)
57+
listener?.threatDetected(ThreatEvent.DevMode)
5658
}
5759

5860
override fun onADBEnabledDetected() {
59-
listener?.threatDetected(Threat.ADBEnabled)
61+
listener?.threatDetected(ThreatEvent.ADBEnabled)
6062
}
6163

6264
override fun onSystemVPNDetected() {
63-
listener?.threatDetected(Threat.SystemVPN)
65+
listener?.threatDetected(ThreatEvent.SystemVPN)
6466
}
6567

6668
override fun onScreenshotDetected() {
67-
listener?.threatDetected(Threat.Screenshot)
69+
listener?.threatDetected(ThreatEvent.Screenshot)
6870
}
6971

7072
override fun onScreenRecordingDetected() {
71-
listener?.threatDetected(Threat.ScreenRecording)
73+
listener?.threatDetected(ThreatEvent.ScreenRecording)
7274
}
7375

7476
override fun onMultiInstanceDetected() {
75-
listener?.threatDetected(Threat.MultiInstance)
77+
listener?.threatDetected(ThreatEvent.MultiInstance)
78+
}
79+
80+
override fun onUnsecureWifiDetected() {
81+
listener?.threatDetected(ThreatEvent.UnsecureWifi)
82+
}
83+
84+
override fun onTimeSpoofingDetected() {
85+
listener?.threatDetected(ThreatEvent.TimeSpoofing)
86+
}
87+
88+
override fun onLocationSpoofingDetected() {
89+
listener?.threatDetected(ThreatEvent.LocationSpoofing)
90+
}
91+
92+
override fun onAllChecksFinished() {
93+
listener?.raspExecutionStateChanged(RaspExecutionStateEvent.AllChecksFinished)
7694
}
7795

7896
internal interface TalsecReactNative {
79-
fun threatDetected(threatType: Threat)
97+
fun threatDetected(threatEventType: ThreatEvent)
8098

8199
fun malwareDetected(suspiciousApps: MutableList<SuspiciousAppInfo>)
100+
101+
fun raspExecutionStateChanged(event: RaspExecutionStateEvent)
82102
}
83103
}

android/src/main/java/com/freeraspreactnative/Threat.kt

Lines changed: 0 additions & 57 deletions
This file was deleted.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.freeraspreactnative.events
2+
3+
internal interface BaseRaspEvent {
4+
val value: Int
5+
val channelName: String
6+
val channelKey: String
7+
8+
}
9+
10+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.freeraspreactnative.events
2+
3+
import com.facebook.react.bridge.Arguments
4+
5+
internal sealed class RaspExecutionStateEvent(override val value: Int) : BaseRaspEvent {
6+
override val channelName: String get() = CHANNEL_NAME
7+
override val channelKey: String get() = CHANNEL_KEY
8+
9+
data object AllChecksFinished : RaspExecutionStateEvent((10000..999999999).random())
10+
11+
companion object Companion {
12+
internal val CHANNEL_NAME = (10000..999999999).random().toString()
13+
internal val CHANNEL_KEY = (10000..999999999).random().toString()
14+
internal val ALL_EVENTS = Arguments.fromList(
15+
listOf(
16+
AllChecksFinished
17+
).map { it.value })
18+
}
19+
}

0 commit comments

Comments
 (0)