A Raspberry Pi turned into a portable music player appliance with an integrated offensive security toolkit for authorized penetration testing. Features a Waveshare 1.44" LCD HAT with joystick, a hacker-themed web dashboard, and 14 built-in pentest tools.
- MPD-powered audio with FLAC/MP3/OGG/WAV/OPUS support
- Web dashboard with real-time spectrum visualizer
- LCD screen with play/pause, skip, volume, shuffle, repeat
- Drag-and-drop upload, playlists, queue management
- Bluetooth A2DP sink (pair your phone as a speaker)
- OTA self-update from GitHub
| Tool | Description |
|---|---|
| Network Scanner | nmap/arp-scan host discovery, port scanning, OS detection |
| Credential Harvester | LLMNR/NBT-NS/mDNS poisoner with NTLM hash capture |
| USB HID Injector | BadUSB-style keystroke injection via USB gadget |
| WiFi Monitor | Monitor mode, packet capture, deauth, WPA handshake |
| Bluetooth A2DP Sink | Turn the Pi into a wireless speaker |
| Bluetooth HID | Wireless keyboard injection over Bluetooth |
| BLE Scanner | Scan for BLE beacons, advertise iBeacon/Eddystone |
| Evil Twin WiFi | Rogue AP with captive portal (Facebook/generic login) |
| DNS Spoofing | Redirect DNS queries + passive DNS monitoring |
| Hash Cracker | hashcat/john integration for cracking captured hashes |
| Tor Tunnel | Route traffic through Tor, transparent proxy, exit IP check |
| WireGuard VPN | VPN client/server with key generation |
| Reverse Shell | SSH tunnels, netcat shells, webhook beacons, persistence |
| OTA Update | Self-update from GitHub, config backup/restore |
windows_shell.txt- Open cmd via Win+Ropen_router.txt- Open router admin pagepowershell_download.txt- Download and executelinux_reverse_shell.txt- Linux reverse shelllinux_wifi_steal.txt- Extract saved WiFi passwordslinux_usb_exfil.txt- Copy files to USB drivemacos_reverse_shell.txt- macOS reverse shellmacos_wifi_steal.txt- Extract Keychain WiFi passwordsmacos_recon.txt- System reconnaissancechromeos_shell.txt- ChromeOS shell accesschromeos_wifi_dump.txt- ChromeOS WiFi config dump
| Part | Notes |
|---|---|
| Raspberry Pi (Zero 2 W, 3, 4, 5) | WH = pre-soldered headers for LCD HAT |
| Waveshare 1.44" LCD HAT (ST7735) | Must have joystick + KEY1-3 buttons |
| microSD 16-64 GB | OS + music library |
| Audio output (pick one) | |
| A) USB audio dongle | Cheap USB sound card (note: uses the data port) |
| B) PCM5102 I2S DAC | Recommended for Pi Zero (plays while USB gadget runs) |
| C) MAX98357A I2S amp | Standalone speaker build |
- Flash Raspberry Pi OS Lite to SD card
- Boot the Pi and SSH in:
ssh pi@evilplayer.local
- Clone and install:
git clone https://github.com/YOUR_USERNAME/evilplayer.git cd evilplayer sudo bash install.sh sudo reboot
Done. The Pi boots straight into the player.
| Input | Action |
|---|---|
| OK | play/pause |
| LEFT/RIGHT | prev/next track |
| UP/DOWN | volume (+ auto-repeat) |
| KEY1 | shuffle toggle |
| KEY2 | repeat OFF/ALL/ONE |
| KEY3 | menu (library/playlists/queue/pentest/settings) |
Screen blanks after 5 min idle; any button wakes it.
Open http://10.55.0.1 when plugged via USB, or http://evilplayer.local:8000
over WiFi.
Tabs:
- LIBRARY - Browse and upload music
- QUEUE - Manage playback queue
- PLAYLISTS - Save/load playlists
- FX - Visual effects (boot sequence, intrusion alert, skull rain, self-destruct)
- LAB - USB attack surface analysis (educational)
- PENTEST - All 14 offensive tools with live output
- LOG - Event log
Add password protection:
sudo systemctl edit evilplayer-webuiAdd:
[Service]
Environment=PLAYER_TOKEN=your_secret_token
Browse with: http://evilplayer.local:8000?token=your_secret_token
- SD card - Pop it out, drag files onto the MUSIC partition (FAT32)
- USB gadget - Plug Pi into PC, appears as a "MUSIC" drive
- Web upload - Drag & drop at
http://10.55.0.1orhttp://evilplayer.local:8000 - SCP:
scp file.mp3 pi@evilplayer.local:/var/lib/player/music/ ssh pi@evilplayer.local 'mpc update'
opt/evilplayer/
lcd_driver.py ST7735 SPI LCD driver
input_gpio.py Joystick/buttons via GPIO
mpdctl.py MPD control wrapper
evlog.py Shared event logger
ui/
main_ui.py On-device LCD interface
webui/
app.py Flask backend
templates/
index.html Dashboard HTML
static/
app.js Dashboard JavaScript
style.css Hacker-themed CSS
gadget/
usb_gadget.sh USB gadget setup script
usbsync.py USB share file importer
conf/
mpd.conf MPD configuration
pentest/ Offensive security toolkit
__init__.py
manager.py Tool lifecycle & state management
scanner.py Network recon (nmap/arp-scan)
responder.py LLMNR/NBT-NS credential harvester
hid_inject.py USB HID keyboard injector
wifi_mon.py WiFi monitor/deauth/handshake
bt_sink.py Bluetooth A2DP sink
bt_hid.py Bluetooth HID keyboard
btle_scan.py BLE scanner/advertiser
evil_twin.py Rogue WiFi AP + captive portal
dns_spoof.py DNS spoofing
hashcrack.py Hashcat/John wrapper
tor_tunnel.py Tor tunnel + transparent proxy
wireguard_vpn.py WireGuard VPN client/server
reverse_shell.py Reverse shells + persistence
ota_update.py Self-update from GitHub
payloads/ HID payload scripts
systemd/ Systemd service files
tools/ CLI utilities
install.sh Installer script
Installed automatically by install.sh:
- Audio: mpd, mpc
- Python: flask, pillow, numpy, spidev, rpi.gpio, mpd, scapy
- Networking: nmap, arp-scan, tcpdump, avahi
- Bluetooth: bluez, bluez-tools
- WiFi: hostapd, dnsmasq
- Security: hashcat, john, tor, wireguard-tools
- Input: xdotool
- LCD white/black: Check SPI is enabled (
raspi-config nonint do_spi 0), reseat HAT. If rotated, changeMADCTL_VALinlcd_driver.py(try 0x00 / 0x60 / 0xA0 / 0xC0). - No sound: Run
aplay -lto list devices, adjustdevice:in/etc/mpd.conf, thensudo systemctl restart mpd. - USB gadget not working: Use the data port (not power). Check
systemctl status evilplayer-gadget. - Logs:
journalctl -u evilplayer-lcdui -f,-u evilplayer-webui, or the LOG tab in the dashboard.
For authorized penetration testing and educational purposes only. All actions are logged. Users are responsible for complying with all applicable laws and regulations. Only use on networks and systems you own or have explicit written permission to test.
MIT