- Overview
- Hardware
- Installation
- Quick Start
- Admin Panel
- Screenshots
- Project Layout
- Contributing
- License
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
█ T R A P D O O R █
█ ░░░░░░░░░░░░░░░ █
█ 3 2 ░░░░ █
█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
TrapDoor32 running on a TTGO LoRa32 v1.1 (ST7789 1.14″).
TrapDoor32 is an ESP32-based captive-portal credential tester for TTGO LoRa32 (and similar) boards.
It spins up an open WiFi AP, shows a customizable login UI to “capture” credentials, logs everything to SPIFFS, and lets you review/download data via a protected Admin Panel.
- Customizable captive portal with social-login style buttons
- Credential logging (last 50 entries) in
/creds.json - Runtime SSID management via Admin Panel (no code reflashing)
- Stats display on the onboard TFT display
- Minimal dependencies (TFT_eSPI, ESPAsyncWebServer, ArduinoJson, SPIFFS)
-
Clone & build
git clone https://github.com/yourusername/TrapDoor32.git cd TrapDoor32 pio run -
Upload
pio run --target upload --environment ttgo-lora32-v1
-
Monitor (optional)
pio device monitor --environment ttgo-lora32-v1
- Power on the board.
- Connect to the open WiFi SSID (default: whatever you last saved, or
Free_WiFion first boot). - The captive portal will pop up automatically on most devices.
- Choose a provider or email, enter any credentials—those get saved to SPIFFS.
- View live stats on the TFT display (clients & creds).
All administrative actions live under the /admin path:
- Download captured credentials as JSON
- Change the AP SSID on-the-fly (takes effect immediately)
Default admin credentials (hard-coded in main.cpp):
User: admin
Pwd : 1234
-
GET
/admin- HTTP Basic auth (
admin/1234) - Serves
data/admin.html,data/admin.css,data/admin.js
- HTTP Basic auth (
-
GET
/admin/creds.json- Authenticated download of captured
creds.json
- Authenticated download of captured
-
POST
/admin/wifi- Authenticated JSON body
{ "ssid": "NEW_NAME" } - Saves the new SSID into
/config.jsonand restarts the SoftAP
- Authenticated JSON body
Navigate to http://192.168.4.1/admin (default user admin, pwd 1234) to:
- Download your
creds.jsonlog - Change the Wi-Fi SSID on-the-fly
- Restart the SoftAP under the new SSID automatically
Captive-portal phishing demonstrator for TTGO ESP32 with 1.14″ ST7789
|
**1. Connect to Free_WiFi**
|
**2. Captive window opens**
|
**3. Custom login page**
|
|
**4. Select “Instagram”**
|
**5. TrapDoor32 Admin**
|
**6. Change SSID form**
|
├── src/
│ └── main.cpp # Core logic (captive portal + admin + TFT UI)
├── data/
│ ├── captive.html # Captive portal page
│ ├── style.css
│ ├── script.js
│ ├── admin.html # Admin Panel UI
│ ├── admin.css
│ ├── admin.js
│ ├── icons/ # Social login icons
│ └── screenshots/ # Example screenshots
├── platformio.ini # Build settings
└── README.md # Documentation
-
Portrait (vertical) mode
-
Header with logo text and separator line
-
Live refresh of:
- Users = current connected stations
- Creds = total captured entries
PRs and issues welcome! Please keep comments in English and only document non-trivial logic.
This project is released under the MIT License.