OMGrant GitHub avatar

ft9201-libfprint

OMGrant

A Linux libfprint driver for the Focal-systems FT9201 fingerprint reader that runs the vendor's Windows matching engine natively via a small in-process PE loader, enabling enroll/verify through fprintd.

Stars

23

7-day growth

No data

Forks

1

Open issues

0

License

LGPL-2.1

Last updated

2026-07-15

AI repository intelligence
FR-AI / ANALYSIS

Why it is worth attention

It demonstrates a reusable technique to run proprietary Windows biometric matching engines on Linux without Wine or cloud, preserving system security by avoiding writable+executable pages, and works alongside the distro's existing libfprint installation.

Who it is for

  • Linux users with the FT9201 USB fingerprint reader
  • Developers interested in reverse-engineering USB fingerprint sensors
  • Distro maintainers seeking to support Windows Hello dongles on Linux
  • Security-conscious users who want fingerprint login without disabling MemoryDenyWriteExecute

Use cases

  • Enrolling and verifying fingerprints via fprintd for KDE/GNOME login
  • Embedding the vendor's matching algorithm in open-source biometric applications
  • Porting the loader technique to other 'Windows Hello only' fingerprint readers
  • Testing fingerprint authentication without modifying the system's libfprint package

Strengths

  • Side-by-side installation leaves the distro's libfprint untouched
  • No security hardening disabled — the loader respects MemoryDenyWriteExecute
  • Open-source driver (LGPL-2.1) with a reusable method documented in PORTING.md
  • Works with mainline libfprint and fprintd; no TOD (Touch-On-Demand) required

Considerations

  • x86-64 only (the DLL and loader are 64-bit)
  • Tested only on one hardware variant (FT9348W of 2808:93a9)
  • The vendor's matching engine is a proprietary blob — bugs cannot be fixed

README quick start

ft9201-libfprint

Linux fingerprint support for the Focal-systems FT9201 USB reader (2808:93a9, sold as a standalone Windows Hello dongle), as a libfprint driver.

The sensor is a tiny 96×96 optical reader. libfprint's built-in matcher does a poor job on an image that small, so this driver instead reuses FocalTech's own matching engine — the ftWbioEngineAdapter.dll from their signed Windows driver — running it natively on Linux with a small in-process PE loader. No Wine, no Windows, no cloud.

This repo is also a reusable method, not just one driver. The technique — running a vendor's Windows matching engine natively on Linux, no Wine — generalizes to other "Windows Hello only" readers, including ones that ship an SDCP secure channel (the Synaptics/Goodix/ELAN/EgisTec-class crypto sensors), via the optional src/crypto_shims.c module. The FT9201 is the worked example; the in-process loader, the WinBio bridge, and the crypto-bypass layer carry over to the next device. See PORTING.md for the step-by-step method and what to reuse as-is.

Status

Working end-to-end on real hardware: enroll and verify through fprintd / command-line tools, and in KDE/GNOME once installed. It matches your finger using the vendor's real algorithm.

Developed and tested against this exact reader (ASIN B0DK7LQZGH) — the FT9348W variant of 2808:93a9.

Caveats:

  • Tested only on that FT9348W variant of the 2808:93a9 device.
  • The matcher is a proprietary blob we call into; we can't fix bugs inside it.
  • x86-64 only (the DLL and loader are 64-bit).

How it works (short version)

  • The USB init + firmware-boot sequence was reverse-engineered from FocalTech's own drivers; the 8051 MCU firmware is uploaded, then a specific register-config sequence starts it.
  • Each capture (96×96) is center-cropped to the 64×80 the engine expects.
  • ft_engine.c is a ~450-line loader that maps ftWbioEngineAdapter.dll into memory, provides the ~90 kernel32 functions it imports, sets up a fake Windows TEB, and calls the engine's WinBio interface for enroll/verify.
  • The loader maps code read-execute and data read-write from an in-memory file, so no page is ever writable and executable. That means it

Description

Linux libfprint driver for the Focal-systems FT9201 (2808:93a9) USB fingerprint reader — runs FocalTech's own Windows matching engine natively on Linux, no Wine. Includes a method for porting other Windows-Hello-only readers.

Related repositories

Similar projects matched by category, topics, and programming language.

nsdkinx
Featured
nsdkinx GitHub avatar

twell

Twell is a tiny, embeddable, zero-allocation physics engine for interruptible, Apple-style UI animations, available as a single-header C library with Python bindings.

MobileDesign & Creative
17
V4bel
V4bel GitHub avatar

Januscape

Januscape (CVE-2026-53359) is a 16-year-old use-after-free vulnerability in KVM/x86's shadow MMU that allows a guest to escape to the host on both Intel and AMD architectures.

C
512
bryanthaboi
bryanthaboi GitHub avatar

pokemon-gen1-recomp-project

A native LÖVE2D recreation of Pokémon Red and Blue that extracts game data from a player-supplied ROM to provide enhanced features like modding, controls rebinding, and link play.

C
349