
ft9201-libfprint — Updated!
Linux-libfprint-Treiber für den Focal-systems FT9201 (2808:93a9) USB-Fingerabdruckleser — führt FocalTechs eigene Windows-Matching-Engine nativ unter Linux aus, kein Wine. Enthält eine Methode zum Portieren anderer Windows-Hello-only-Leser.
ft9201-libfprint
Linux-Fingerabdruckunterstützung für den Focal-systems FT9201 USB-Leser
(2808:93a9, verkauft als eigenständiger Windows Hello-Dongle), als
libfprint-Treiber.
Der Sensor ist ein winziger 96×96 optischer Leser. Der eingebaute Matcher von libfprint liefert bei einem so kleinen Bild schlechte Ergebnisse, daher verwendet dieser Treiber stattdessen FocalTechs eigene Matching-Engine — die ftWbioEngineAdapter.dll aus ihrem signierten Windows-Treiber — und führt sie nativ unter Linux mit einem kleinen In-Prozess-PE-Lader. Kein Wine, kein Windows, keine Cloud.
Dieses Repository ist auch eine wiederverwendbare Methode, nicht nur ein einzelner Treiber. Die Technik — die Windows-Matching-Engine eines Herstellers nativ unter Linux auszuführen, ohne Wine — lässt sich auf andere „nur Windows Hello“-Lesegeräte verallgemeinern, einschließlich solcher mit einem SDCP-Sicherheitskanal (die Kryptosensoren der Synaptics/Goodix/ELAN/EgisTec-Klasse), über das optionale Modul
src/crypto_shims.c. Der FT9201 ist das ausgearbeitete Beispiel; der In-Prozess-Lader, die WinBio-Brücke und die Krypto-Bypass-Schicht lassen sich auf das nächste Gerät übertragen. Siehe PORTING.md für die Schritt-für-Schritt-Methode und was unverändert übernommen werden kann.
Status
Funktioniert durchgängig auf echter Hardware: Registrieren und Verifizieren über fprintd / Befehlszeilenwerkzeuge und nach der Installation in KDE/GNOME. Es vergleicht Ihren Finger mit dem echten Algorithmus des Herstellers.
Entwickelt und getestet mit diesem speziellen Lesegerät (ASIN B0DK7LQZGH) — der FT9348W-Variante von 2808:93a9.
Einschränkungen:
- Nur mit dieser FT9348W-Variante des
2808:93a9-Geräts getestet. - Der Matcher ist ein proprietäres Blob, das wir aufrufen; wir können keine Fehler darin beheben.
- Nur x86-64 (die DLL und der Lader sind 64-Bit).
Wie es funktioniert (Kurzfassung)
- Die USB-Initialisierungs- und Firmware-Boot-Sequenz wurde aus FocalTechs eigenen Treibern zurückentwickelt; die 8051-MCU-Firmware wird hochgeladen, dann startet eine spezifische Register-Konfigurationssequenz das Gerät.
- Jeder Capture (96×96) wird auf die vom Motor erwarteten 64×80 zentriert zugeschnitten.
ft_engine.cist ein etwa 450-zeiliger Lader, derftWbioEngineAdapter.dllin den Speicher abbildet, die etwa 90 von ihr importiertenkernel32-Funktionen bereitstellt, einen gefälschten Windows-TEB einrichtet und die WinBio-Schnittstelle des Motors für Registrierung/Verifizierung aufruft.- Der Lader bildet Code als lese-ausführbar und Daten als lese-schreibbar aus einer Datei im Speicher ab, sodass keine Seite jemals gleichzeitig beschreibbar und ausführbar ist. Das bedeutet, dass er unter der standardmäßigen
MemoryDenyWriteExecute-Härtung vonfprintdläuft — Sie müssen keine Sicherheitseinstellungen deaktivieren.
Siehe docs/how-it-works.md für die vollständige technische Beschreibung.
Voraussetzungen
Build-Werkzeuge + Build-Abhängigkeiten von libfprint. Auf Fedora/Nobara:
sudo dnf install git meson ninja-build gcc cabextract python3 \
glib2-devel gusb-devel nss-devel pixman-devel gobject-introspection-devel \
libgudev-devel systemd-devel
(Debian/Ubuntu: die Entsprechungen — libglib2.0-dev libgusb-dev libnss3-dev libpixman-1-dev libgudev-1.0-dev libsystemd-dev, plus cabextract.)
Build & Installation
git clone https://github.com/OMGrant/ft9201-libfprint
cd ft9201-libfprint
scripts/fetch-blobs.sh # pull the vendor DLL + MCU firmware (see note below)
scripts/build.sh # clone pinned libfprint, graft the driver in, build
Probieren Sie es ohne Installation aus:
FT9201_ENGINE_DLL=$PWD/blobs/ftWbioEngineAdapter.dll \
LD_LIBRARY_PATH=libfprint/build/libfprint \
libfprint/build/examples/enroll
Installieren Sie es für KDE/GNOME/Anmeldung (nebeneinander; die libfprint Ihrer Distribution bleibt unberührt, keine Härtung deaktiviert):
sudo scripts/install.sh
fprintd-enroll
Alles rückgängig machen: sudo scripts/install.sh --uninstall.
Die proprietären Blobs
Dieses Repository enthält keine proprietären Binärdateien. Zwei Dateien gehören FocalTech und werden zur Build-Zeit von scripts/fetch-blobs.sh aus vorhandenen öffentlichen Quellen abgerufen:
| Datei | Was es ist | Woher es kommt |
|---|---|---|
ftWbioEngineAdapter.dll | die Matching-Engine | FocalTechs signierter Windows-Treiber im Microsoft Update Catalog |
FT9348W MCU-Firmware (src/ft9201_fw.h) | 8051-Firmware, die der Sensor ausführt | extrahiert (Symbol FOCALFP_9348_FW_APP) aus dem öffentlichen ft9201-static Blob |
Die Blobs manuell beschaffen
Falls einer der Download-URLs nicht mehr funktioniert, benötigen Sie nur diese beiden Dateien:
ftWbioEngineAdapter.dll— durchsuchen Sie den Microsoft Update Catalog nach "FocalTech Electronics Biometric" (Treiber 1.0.3.58, passt zur Hardware-IDUSB\VID_2808&PID_93A9). Laden Sie die.cabherunter, extrahieren Sie sie mitcabextractund legen SieftWbioEngineAdapter.dllinblobs/ab.- MCU-Firmware — besorgen Sie sich eine beliebige Kopie des FocalTech Linux libfprint-Blobs, das
das Symbol
FOCALFP_9348_FW_APPenthält (z. B. ausft9201-static) und führen Siepython3 scripts/extract-firmware.py <diese-libfprint-2.so> src/ft9201_fw.haus.
Führen Sie dann erneut scripts/build.sh aus.
Danksagungen
- USB-Protokoll ursprünglich zurückentwickelt von banianitc/ft9201-fingerprint-driver.
- Firmware und die Init-/Boot-Sequenz wurden mit FocalTechs Linux-Blob über mrrbrilliant/ft9201-static abgeglichen.
- Basierend auf libfprint.
Die wiederverwendbare Methode und der Kryptosensor-Pfad bauen zusätzlich auf der Arbeit dieser Personen auf:
- uunicorn — dessen synaWudfBioUsb-sandbox und Wine-Fork die Umgebung zum Verfolgen eines Windows-Biometrietreibers eines Herstellers unter Wine sind, wodurch das Befehlsprotokoll eines Kryptosensors ohne eine Windows-Box wiederhergestellt wird.
- Marco Trevisan (3v1n0), ein libfprint-Maintainer — der den Weg zu diesem Wine-Tracing-Ansatz wies und dessen Bestreben, libfprints eigenes Matching zu verbessern, den Rahmen dafür liefert, warum der Hersteller-Matcher-Weg überhaupt existiert.
- championswimmer/libfprint-eh577 — Vorarbeit für die EgisTec EH577-Sensorfamilie.
Andere Möglichkeiten, einen FT9201 unter Linux zu betreiben
Dies ist nicht der einzige Ansatz — die Alternativen unterscheiden sich hauptsächlich darin, wie sie FocalTechs Matcher wiederverwenden (das tun sie alle; der winzige Sensor schließt generisches Matching aus).