- C 82.4%
- HTML 15.4%
- CMake 1.6%
- CSS 0.3%
- Shell 0.3%
| code | ||
| docs | ||
| hardware/pumpkin-kicad | ||
| media | ||
| .gitmodules | ||
| LICENSE.md | ||
| README.md | ||
pumpkin
A hardware keylogger/implant based on the RP2350 and the ESP-MINI-1. Designed solely for keyboards.
DISCLAIMER
This device, whether as a prototype or finished device, including also it's firmware is for RESEARCH and EDUCATIONAL PURPOSES ONLY. No colaborator, designer, or manufacturer involved with this project's production, design, or logistics has any intention, whether explicit or implicit, to use this device beyond research and testing. This project is not intended to be used for crime and is to be designed and used in good faith. Any person or entity using this project's code, design, or any physically device to do any level of crime is not affiliated with V.L. Labs, this site or sister sites, or anyone also contributing to this project. The colaborators, designers, and manufacturers of this device DO NOT CONSPIRE OR DESIRE TO COMMIT ANY LEVEL OF CRIME and abide by the Computer Fraud and Abuse Act (Title 18 U.S. Code 1030).
This device, including both hardware designs and code, are not designed with the intent to sell or to be profited off of. Any individual following the license described in LICENSE.md is permitted to use any resources in this repository (pumpkin) on this site (git.vllabs.net).
ANY entity contributing to or using this project must agree to the above disclaimer and the license described in LICENSE.md
Rev 1.0 - 4/29/2026 written by designer & contributor Zane Maples
Media
Compilation
- RP2350 code requires the arm cross compiler (gcc-arm-none-eabi and libnewlib-arm-none-eabi). Package names for this will differ from linux distro to distro (ones provided work on Debian). Also requires CMake. Run the
setup.shscript in the RP2350 code directory to setup thebuild/directory. From there you can runmakein the build directory.- In order to flash this code you must put the compiled binary (pumpkin.bin) into the embedded folder in code/esp32-mini-1/main/embedded. The ESP32 will then flash this to the RP2350 at runtime.
- ESP32 code requires the ESP-IDF (v6.0.1) from Espressif. Installing this requires a bit more setup. When building the toolchain make sure you target the ESP32 only.
- For both chips you will need a UART to USB converter in order to read output and for the case of the ESP32 to program the device.
Current Todo
- [1] Finish all web functions & css (v0.7.x)
- [2] Optimize, analyze, and fully harden the ESP32 code (to move on from it tbh) (v0.7.x)
- [3] Work more on the USB driver and get it to be more polished in general (v0.8.x)
- [4] Add PCAP format (v0.8.x)
- [5] Create datasheet and full documentation (v0.9.x)
- [6] Polish everything for 1.0 release (v0.9.x)
Known Issues
- The USB stack DOES NOT properly support hotplugging. It should in theory work however TinyUSB often has a tendency to
not work properly and cannot detect when a device unmounts from the host or device. It shouldn't matter for the device
(as without the device side plugged in the board is powered off) however it matters for the host as it sometimes either
doesn't unmount or takes an extraordinarily long time to do so. Therefore, it is NOT recommended to hotplug devices to
the host stack!
- This may be able to be fixed in the future by bumping TinyUSB to the latest version (currently stuck in .18 in the pico-sdk, with compilation errors when trying to bump it to the newest vesion) as I've read some issues on their github and apparently host device detection has been improved.
- Composite USB keyboards (ie. ones with a mouse usb slot) have an issue where the mouse or other peripheral does not work. This would require some more TinyUSB setup that to be frank I do not want to setup. Maybe in the future this will be a possiblity (as it should be possible within TinyUSB, or atleast I think it is).
- The v1.0 version of the board gets pretty hot during operation. I believe this to be from the power diodes & linear regulator, alongside the current draw when transmitting and heavy loads on the SD card. This heat generally congregates to the center of the board and the SD card slot acts as sort of a heatsink. It doesn't get very hot (warm/hot to the touch, but not too incredibly hot) and I haven't noticed any degregation of performance from any subsystem. Just be warned if you ever plan to put this into a case, as without proper heatsinking/thermal management it could overheat.
Current features
- SD Card Support (SDMMC & SPI)
- File structure:
logs/holds system logs from both the ESP32 and RP2350keylogs/holds the keylogger logs (main bulk of the storage)config.jsonstores the startup configuration for the system
- USB Passthrough via TinyUSB
- USB Keystroke Logging
- RTC clock with coincell battery system to keep the date for an estimated 2-300 days with no power
- ESP32 AP mode with HTTP server
- Full file downloads and management (at around 300KB/s or ~2.5 megabit/s)
- Full configuration from the webserver with saving to disk
- Ability to live control the system