Permissions & Privacy
Relevant source files
The following files were used as context for generating this wiki page:
ShadowCheckMobile is a network security and surveillance detection application that requires extensive system permissions to monitor WiFi, Bluetooth, and cellular environments. To balance these invasive requirements with user privacy, the application implements encrypted local storage and granular user controls for data management.
The system is designed around "Signals Intelligence" (SIGINT) collection, where hardware sensors are utilized to identify potential threats. Because this involves sensitive location and environmental data, the app uses modern Android security libraries to ensure that captured intelligence and third-party API keys remain protected from unauthorized access.
Sources: README.md:1-15, app/src/main/kotlin/com/shadowcheck/mobile/rebuilt/ui/screens/SettingsScreen.kt:274-282
Android System Permissions
The application declares a variety of permissions in its manifest to facilitate background scanning and hardware interaction. These are categorized into location services, network state monitoring, and hardware features.
Required Permissions Table
| Permission | Purpose |
|---|---|
ACCESS_FINE_LOCATION | Required for mapping and pinpointing network/device locations. |
ACCESS_COARSE_LOCATION | Required for general area network scanning. |
ACCESS_WIFI_STATE | Allows the app to view WiFi configuration and signal strength. |
CHANGE_WIFI_STATE | Enables the app to initiate WiFi scans. |
BLUETOOTH_SCAN | Required to discover nearby Bluetooth and BLE devices. |
FOREGROUND_SERVICE_LOCATION | Maintains scanning capabilities while the app is in the background. |
CAMERA | Used for Augmented Reality (AR) network visualization features. |
READ_PHONE_STATE | Required for cellular tower identification and monitoring. |
Sources: app/src/main/AndroidManifest.xml:4-23
Background Operations
The application utilizes a CompleteScannerService which is typed as a location foreground service. This ensures that the surveillance detection and wardriving capabilities remain active even when the UI is not visible, provided the user has granted the necessary persistent location permissions.
Sources: app/src/main/AndroidManifest.xml:51
Data Privacy & Encryption Architecture
Privacy is managed through the use of the AndroidX Security library, specifically for handling sensitive credentials like API tokens for WiGLE, Mapbox, and Google Maps.
Encrypted Storage Flow
The application uses EncryptedSharedPreferences to store configuration data. This implementation uses the AES256_GCM scheme for value encryption and AES256_SIV for key encryption, managed by a MasterKey.
API Key Management
Users can manage keys for external services through the APIKeysScreen. These keys are never stored in plain text and are masked in the UI using PasswordVisualTransformation unless toggled by the user.
| Service | Configuration Field | Description |
|---|---|---|
| WiGLE | wigle_api_key | Used for uploading and querying wardriving data. |
| Mapbox | mapbox_api_key | Required for interactive network mapping. |
| Google Maps | google_maps_api_key | Alternative mapping provider. |
Sources: app/src/main/kotlin/com/shadowcheck/mobile/rebuilt/ui/screens/SettingsScreen.kt:240-264, app/src/main/kotlin/com/shadowcheck/mobile/ui/screens/settings/APIKeysScreen.kt:45-75
User Data Control & Purging
The SettingsScreen provides users with destructive actions to manage their data footprint. This allows for the surgical removal of sensitive information or the complete wiping of the local surveillance database.
Data Management Actions
- Purge Sensor Data: Specifically deletes all entries from the
sensorReadingDaoto remove environmental logs. - Delete Records Without GPS: Removes network sightings that lack location metadata, reducing the footprint of "stray" data.
- Clear All Data: A comprehensive wipe of WiFi networks, Bluetooth devices, cellular towers, and sighting records.
Conclusion
The Permissions & Privacy system in ShadowCheckMobile is designed to support high-intensity signal monitoring while maintaining strict security boundaries. By leveraging Android's foreground service model for permissions and the AndroidX Security library for data at rest, the application ensures that while it sees everything in the radio spectrum, only the authorized user has access to that intelligence.
Sources: README.md:55-65, app/src/main/kotlin/com/shadowcheck/mobile/rebuilt/ui/screens/SettingsScreen.kt:313-325