Skip to content

Releases: mwr666/EvilKey-firmware

EvilKey firmware 0.9.1 - PCB V1.0 and V1.1

Choose a tag to compare

@mwr666 mwr666 released this 25 Oct 14:42

EvilKey 0.9.1

Firmware release for Waveshare ESP32-S3 Touch AMOLED 1.64,
PCB V1.0 and V1.1. Windows Manager remains 1.1.6.

Before activating Secure Boot and HMAC

Installing signed firmware from this repository's Releases and activating
Secure Boot and HMAC commits the device to the release signing key. After
activation, only compatible firmware signed with that same key is accepted;
obtain updates from this repository's Releases.
Unsigned firmware and firmware signed with your own or another key are
rejected. Secure Boot activation is irreversible: erasing Flash or
restoring a backup cannot undo it.

You can build your own version from source using your own RSA3072 signing
key
, but you must configure its custom trust profile and matching bootloader
before activating Secure Boot. Use EvilKey.cmd > Firmware > Keys and trust
to generate or import your own key, then build firmware and its matching
bootloader. The historical release builder retains its fixed release identity;
changing EVILKEY_SIGNING_KEY alone is insufficient. A device
already protected with the release key cannot install your custom-key build.
Secure Boot enforces firmware signatures; HMAC protects wrapping-key derivation.
See Build instructions
and the complete workflow guide, including key backup,
trust profiles, bootloader preparation and the order of HMAC/Secure Boot activation.

What's new

  • Game performance: in the games tested, average frame rate increased from
    approximately 19 FPS to approximately 25 FPS.

  • ABI6-NP1: resource banks, transactional saves, native textured fragments,
    image views, geometry queries and compact IMU input. ABI4/5 applications and
    existing saves remain compatible.

  • USB storage: asynchronous sector I/O for Manager Drive and USB Tool STORAGE.

  • NVS, PIN and FIDO: corrected NVS parsing and reserve handling, RAM reservation
    for protected writes, input/storage ownership and signed-update confirmation.

  • Memory: 120 MHz Flash and Octal PSRAM with temperature tuning for both PCB profiles.

  • Windows tools: native per-PCB builds and signed SD packaging through
    EvilKey.cmd, alongside the guarded migration and recovery tools.

Updated source tools and documentation

The firmware source ZIP includes the universal EvilKey.cmd menu: Firmware,
Manager, Diagnostics and tests, and Tools and maintenance. Firmware operations
include own-key generation/import, saved PCB/trust selection, normal and RESCUE
builds, FIRST_INSTALL/UPDATE/RESCUE packages, encrypted backups and recovery.
Choices use numbered menus, Y/N confirmations and file/folder dialogs.

Own private keys stay outside the source tree in
%USERPROFILE%\Documents\EvilKey_SigningKeys, with restricted NTFS permissions.
This version uses plaintext PEM files without DPAPI; the menu can export a
password-encrypted key backup. Keep the same private key for future own-key
updates and recovery. A new key cannot replace a lost trusted identity.

Download the complete firmware source ZIP to run the launcher. The separate
SD archives contain update payloads and documentation; the RESCUE source ZIP
retains the original corresponding build sources. Building and packaging do
not access a device or enable protection. Follow the
workflow guide before first installation or activation.

This archive refresh updates host tools, documentation and archive checksums.
The existing signed firmware, bootloaders and firmware receipts are unchanged.

Download and install

PCB Firmware SD update SD RESCUE
V1.0 BIN UPDATE ZIP RESCUE ZIP
V1.1 BIN UPDATE ZIP RESCUE ZIP

Download assets.
Source, native dependency sources, RESCUE sources, release-manifest.json
and SHA256SUMS.txt are included as separate downloads.

Choose the revision printed on your PCB. These signed XMC Flash profiles require
the matching signing identity and partition layout. Use the SD UPDATE archive
for an existing compatible installation; RESCUE is a separate firmware-repair path.

Updating

  1. Extract the matching SD UPDATE archive onto the card. It contains
    evilkey/update/firmware.bin and receipt.json.
  2. Safely eject storage and leave Manager Drive.
  3. In Settings → Firmware, select Stage and confirm with the existing PIN.
  4. Select Activate, confirm with the existing PIN, then Restart.
  5. Confirm the pending update with a fresh entry of the existing PIN, then restart.

The normal update preserves PIN, FIDO keys, settings, applications and saves.
It preserves the current protection state and does not replace the card's
RESCUE package. Keep power connected during installation. If an error appears,
record it before another PIN attempt.

Security and RESCUE · Getting started ·
Build instructions · Changelog

EvilKey firmware 0.8.1 - PCB V1 and V1.1

Choose a tag to compare

@mwr666 mwr666 released this 14 Oct 10:03

Firmware 0.8.1 repairs the display completion wait, with both matching PCB images installed and tested without Race freezes.

What's new

  • Replace the unbounded completion wait with a yielding 500 ms deadline.
  • Check actual DMA ownership after each notification; stale tokens cannot release an in-flight buffer. Failed refreshes unwind safely while retaining live transfer buffers/context.
  • Both PCB V1 and V1.1 images passed application/table readback, unchanged protected-storage digests and owner UI/several-lap Race retests without freezes. SD was not accessed by the installer.
  • Board profiles, ABI v4/v5, SIMD/SD models, clocks, rendering budgets and storage offsets are retained. Manager remains 1.1.6; confirmed V1.1 compatibility begins with 0.8.0.
  • No new quantitative FPS, long-duration endurance or credential-authentication result is claimed. Permanent panel failure uses existing unavailable-display handling.

Download and install

Choose the image labelled for the PCB silkscreen. The source ZIP includes both exact BIN/ELF/bootloader/table sets, portable records, firmware, MIT SDK and licenses. Extract it and open EvilKey.cmd: 7 builds, 11 installs, 6 checks software and 8 packages the verified release. Enter BOOT mode, select PCB/COM, confirm Y and wait for image/storage verification; then press RESET without BOOT.

Normal updates retain credentials/settings and microSD. A fresh module's separate ERASE initialization deletes internal flash; it is not required for an ordinary update. Application offset stays 0x500000. Verify downloads with SHA256SUMS.txt. A rebuild is a different artifact requiring its own validation.

Getting started · Build and flash · Validation

Firmware/GUI remain AGPLv3 with upstream notices; SDK is MIT. Manager/examples have separate licenses. Existing development security scope, historical V1 footage, the 0.7.4 tour and V1 enclosure qualification are unchanged.

EvilKey firmware 0.8.0 - PCB V1 and V1.1

Choose a tag to compare

@mwr666 mwr666 released this 13 Oct 22:59

Firmware 0.8.0 adds separate profiles for PCB V1 and V1.1, revision selection before build/COM, and guided first installation. Confirmed V1.1 compatibility begins with this release.

What's new

  • V1.1 pin map and shared display/touch reset sequence; the existing V1 startup is retained.
  • Normal EvilKey updates preserve credentials/settings/data. Factory or blank modules require exact ERASE confirmation for bootloader/table/application initialization; microSD files remain.
  • Labelled BIN/ELF/bootloader/table sets, build records and SHA256 checksums for each PCB, with mismatched/stale/corrupt input rejected.
  • Gamepad needs BLE CONNECTED before calibration/tilt steering. The shared IMU paths retain USB/BLE AirMouse, Settings and Apps support.
  • ABI v4/v5, package revision5, shared SIMD rendering, SD models, rendering budgets, clocks and storage offsets are retained. Manager stays at 1.1.6.

Download and install

Read the PCB silkscreen and choose its matching image set. The public source ZIP contains both exact release variants, firmware, the MIT SDK and licenses. Extract the full ZIP and open EvilKey.cmd: 7 builds, 11 builds/installs, 6 checks software and 8 packages source plus verified images.

For installation, select the PCB, enter BOOT mode and select the COM port. Normal updates require Y and compare protected storage before/after. Fresh initialization additionally requires ERASE and discards all internal flash including credentials/settings; empty input, N or Y cancels it. Press RESET without BOOT after verification. Keep microSD saves, models and reports.

Both original release BINs passed application/table readback, unchanged protected-storage digests and functional checks on their matching PCBs. Arduino-ESP32 3.3.12, Os, app offset 0x500000. A rebuild is a different artifact requiring its own checks. Historical V1 footage, the 0.7.4 UI tour and printable V1 enclosure retain their own scope.

Getting started · Build and flash · Validation

Firmware/GUI remain AGPLv3 with upstream notices; the SDK is MIT. Manager and examples have separate licenses. The firmware remains a development configuration; no FIDO certification, physical-extraction resistance, console/XInput or endurance claim is added.

EvilKey firmware 0.7.6 — SIMD rendering and SD models

Choose a tag to compare

@mwr666 mwr666 released this 13 Oct 12:57

Shared ESP32-S3 SIMD rendering for the GUI, 2D apps and native 3D scenes, with existing graphics and hardware clocks retained.

What's new

  • Common accelerated pixel fills, copies, transparent bitmap spans and display conversion.
  • Independent apps can load validated indexed .ekmesh models from microSD. The MIT SDK includes OBJ conversion and packaging tools.
  • Diagnostics starts OFF. Enable it in Settings for complete-session FPS, maximum native rendering time and Save report to /evilkey/diagnostics/.
  • ABI v4/v5, package revision 5, the corner exit profile and storage layout remain compatible. Manager stays at 1.1.6.

Download and install

The public source ZIP includes firmware, the MIT SDK and the exact release BIN. Extract the complete archive and open EvilKey.cmd: 7 builds, 11 builds and installs through the storage-preserving uploader, 6 runs software checks and 8 packages a release.

The released BIN uses Arduino-ESP32 3.3.12, Os, application offset 0x500000, and Waveshare ESP32-S3 Touch AMOLED 1.64 PCB V1.0. Keep existing SD app saves, models and reports. Checksums are included in the assets.

Getting started · Build and flash · Model SDK

Firmware and GUI remain AGPLv3 with upstream notices; the SDK is MIT. Manager, USB Tool examples and games retain their separate licenses. This V1 firmware remains a development configuration; see the security scope.

EvilKey firmware 0.7.5

Choose a tag to compare

@mwr666 mwr666 released this 09 Oct 21:41

EvilKey firmware 0.7.5

Changes since 0.7.4

  • Jet GUI and native Scene3D rendering share work between both ESP32-S3 cores.
  • Exact triangle spans, reused cube vertices and packed color/depth reduce
    redundant raster work and separate PSRAM accesses while preserving the visuals.
  • Rendering and display work are coordinated; bounded internal-memory tiles and
    smaller direct DMA buffer fallbacks support available memory configurations.
  • Diagnostics now has seven cards and Save report. One text file under
    /evilkey/diagnostics/ contains the complete report, regardless of the visible card.
  • Host Eject turns off Manager Drive. The device saves MSC OFF and briefly
    restarts, reconnecting without USB storage so local apps can access SD again.
    Enable Manager Drive in Settings to expose it again. Physical card removal is
    not the host Eject command. Failed setting persistence reports an error.

Jet and ABI v5 were introduced in 0.7.4. ABI v4/v5 compatibility, package revision
5, the corner exit profile and Manager 1.1.6 remain. Temporary debugging tools
and unused experimental rendering paths have been removed.

Installation

Use Getting started, Build and flash
and installation information.
The accepted image was installed on PCB V1.0 on 2026-10-09 with application
readback verified and protected nvs, wsdev, part0 and otadata unchanged.
No partition migration was required.

  • BIN: EvilKey_0.7.5.bin; 2,286,848 bytes.
  • SHA-256: f4874dde9d72fbaf3e9312df4408138ca654030d134e44bef0c9d784f1d4b6eb.
  • Arduino-ESP32 3.3.12; Os; app at 0x500000; unchanged partition layout.

The source ZIP contains firmware, templates, generated source, public SDK and the
exact accepted BIN. A rebuild produces a new artifact. See Validation.

Development and licensing

This remains development firmware with unencrypted credential NVS. Secure Boot
and encrypted flash/NVS provisioning are not enabled; no FIDO certification is
claimed. PCB V1.1 compatibility remains unverified.

Firmware/GUI are AGPLv3 with upstream notices; ABI/SDK are MIT. Manager and USB
Tool examples are distributed separately under their existing licenses.

EvilKey firmware 0.7.4

Choose a tag to compare

@mwr666 mwr666 released this 08 Oct 08:47

EvilKey firmware 0.7.4

Native Jet rendering gives the screensaver and Apps/Settings icons real depth
while keeping the original icon designs, mint accent and LVGL touch controls.
Apps and Settings share orbit timing and composition; status icons stay steady.
Geometry caching, rasterizer improvements and double-buffered panel transfers
reduce the rendering cost. The accepted release uses Os optimization.

ABI v5 adds bounded native Scene3D rendering for independent microSD apps.
ABI v4 packages remain supported. Both use package revision 5 and the shared
corner-exit-v1 profile. App Scene3D is separate from the Jet GUI renderer.
Existing FIDO/PIN, launcher, saves, USB Tool, AirMouse and BLE controls remain.

Accepted image and checks

The owner accepted the exact release on Waveshare PCB V1.0 on 2026-10-08.
Installation through EvilKey.cmd verified application readback and unchanged
nvs, wsdev, part0 and otadata digests. No partition migration was required.

  • BIN: EvilKey_0.7.4.bin; 2,265,808 bytes.
  • SHA-256: 7244d58bfd38c12cd81f7dcb865428227985e2cf5e3c3c7eafce4d801754db19.
  • Arduino-ESP32 3.3.12; Os; application capacity 4 MiB at 0x500000.

Release host checks covered Jet bounds/depth, LVGL navigation, PIN and module
integration, Apps/Settings ring parity, ABI4 apps and saves, ABI5 validation/
clipping/timeouts, display transport and storage guards. These are software
checks; they do not qualify the timing or sustained play of every native 3D app.
V1.1 compatibility and long-duration endurance are not established.

Use Build and flash and
installation information.
A rebuilt image is a new artifact, even when its version label matches.
The source ZIP includes public firmware, canonical templates, generated sketch,
Jet notices and the ABI4/ABI5 MIT SDK, plus the exact accepted BIN.

Development and licensing

This remains development firmware: credentials are stored in unencrypted NVS;
Secure Boot and encrypted flash/NVS provisioning are not enabled. The app API
boundary is not demonstrated hardware isolation. No FIDO certification is claimed.

Firmware/GUI are AGPLv3 with upstream notices; ABI/SDK are MIT. Manager stays
1.1.6 and is distributed separately, as are USB Tool examples and independently
licensed apps. No game packages or CAD are included in this release.

Validation · Graphics ·
ABI v5 · Artifact identity

EvilKey firmware 0.6.1 — matching Apps and Settings rings

Choose a tag to compare

@mwr666 mwr666 released this 06 Oct 08:15

EvilKey firmware 0.6.1

Apps and Settings now share identical orbit rings, highlight, light points,
brightness changes and the same 6.144-second cycle. Their original central
icons remain distinct. Animation OFF uses the same fixed composition.
This release retains the LVGL interface; the experimental Jet renderer is
not included. App ABI remains v4, package revision 5. Manager remains 1.1.6.

The owner accepted the exact BIN on PCB V1 on 2026-10-06. Application readback
was verified after installation through EvilKey.cmd on COM5; NVS, wsdev,
part0 and otadata hashes remained unchanged. No partition migration was
required. The changed rings passed 1024 host pixel comparisons; software
checks passed for Manager, GUI, flash installation and Ducky runtime.

BIN size: 2204448 bytes.
SHA-256: 90c0064a5e68e46e083307997374b13c4323d4d07c23c3f69a55a3a046a5c5b5.

Use EvilKey.cmd for building and storage-preserving installation; see
Build and flash and
installation information.
Never use whole-flash erase to update a configured key.

DEVELOPMENT ONLY: no Secure Boot or encrypted flash/NVS provisioning;
credentials remain in unencrypted NVS. API restrictions are not demonstrated
hardware isolation. Android/console/native XInput compatibility and long-duration
endurance are not established. The 0.6.0 checks remain documented separately.

Firmware/GUI: AGPLv3 with upstream notices; ABI/SDK: MIT. Manager, original
examples, independent games and CAD remain separately licensed.

EvilKey-firmware v0.6.0

Choose a tag to compare

@mwr666 mwr666 released this 03 Oct 14:57

EvilKey firmware 0.6.0

Animated Apps launcher with cached microSD catalog and 3x3 icon/name pages,
shared upper-left exit grip with progress and Yes/No confirmation, landscape
BLE Gamepad with IMU steering, and AirMouse over USB or BLE.

BLE runs only while a BLE module is active; exiting restores FIDO with the
radio off. The tested touch panel reports one contact: Gamepad uses IMU plus
one touch button, AirMouse uses hold-to-MOVE and a DRAG toggle.

App runtime remains ABI v4. Revision-5 packages require an embedded name/icon
and corner-exit-v1 profile. Independent apps and adjacent .save files remain
on microSD. The MIT SDK is included; game code, art and packages are not.

The exact BIN was accepted on PCB V1 on 2026-10-03, including controls,
orientation, AirMouse, USB/FIDO return, existing keys and games/saves. Protected
partition digests matched before/after flashing. SHA256SUMS binds the artifacts.
Start with EvilKey.cmd; see docs/BUILD_AND_FLASH.md and installation/rollback.
The release source ZIP includes the accepted BIN under artifacts/firmware/.

DEVELOPMENT ONLY: no Secure Boot or encrypted flash/NVS provisioning;
credentials remain in unencrypted NVS. Interpreter/API restrictions are not
demonstrated hardware isolation. Android handset, console/native XInput
compatibility and long-duration endurance are not established.

Firmware/GUI: AGPLv3 with upstream notices; ABI/SDK: MIT. Manager, original
examples and independent games have separate licenses.

EvilKey firmware 0.5.0 — ABI v4 and microSD saves

Choose a tag to compare

@mwr666 mwr666 released this 30 Sep 15:36

EvilKey firmware 0.5.0 expands the Apps interface so new capabilities can arrive as independent .ekapp packages copied to microSD. The firmware source and MIT-licensed SDK contain no separately licensed application code or packages.

New in 0.5.0

  • ABI v4 adds two simultaneous touch contacts, accelerometer readings, validated RGB565 assets, cropped blits, and bounded <id>.save files beside apps. Older ABI packages are rejected.
  • Apps and Wasm3 use PSRAM for large allocations, leaving internal memory for USB and microSD. Save I/O runs after each guest step.
  • The app-only upload helper checks the partition table and uses EraseFlash=none to preserve NVS.

Download and device test

Hardware: Waveshare ESP32-S3 Touch AMOLED 1.64, PCB V1.

Binary: EvilKey_0.5.0.bin — application-partition image only, 1,910,240 bytes. SHA-256: cfce4b1292225169aa74b75a3f48ae8eb2c8d71b7d0b9e4832defa00dfc7f286. The matching checksum file is attached.

The exact attached binary was flashed to the app partition at 0x10000 on COM5 after checking the partition table; esptool verified the write. After reboot, the owner confirmed USB/FIDO, existing credentials, two independent ABI v4 apps, and their save/continue flows. This is a device smoke test; endurance, interrupted save writes, and concurrent CTAP response under sustained app load remain unqualified.

Read installation information, ABI v4, and validation before installing.

EvilKey firmware 0.4.0 — Apps from microSD

Choose a tag to compare

@mwr666 mwr666 released this 29 Sep 23:27

EvilKey firmware 0.4.0 for the Waveshare ESP32-S3 Touch AMOLED 1.64 PCB V1. This release is a major step toward adding features through apps copied to microSD, without rebuilding firmware for every new app within the current ABI. It follows the question I asked the community about what else this hardware could do.

New in 0.4.0

  • Apps from microSD: place separate .ekapp WebAssembly bytecode packages in /evilkey/apps/ and start one from Settings → Apps. Replace or remove an app by changing its file on the card; there is no firmware-side installation step. No app bytecode or proprietary app source is bundled here.
  • Public ABI v3 and MIT SDK: apps receive touch coordinates and return validated drawing commands. The host bounds memory and execution, exposes no filesystem, USB, NVS or FIDO-key access to the guest, and provides a shared Yes/No exit confirmation. Apps needing capabilities beyond ABI v3 will require firmware changes. See ABI v3 and the minimal SDK.
  • Usable while powered by a charger: Apps, Settings and the screensaver remain accessible when USB supplies power without a host connection.

Device check and limits

The standalone public-source image was written to the PCB V1 app partition on COM5 and the written data was verified. The owner confirmed that a test app runs and existing FIDO credentials remained available after reboot. This is a device smoke test; endurance and simultaneous CTAP use while an app runs have not been qualified. Details are in VALIDATION.md.

Download and installation

EvilKey_0.4.0_PCB_V1_app.bin is the application-partition image only, not a whole-flash image. Size: 1,902,976 bytes. SHA-256: 4903b8c9b095caa86196c292c85afb00441742257b8ad9e8966eed663eaf7633. It was built from this public source with Arduino-ESP32 3.3.12. Follow the installation instructions for PCB V1 and preserve NVS: do not erase the whole flash or overwrite NVS partitions. The validated manual write targeted the app partition at 0x10000 after verifying the device partition table.

The source archive provided by GitHub is the corresponding AGPLv3 firmware source, including the Apps interpreter and license notices. The Windows Manager and USB Tool examples have separate repositories and releases.

Full changelog · Firmware overview