Hardware keylogger/implant that sits in between device and host. Based on the RP2350 with the ESP32 (ESP32-MINI-1) for WiFI control and extraction. For research/educational purposes only.
  • C 91.2%
  • HTML 6.1%
  • CMake 1.9%
  • CSS 0.4%
  • Shell 0.4%
Find a file
2026-04-16 19:32:30 -04:00
code some setup for listing directories 2026-04-16 19:32:30 -04:00
docs reworked uart/cmd system by a large amount. still need to write docs for it but it's a lot simpler and better 2026-03-25 12:59:08 -04:00
.gitmodules addition of host driver. need to setup more logic to get it working/get a proper female usb connection 2026-02-27 15:00:12 -05:00
LICENSE added MIT license 2026-02-18 23:14:35 -05:00
README.md more web and downloading stuff. added toggle for SD logging and more web stuff but will desperately need to refactor at some point 2026-04-16 13:08:25 -04:00

pumpkin

A hardware keylogger/implant based on the RP2350 and the ESP-MINI-1. Designed solely for keyboards.

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.sh script in the RP2350 code directory to setup the build/ directory. From there you can run make in the build directory. To learn more on how to flash/setup code on the RP2350 please see the official documentation by the Raspberry Pi Foundation.
    • You will also need (atleast when testing USB with UART serial logging) a TTL to USB converter. UART logging is also the default way we use serial logging (can be configured in CMakeLists.txt with all release versions by default using UART). These are easy to setup and work functionally the same as USB for logging.
  • ESP32 code requires the ESP-IDF (v6.0) from Espressif. Installing this requires a bit more setup. When building the toolchain make sure you target the ESP32 only.
    • The module being used for this is the ESP32-MINI-1 which does not have USB serial by default. This mean you either need a dev board with USB support (Espressif sells one) or soon code will be written to program it through the RP2350 which will be the way to program the chip on the finished device.
  • Note: this project is NOT officially supported on Windows 10/11 however, toolchains CAN be installed to compile and run this. I do not know how and if you plan on compiling on Windows (or mac) that is up to you to be able to figure out.

Current Todo

  • [1] Get more of the ESP32 Webserver to work ensuring basic functionality.
  • [2] Refactor all current code and make sure it's all hardened and robust
  • [3] Optimize and harden serial communication
  • [4] Finish schematics for device

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).

Current features

  • SD Card Support (SPI only at the moment)
    • File structure:
    • config/ holds all the configuration files (wip)
    • esp32_firmware/ holds the firmware to be flashed to the esp32
    • logs/ holds the devices logs (if you want to save them to SD)
    • keylogs/ holds the keylogger logs (main bulk of the storage)
  • Serial between the ESP32 and RP2350 with a full command system (UART)
  • USB Passthrough via TinyUSB
  • USB Keystroke Logging
  • ESP32 AP mode with HTTP server

Planned features

  • WiFi & ESP-NOW support for configuration and data extraction
  • Full hardware implentation
    • Custom PCB with RP2350 and the ESP-MINI-1 WROOM module
    • Both implant and cable-inline versions