
ft9201-libfprint — Mis à jour !
Pilote Linux libfprint pour le lecteur d'empreintes digitales USB Focal-systems FT9201 (2808:93a9) — exécute le moteur de correspondance Windows de FocalTech nativement sous Linux, sans Wine. Inclut une méthode pour porter d'autres lecteurs réservés à Windows Hello.
ft9201-libfprint
Prise en charge des empreintes digitales sous Linux pour le lecteur USB Focal-systems FT9201
(2808:93a9, vendu comme un dongle Windows Hello autonome), en tant que pilote
libfprint.
Le capteur est un minuscule lecteur optique 96×96. Le comparateur intégré de libfprint fait
un mauvais travail sur une image aussi petite, donc ce pilote réutilise plutôt le propre moteur de correspondance de FocalTech
— le ftWbioEngineAdapter.dll de leur pilote Windows signé —
en l'exécutant nativement sous Linux avec un petit chargeur PE en processus. Pas de Wine,
pas de Windows, pas de cloud.
Ce dépôt est aussi une méthode réutilisable, pas seulement un pilote. La technique — exécuter le moteur de correspondance Windows d'un fabricant nativement sous Linux, sans Wine — se généralise à d'autres lecteurs « Windows Hello uniquement », y compris ceux qui embarquent un canal sécurisé SDCP (les capteurs crypto de classe Synaptics/Goodix/ELAN/EgisTec), via le module optionnel
src/crypto_shims.c. Le FT9201 est l'exemple pratique ; le chargeur en processus, le pont WinBio et la couche de contournement crypto sont réutilisables pour le prochain périphérique. Voir PORTING.md pour la méthode pas à pas et ce qui peut être réutilisé tel quel.
Statut
Fonctionne de bout en bout sur du matériel réel : inscription et vérification via fprintd /
outils en ligne de commande, et dans KDE/GNOME une fois installé. Il fait correspondre votre doigt
en utilisant le véritable algorithme du fabricant.
Développé et testé avec
ce lecteur exact (ASIN B0DK7LQZGH) —
la variante FT9348W du 2808:93a9.
Limitations :
- Testé uniquement sur cette variante FT9348W du périphérique
2808:93a9. - Le comparateur est un binaire propriétaire que nous appelons ; nous ne pouvons pas corriger les bugs à l'intérieur.
- x86-64 uniquement (la DLL et le chargeur sont en 64 bits).
Comment ça fonctionne (version courte)
- L'initialisation USB + la séquence de démarrage du firmware ont été rétro-conçues à partir des propres pilotes de FocalTech ; le firmware du microcontrôleur 8051 est chargé, puis une séquence spécifique de configuration de registre le démarre.
- Chaque capture (96×96) est recadrée au centre pour obtenir le 64×80 attendu par le moteur.
ft_engine.cest un chargeur d'environ 450 lignes qui mappeftWbioEngineAdapter.dllen mémoire, fournit les ~90 fonctionskernel32qu'il importe, configure un faux TEB Windows, et appelle l'interface WinBio du moteur pour l'inscription/vérification.- Le chargeur mappe le code en lecture-exécution et les données en lecture-écriture depuis un fichier
en mémoire, donc aucune page n'est jamais accessible en écriture et exécutable. Cela signifie qu'il fonctionne sous
le durcissement
MemoryDenyWriteExecutepar défaut defprintd— vous n'avez pas à désactiver de paramètres de sécurité.
Voir docs/how-it-works.md pour le compte rendu technique complet.
Prérequis
Outils de compilation + dépendances de construction de libfprint. Sur 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 : les équivalents — libglib2.0-dev libgusb-dev libnss3-dev libpixman-1-dev libgudev-1.0-dev libsystemd-dev, plus cabextract.)
Construction et installation
git clone https://github.com/OMGrant/ft9201-libfprint
cd ft9201-libfprint
scripts/fetch-blobs.sh # récupérer la DLL du fabricant + le firmware MCU (voir note ci-dessous)
scripts/build.sh # cloner libfprint épinglé, greffer le pilote, construire
Essayez sans rien installer :
FT9201_ENGINE_DLL=$PWD/blobs/ftWbioEngineAdapter.dll \
LD_LIBRARY_PATH=libfprint/build/libfprint \
libfprint/build/examples/enroll
Installez-le pour KDE/GNOME/connexion (côte à côte ; la bibliothèque libfprint de votre distribution est laissée intacte, aucun durcissement désactivé) :
sudo scripts/install.sh
fprintd-enroll
Tout annuler : sudo scripts/install.sh --uninstall.
Les binaires propriétaires
Ce dépôt ne contient aucun binaire propriétaire. Deux fichiers appartiennent à FocalTech et sont
récupérés depuis des sources publiques existantes lors de la construction par scripts/fetch-blobs.sh :
| Fichier | Ce que c'est | D'où ça vient |
|---|---|---|
ftWbioEngineAdapter.dll | le moteur de correspondance | Le pilote Windows signé de FocalTech sur le Catalogue Microsoft Update |
Firmware MCU FT9348W (src/ft9201_fw.h) | Firmware 8051 exécuté par le capteur | extrait (symbole FOCALFP_9348_FW_APP) du binaire public ft9201-static |
Récupérer les binaires manuellement
Si l'une des URL de téléchargement a changé, vous n'avez besoin que de ces deux fichiers :
ftWbioEngineAdapter.dll— recherchez sur le Catalogue Microsoft Update « FocalTech Electronics Biometric » (pilote 1.0.3.58, correspondant à l'ID matérielUSB\VID_2808&PID_93A9). Téléchargez le.cab, extrayez-le aveccabextractet placezftWbioEngineAdapter.dlldansblobs/.- Firmware MCU — obtenez n'importe quelle copie du binaire libfprint Linux de FocalTech qui
contient le symbole
FOCALFP_9348_FW_APP(par exemple depuisft9201-static) et lancezpython3 scripts/extract-firmware.py <ce-libfprint-2.so> src/ft9201_fw.h.
Ensuite, relancez scripts/build.sh.
Crédits
- Le protocole USB a été initialement rétro-conçu par banianitc/ft9201-fingerprint-driver.
- Le firmware et la séquence d'initialisation/démarrage ont été recoupés avec le binaire Linux de FocalTech via mrrbrilliant/ft9201-static.
- Construit sur libfprint.
La méthode réutilisable et le chemin pour les capteurs crypto s'appuient également sur les travaux de :
- uunicorn — dont synaWudfBioUsb-sandbox et fourche Wine sont le harnais pour tracer le pilote biométrique Windows d'un fabricant sous Wine, ce qui permet de récupérer le protocole de commande d'un capteur crypto sans machine Windows.
- Marco Trevisan (3v1n0), un mainteneur de libfprint — qui a indiqué la voie vers cette approche de traçage sous Wine, et dont l'impulsion pour améliorer la correspondance propre de libfprint en amont cadre pourquoi la voie du comparateur fabricant existe.
- championswimmer/libfprint-eh577 — travaux antérieurs pour la famille de capteurs EgisTec EH577.
Autres façons d'utiliser un FT9201 sous Linux
Ce n'est pas la seule approche — les alternatives diffèrent principalement par comment elles réutilisent le comparateur de FocalTech (elles le font toutes ; le minuscule capteur exclut la correspondance générique).