Warning
This project is intended strictly for educational purposes, security research, and personal investigation. The author does not support, promote, or condone any illegal, unethical, or malicious use of this software. You are solely responsible for how you use this project and for ensuring full compliance with all applicable laws and regulations.
Real-time desktop surveillance over HTTP β zero dependencies, pure C, single binary.
Captures the target's screen via DXGI Desktop Duplication, encodes frames as JPEG, and streams them as MJPEG over a lightweight HTTP server. View the live feed from any browser. Built for red team ops with native AdaptixC2 integration β deploy, stream, watch, and clean up in seconds.
π― Drop it. Stream it. Watch it. Kill it.
SpyIt/
βββ Stream/
β βββ C/
β βββ Stream.c # Desktop capture + MJPEG HTTP server
β βββ stream.html # Browser-based stream viewer
β βββ compile.bat # Build Stream.exe (MSVC)
β βββ enum-screens.axs # AdaptixC2 AxScript automation
βββ Enum-Screens/
β βββ C/
β β βββ enumerate_screens.c # Simple monitor enumeration
β β βββ compile.bat
β βββ BOF/
β βββ enumerate_screens.c # BOF version (BeaconPrintf)
β βββ compile.bat
β βββ enum-screens.axs # Adaptix command for BOF
β βββ beacon.h
βββ .gitignore
βββ README.md
Location: Stream/C/
Demo video: Resources/demo.mp4
- DXGI Desktop Duplication for low-overhead screen capture
- WIC JPEG encoding β MJPEG stream over HTTP
- System audio + microphone streaming via WASAPI (WAV)
- Audio device enumeration (render + capture)
- Mouse cursor overlay (GDI)
- Multi-monitor support with runtime screen switching
- HTML viewer with screen selection, audio controls, record (WebM), and terminate
- Runs in background (detached process) by default
- Dynamic port via
--port
cd "Stream\C"
compile.batStream.exe # Default port 40484, background
Stream.exe --port 8882 # Custom port, background
Stream.exe --port 8882 --no-detach # Custom port, keep console
Stream.exe --logs-enable # Enable logging to stream.logOpen stream.html in a browser with the port as query parameter:
stream.html?port=40484
Or navigate directly to:
http://127.0.0.1:40484/
The HTML viewer includes audio device selection, play/stop, mute, and recording with audio.
| Endpoint | Description |
|---|---|
/ |
MJPEG video stream |
/audio/devices |
JSON array of audio devices (render + capture) |
| `/audio?device=&type=render | capture` |
/screens.js |
JSONP - number of available screens |
/switch.js?screen=N |
JSONP - switch to screen N |
/terminate.js |
JSONP - stop the server |
user32.lib gdi32.lib dxgi.lib d3d11.lib windowscodecs.lib ws2_32.lib ole32.lib oleaut32.lib propsys.lib
Extension file: Stream/C/enum-screens.axs
Load the script in AdaptixC2 via AxScript β Script Manager, then use the following commands in any beacon console:
| Command | Description |
|---|---|
spyit-check |
Verify Stream.exe and stream.html exist locally |
spyit-upload <filename> |
Upload Stream.exe to C:\Windows\Temp\<filename> on target |
spyit-start <filename> <port> |
Run SpyIt on target with the given port |
spyit-connect <remote_port> [local_port] |
Create local port forward (server β target) |
spyit-watch <local_port> |
Copy stream viewer URL to clipboard |
spyit-terminate <filename> <port> |
Kill process, stop port forward, delete file |
spyit-check
spyit-upload svchost.exe
spyit-start svchost.exe 40484
spyit-connect 40484
spyit-watch 40484
Then paste the URL from clipboard into your browser.
When done:
spyit-terminate svchost.exe 40484
Location: Enum-Screens/
A step-by-step guide to building a Beacon Object File that enumerates display monitors.
Enum-Screens/C/
Standalone EXE that uses EnumDisplayMonitors() and GetMonitorInfo() to list all monitors with resolution and position.
cd "Enum-Screens\C"
compile.bat
enumerate_screens.exeEnum-Screens/BOF/
BOF version using BeaconPrintf for output. Builds x64/x86 object files. Load enum-screens.axs in AdaptixC2, then run:
enum-screens
- Visual Studio 2017+ Build Tools (MSVC)
- Windows 10/11 SDK
- Windows target with Desktop Duplication support (Windows 8+)