π Documentation Β· π Database Combiner Guide Β· πΊοΈ Map Viewer Guide Β· π Project Structure Β· π Detailed Structure Β· οΏ½ Changelog Β· π€ Contributing Β· π Security Β· π Code of Conduct
Project Status Notice
This is a very early stage of the program. While it is already functional, it is based on an older project that I have recently resumed. Therefore, extensive refactoring and further development are still required. Expect ongoing changes and improvements as work continues.
- β On Linux, databases can currently be loaded and visualized.
β οΈ In Python Tools Passphrase unlocking is buggy: correct passphrases may be rejected. (Android works fine)β οΈ On Windows, sqlcypher and passphrase issues still persist.
Additional development is required to implement full SQLCipher support and reliable key handling.
β‘οΈ Workaround: To use without encryption, please use version 1.0.2.
We welcome your ideas, bug reports, and feature requests!
- Overview
- Features
- Screenshots
- Requirements
- Installation
- Usage
- Python Tools
- Technical Details
- Privacy & Ethics
- Known Limitations
- Project Structure
- Contributing
- License
- Disclaimer
WiFi & Bluetooth GeoGrabber is a powerful geolocation tool for Android, designed as a modern Wardriving App. It scans for nearby WiFi networks and Bluetooth devices, records their signal strength and location, and visualizes the collected data on an interactive map.
Detected networks and devices are shown live on the map within the app. All scan results are saved in a local SQLite database (.db), which can be exported and loaded both on Android and on your PC for further analysis.
On Android, you can view, filter, and manage the data directly in the app. For advanced analysis and visualization, simply transfer the .db file to your PC and use the included Python tools to merge, plot, and explore your scan data interactively.
GeoGrabber is ideal for network analysis, signal mapping, and understanding wireless device distribution in different areasβwhether on your mobile device or desktop.
Note: This app is intended for legal, ethical wardriving, educational purposes, and authorized network analysis only. Please respect privacy laws and only scan networks in areas where you have permission.
- π WiFi Network Scanning β Continuous or on-demand WiFi network detection
- πΆ Bluetooth Device Scanning β Detect nearby Bluetooth devices (Classic and BLE)
- βοΈ Background Scanning β Service-based scanning that runs in the background
- π Signal Strength Tracking β Records RSSI (signal strength) for each device
- π GPS Integration β Records precise GPS coordinates for each scan
- π Interactive Map β Visualize collected data on a Leaflet-based web map
- π Dark Mode Toggle β Switch between light and dark map styles (OSM/CartoDB)
- ποΈ Persistent Map Style β User map style choice is saved and restored
- π Location Filtering β View devices within specific geographic boundaries
- π― Live Location β Center map on your current GPS position (auto-tracking, keeps user zoom)
- π Live Location Auto-Off β Live location tracking disables when jumping to search result
- π Custom Location Marker β Your position is shown as a red dot
- π§Ή Filter Popup UX β Filter popup can be closed by clicking on the map
- π€ Improved Search Bar β Search bar text is now black for better readability
- ποΈ SQLite Database β Stores all scanned networks and devices locally
- οΏ½ Database Encryption β AES-256 encryption with SQLCipher (optional)
- οΏ½πΌ Data Export β Save database as a file for backup or analysis
- π₯ Data Import β Load external databases to view or merge data (supports encrypted databases)
- π Database Statistics β View total counts of WiFi networks and Bluetooth devices
- ποΈ Clear Database β Delete all stored data when needed
- π‘οΈ AES-256 Encryption β Database encryption using SQLCipher
- π Android Keystore Integration β Hardware-backed secure passphrase storage
- π Passphrase Protection β User-controlled encryption with customizable passphrase
- 𧬠Biometric Unlock (NEW) β Unlock your encrypted database instantly using fingerprint or face authentication. Passphrase is securely stored with Android Keystore and never leaves the device. Biometric unlock uses the same passphrase as manual login for maximum security and reliability.
- π Database Migration β Seamless conversion from unencrypted to encrypted databases
- πΎ Encrypted Import/Export β Full support for encrypted database files
- π― Zero-Knowledge Design β Passphrases never logged or transmitted
- ποΈ Secure File Deletion β Files deleted with 3-pass overwrite (DoD 5220.22-M standard)
- π΅οΈ Automatic Log Removal β Sensitive logs removed in release builds
- π‘οΈ R8 Code Obfuscation β Comprehensive ProGuard rules for code protection
- π Enhanced Passphrase Complexity β Minimum 12 characters, must include uppercase, lowercase, digits, and special characters
- πΌοΈ Screenshot Protection β FLAG_SECURE prevents screenshots in unlock activity
- π Improved Temp File Security β Temporary files stored in getFilesDir() instead of getCacheDir()
- π Encryption Guide β Complete setup and usage instructions
WiFi Networks:
| Property | Description |
|---|---|
| SSID | Network Name |
| BSSID | MAC Address |
| Signal Strength | Power level in dBm |
| Frequency | Operating frequency in MHz |
| Channel | WiFi channel number |
| Channel Width | Bandwidth (20/40/80/160 MHz) |
| Security | Encryption type (WPA2, WPA3, etc.) |
| GPS Coordinates | Latitude & Longitude |
| Timestamp | Scan date & time |
Bluetooth Devices:
| Property | Description |
|---|---|
| Device Name | Bluetooth device name |
| MAC Address | Hardware address |
| Device Type | Classic or BLE |
| Signal Strength | RSSI value |
| GPS Coordinates | Latitude & Longitude |
| Timestamp | Scan date & time |
Screenshot Description:
- WiFi Scanning Starten: Start WiFi scanning
- BT AUS: Bluetooth scanning off
- Show Data: View all scanned data
- More: Access advanced features
The screenshot above demonstrates the main scanning interface, live network list, and debug log. The app provides real-time updates and easy access to mapping and data management features.
| Component | Requirement |
|---|---|
| Android Version | Android 6.0 (API 23) or higher |
| RAM | 2 GB minimum (4 GB recommended) |
| Storage | 50 MB for app, variable for database |
| GPS | Required for location tracking |
| Permission | Purpose |
|---|---|
ACCESS_FINE_LOCATION |
Precise GPS coordinates |
ACCESS_COARSE_LOCATION |
Approximate location |
ACCESS_WIFI_STATE |
WiFi status monitoring |
CHANGE_WIFI_STATE |
WiFi scanning control |
BLUETOOTH |
Bluetooth basic access |
BLUETOOTH_ADMIN |
Bluetooth device management |
BLUETOOTH_SCAN |
Bluetooth scanning (Android 12+) |
BLUETOOTH_CONNECT |
Bluetooth connection (Android 12+) |
FOREGROUND_SERVICE |
Background scanning |
READ_EXTERNAL_STORAGE |
Database import |
WRITE_EXTERNAL_STORAGE |
Database export |
β οΈ Note (October 2025):There are currently issues with automatic dependency installation via the setup scripts (
setup.bat/setup.sh) due to network or PyPI problems. This will be fixed soon. In the meantime, you can manually install the required Python packages in your virtual environment:Manual Installation:
- Activate your virtual environment:
- Windows:
venv\Scripts\activate.batorvenv\Scripts\Activate.ps1- Linux:
source venv/bin/activate- Download the required wheel files for each package (e.g. from https://pypi.org/project/folium/#files and https://pypi.org/project/branca/#files).
- Install them manually:
pip install path/to/folium-*.whl pip install path/to/branca-*.whl pip install geopy- If you encounter further dependency errors, download and install those packages in the same way.
The setup scripts will be updated soon for improved reliability.
Prerequisites:
- Android Studio (latest version)
- JDK 11 or higher
- Git
Steps:
# 1. Clone the repository
git clone https://github.com/arn-c0de/Geograbber.git
cd Geograbber
# 2. Open in Android Studio
# Open Android Studio -> Open -> Select 'WIFIGEOGRABBER' directory
# 3. Sync Gradle
# Android Studio will automatically sync Gradle dependencies
# 4. Build the project
# Build -> Make Project (Ctrl+F9)
# 5. Run on device
# Run -> Run 'app' (Shift+F10)- Download the latest APK from the Releases page
- Enable "Install from Unknown Sources" in your Android settings:
- Settings β Security β Unknown Sources (Android 7 and below)
- Settings β Apps β Special Access β Install Unknown Apps (Android 8+)
- Install the APK on your device
- Grant Permissions β The app will request necessary permissions on first launch
- Enable Location β Ensure GPS is enabled for accurate coordinates
- Enable Bluetooth β Required for Bluetooth device scanning
For API key management, environment variables, and security best practices:
- Quick Setup: Secret Management Quick Start (5-minute guide)
- Full Documentation: Secret Management Guide
Note: Currently, the project works 100% offline and requires no API keys. The secret management system is provided for future extensibility.
1. Start WiFi Scanning
Tap "WiFi Start" button β App begins scanning for WiFi networks
2. Enable Bluetooth Scanning
Tap "BT Off" button β Bluetooth scanning activates
3. View Results
Scanned networks appear in the list below the control buttons
Real-time updates with signal strength and details
4. View on Map
Tap "Show Map" β Visualize collected data on interactive map
| Action | Description |
|---|---|
| Refresh | Update map with latest scanned data |
| Location | Center map on your current GPS position |
| Zoom | Pinch to zoom in/out |
| Pan | Drag to move around the map |
| Marker Click | View detailed information about a device |
| Back | Return to the main scanning interface |
More Actions Menu (Tap "More"):
| Option | Description |
|---|---|
| πΎ Save Database | Export database as file for backup |
| ποΈ Delete Database | Clear all stored data |
| π Show Network Count | Display statistics (WiFi + Bluetooth) |
| π₯ Import Database | Load external database for analysis |
| π Show Data | View all stored networks and devices |
The project includes Python scripts for advanced data analysis and visualization:
Merge multiple database files from different scanning sessions.
# Navigate to Python directory
cd Python
# Run the combiner script
python start_combine_dbs.pyπ Database Combiner Quickstart
Visualize scanning data on an advanced interactive map with filtering options.
# Navigate to Python directory
cd Python
# Run the plot GUI
python start_plot_gui.pyFeatures:
- πΊοΈ Interactive map with multiple layers
- π Filter by signal strength, device type, time range
- π Statistical analysis of collected data
- πΎ Export filtered data to CSV/JSON
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Android App β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β UI Layer (Activities & Fragments) β
β ββ Main Scanning Interface β
β ββ Map Viewer (WebView + Leaflet.js) β
β ββ Settings & Data Management β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Business Logic β
β ββ WiFi Scanner Service β
β ββ Bluetooth Scanner Service β
β ββ Location Manager β
β ββ Background Service (Foreground) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Data Layer β
β ββ SQLite Database β
β ββ Database Helper β
β ββ Data Models β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- π SHA-256 Checksum Verification β Database integrity & security
| Component | Technology |
|---|---|
| Language | Java |
| Database | SQLite |
| Mapping | Leaflet.js (WebView-based) |
| Location | Google Play Services Fused Location Provider |
| Background Service | Android Foreground Service |
| Build System | Gradle (Kotlin DSL) |
wifi_data table:
CREATE TABLE wifi_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
bssid TEXT NOT NULL,
ssid TEXT,
signal_strength INTEGER,
frequency INTEGER,
channel INTEGER,
channel_width INTEGER,
security_type TEXT,
timestamp TEXT,
latitude REAL,
longitude REAL
);device_data table:
CREATE TABLE device_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
device_id TEXT,
device_name TEXT,
device_type TEXT,
mac_address TEXT NOT NULL,
signal_strength INTEGER,
timestamp TEXT,
latitude REAL,
longitude REAL
);| Operation | Average Time | Notes |
|---|---|---|
| WiFi Scan | 2-5 seconds | Depends on device & network density |
| Bluetooth Scan | 5-10 seconds | Standard discovery time |
| Database Write | <100ms | Single entry |
| Map Rendering | 1-3 seconds | Depends on marker count |
| Database Query | <500ms | 1000 entries |
β Allowed:
- Personal network analysis
- Educational purposes
- WiFi coverage mapping for home/office
- Authorized security testing
- Research and development
β Not Allowed:
- Unauthorized surveillance
- Network attacks or hacking
- Privacy invasion
- Commercial wardriving without permission
- Only scan networks in areas where you have permission
- Respect privacy laws and regulations in your jurisdiction
- The app only collects publicly broadcasted network information
- Some jurisdictions may restrict passive WiFi/Bluetooth scanning
- Do not use this app to track individuals without consent
- Do not attempt to connect to networks you don't own
- Respect others' privacy and security
- Use responsibly and legally
π‘οΈ Data Security:
- All data is stored locally on your device
- No data is transmitted to external servers
- You have full control over your collected data
- Database can be encrypted (implement as needed)
| Limitation | Description | Workaround |
|---|---|---|
| Scan Throttling (Android 9+) | Background WiFi scans limited to ~4 per 2 minutes | Use foreground service |
| Bluetooth Permissions (Android 12+) | Requires BLUETOOTH_SCAN and BLUETOOTH_CONNECT | Request at runtime |
| Location Requirement | WiFi scanning requires location permission | Mandatory on Android 6+ |
| Hidden Networks | SSIDs may not be available for hidden networks | Shows as empty SSID |
| Battery Optimization | Background scanning may be restricted | Request battery optimization exemption |
- GPS accuracy varies by device and environment (indoor/outdoor)
- Some Bluetooth devices may not broadcast their names
- WiFi Direct devices may not appear in scans
- Certain manufacturers may have additional restrictions
- SQLite database size grows with scan data (monitor storage)
- Map performance degrades with 10,000+ markers
- Background scanning may stop on low battery
- Network density affects scan speed
π View Detailed Structure β Complete file tree, database schema, and technical details
We welcome contributions from the community! Here's how you can help:
| Type | Description |
|---|---|
| π Bug Reports | Found a bug? Open an issue with details |
| π‘ Feature Requests | Have an idea? Suggest new features |
| π Documentation | Improve docs, add tutorials |
| π§ Code Contributions | Submit pull requests |
| π Translations | Help translate the app |
-
Fork the Repository
# Click 'Fork' on GitHub git clone https://github.com/arn-c0de/Geograbber.git cd Geograbber
-
Create a Feature Branch
git checkout -b feature/amazing-feature
-
Make Your Changes
- Follow Java coding conventions
- Add comments and documentation
- Test thoroughly on multiple devices
-
Commit Your Changes
git add . git commit -m "Add amazing feature: [description]"
-
Push to Your Fork
git push origin feature/amazing-feature
-
Create a Pull Request
- Go to the original repository
- Click "New Pull Request"
- Describe your changes in detail
- β Follow Java naming conventions
- β Use meaningful variable/method names
- β Add JavaDoc comments for public methods
- β Keep methods focused and concise
- β Handle exceptions appropriately
- β Test on Android 6.0+ devices
When reporting bugs, please include:
- Android version
- Device model
- Steps to reproduce
- Expected vs actual behavior
- Screenshots (if applicable)
- Logcat output (if available)
This project is licensed under the GeoGrabber License (Non-Commercial).
You are free to use, modify, and share this software for personal, educational, and research purposes only. Commercial use, resale, or distribution for profit is strictly prohibited without explicit written permission from the project maintainer.
See the LICENSE file for full terms and conditions.
IMPORTANT LEGAL NOTICE:
This application is provided "AS IS" for educational and research purposes only. The developers and contributors:
- β Are NOT responsible for any misuse of this application
- β Do NOT encourage unauthorized network scanning or surveillance
- β Do NOT guarantee accuracy of collected data
- β Are NOT liable for any legal consequences of use
Users are solely responsible for:
- β Ensuring compliance with local laws and regulations
- β Obtaining proper authorization before scanning networks
- β Using the app ethically and responsibly
- β Respecting privacy rights of others
By using this application, you agree to:
- Only scan networks you own or have explicit permission to scan
- Comply with all applicable laws in your jurisdiction
- Use the app for legitimate purposes only
- Not use the app for illegal surveillance or network attacks
Project Maintainer: arn-c0de
| Contact Method | Link |
|---|---|
| π Issues | GitHub Issues |
| π¬ Discussions | GitHub Discussions |
| π§ Email | arn-c0de@protonmail.com |
| π Website |
This project is built with the help of:
- Android Open Source Project β Android framework
- Leaflet.js β Interactive mapping library
- OpenStreetMap β Map tile provider
- Google Play Services β Location services
- Community Contributors β Thank you to all contributors!
- WiFi Scanner community for best practices
- Stack Overflow contributors for solutions
- Beta testers for valuable feedback
β Star this repo if you find it useful!
Last Updated: October 30, 2025



