Volver a actualizaciones
ActualizadaAug 20, 2026

ft9201-libfprint — Actualizado!

Controlador de libfprint para Linux para el lector de huellas digitales USB Focal-systems FT9201 (2808:93a9) — ejecuta el motor de coincidencia propio de FocalTech para Windows de forma nativa en Linux, sin Wine. Incluye un método para portar otros lectores exclusivos de Windows Hello.

Compartir

ft9201-libfprint

Soporte de huellas dactilares en Linux para el lector USB Focal-systems FT9201 (2808:93a9, vendido como un dongle independiente de Windows Hello), como un controlador de libfprint.

Lector de huellas dactilares USB Focal-systems FT9201

El sensor es un diminuto lector óptico de 96×96. El comparador incorporado de libfprint funciona mal con una imagen tan pequeña, por lo que este controlador reutiliza el motor de comparación propio de FocalTech — el ftWbioEngineAdapter.dll de su controlador Windows firmado — ejecutándolo de forma nativa en Linux con un pequeño cargador PE en proceso. Sin Wine, sin Windows, sin nube.

Este repositorio también es un método reutilizable, no solo un controlador. La técnica — ejecutar el motor de comparación de Windows de un proveedor de forma nativa en Linux, sin Wine — se generaliza a otros lectores "solo Windows Hello", incluyendo aquellos que incorporan un canal seguro SDCP (los sensores criptográficos de clase Synaptics/Goodix/ELAN/EgisTec), a través del módulo opcional src/crypto_shims.c. El FT9201 es el ejemplo práctico; el cargador en proceso, el puente WinBio y la capa de omisión criptográfica se trasladan al siguiente dispositivo. Consulte PORTING.md para conocer el método paso a paso y qué reutilizar tal cual.

Estado

Funciona de principio a fin en hardware real: inscripción y verificación a través de fprintd / herramientas de línea de comandos, y en KDE/GNOME una vez instalado. Reconoce su huella usando el algoritmo real del proveedor.

Desarrollado y probado con este lector exacto (ASIN B0DK7LQZGH) — la variante FT9348W de 2808:93a9.

Advertencias:

  • Probado solo en esa variante FT9348W del dispositivo 2808:93a9.
  • El comparador es un binario propietario al que llamamos; no podemos corregir errores dentro de él.
  • Solo x86-64 (la DLL y el cargador son de 64 bits).

Cómo funciona (versión corta)

  • La secuencia de inicio USB + carga del firmware fue obtenida mediante ingeniería inversa de los controladores propios de FocalTech; el firmware de la MCU 8051 se carga, luego una secuencia específica de configuración de registros lo inicia.
  • Cada captura (96×96) se recorta al centro a los 64×80 que espera el motor.
  • ft_engine.c es un cargador de ~450 líneas que mapea ftWbioEngineAdapter.dll en memoria, proporciona las ~90 funciones kernel32 que importa, configura un TEB ficticio de Windows y llama a la interfaz WinBio del motor para inscripción/verificación.
  • El cargador mapea el código como lectura-ejecución y los datos como lectura-escritura desde un archivo en memoria, por lo que ninguna página es a la vez escribible y ejecutable. Eso significa que se ejecuta bajo el endurecimiento MemoryDenyWriteExecute predeterminado de fprintdno tiene que desactivar ninguna opción de seguridad.

Consulte docs/how-it-works.md para el informe técnico completo.

Requisitos

Herramientas de compilación + dependencias de compilación de libfprint. En 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: los equivalentes — libglib2.0-dev libgusb-dev libnss3-dev libpixman-1-dev libgudev-1.0-dev libsystemd-dev, más cabextract.)

Compilar e instalar

git clone https://github.com/OMGrant/ft9201-libfprint
cd ft9201-libfprint
scripts/fetch-blobs.sh     # obtiene la DLL del proveedor + firmware de la MCU (ver nota abajo)
scripts/build.sh           # clona libfprint fijado, injerta el controlador, compila

Pruébelo sin instalar nada:

FT9201_ENGINE_DLL=$PWD/blobs/ftWbioEngineAdapter.dll \
LD_LIBRARY_PATH=libfprint/build/libfprint \
libfprint/build/examples/enroll

Instálelo para KDE/GNOME/inicio de sesión (de forma paralela; la libfprint de su distribución no se toca, no se desactiva ningún endurecimiento):

sudo scripts/install.sh
fprintd-enroll

Deshacer todo: sudo scripts/install.sh --uninstall.

Los binarios propietarios

Este repositorio no contiene binarios propietarios. Dos archivos son de FocalTech y se obtienen de fuentes públicas existentes en tiempo de compilación mediante scripts/fetch-blobs.sh:

ArchivoQué esDe dónde viene
ftWbioEngineAdapter.dllel motor de comparaciónControlador Windows firmado de FocalTech en el Catálogo de Actualizaciones de Microsoft
Firmware MCU FT9348W (src/ft9201_fw.h)Firmware 8051 que ejecuta el sensorextraído (símbolo FOCALFP_9348_FW_APP) del binario público ft9201-static

Obteniendo los binarios manualmente

Si alguna URL de descarga se ha movido, solo necesita esos dos archivos:

  • ftWbioEngineAdapter.dll — busque en el Catálogo de Actualizaciones de Microsoft "FocalTech Electronics Biometric" (controlador 1.0.3.58, coincide con el ID de hardware USB\VID_2808&PID_93A9). Descargue el .cab, extraiga con cabextract y coloque ftWbioEngineAdapter.dll en blobs/.
  • Firmware MCU — obtenga cualquier copia del binario Linux libfprint de FocalTech que contenga el símbolo FOCALFP_9348_FW_APP (p. ej., de ft9201-static) y ejecute python3 scripts/extract-firmware.py <ese-libfprint-2.so> src/ft9201_fw.h.

Luego vuelva a ejecutar scripts/build.sh.

Créditos

El método reutilizable y la ruta del sensor criptográfico se basan adicionalmente en el trabajo de:

  • uunicorn — cuyo synaWudfBioUsb-sandbox y fork de wine son el armazón para rastrear el controlador biométrico Windows de un proveedor bajo Wine, que es cómo se recupera el protocolo de comandos de un sensor criptográfico sin una máquina Windows.
  • Marco Trevisan (3v1n0), mantenedor de libfprint — quien señaló el camino hacia ese enfoque de rastreo con Wine, y cuyo impulso para mejorar la propia comparación de libfprint río arriba enmarca por qué existe la ruta del comparador del proveedor.
  • championswimmer/libfprint-eh577 — trabajo previo para la familia de sensores EgisTec EH577.

Otras formas de ejecutar un FT9201 en Linux

No es el único enfoque — las alternativas difieren principalmente en cómo reutilizan el comparador de FocalTech (todas lo hacen; el sensor diminuto descarta la comparación genérica).

  • Romk-a/ft9201-linux-setup — una guía para Debian/Ubuntu (Astra Linux) que instala el controlador Linux "TOD" propietario precompilado de FocalTech (de ryenyuku/libfprint-ft9201; también han existido RPMs para Fedora) y parchea binariamente la tabla de ID USB (933893a9).
    • Cómo se compara: esa ruta requiere menos trabajo — instalar un .deb, parchear dos bytes, sin ingeniería inversa. Pero necesita libfprint con soporte TOD (familia Debian/Ubuntu; no en Fedora/Arch estándar), reemplaza toda su libfprint del sistema con una compilación antigua y completamente cerrada, y tiene que luchar con el gestor de paquetes para mantenerla fijada. Este proyecto, en cambio, proporciona un controlador abierto, se instala de forma paralela (la libfprint de su distribución no se toca), funciona en libfprint principal sin TOD y carga solo el comparador DLL aislado del proveedor — que es lo que toda la ingeniería inversa logró.
    • Versión corta: en Debian/Ubuntu, la ruta TOD es el botón fácil; en Fedora/Arch, o si lo quiere abierto y no invasivo, use este.
  • Existen controladores de kernel (banianitc — la referencia de protocolo de la que este proyecto hizo ingeniería inversa, bm16ton/ft92010x9338) pero no se integran con libfprint/fprintd, por lo que no hay soporte para inicio de sesión/PAM.

El controlador Linux TOD propietario que esos paquetes .deb/RPM redistribuyen parece haber sido un lanzamiento de FocalTech/GPD para la GPD Win 4 que luego fue retirado de la distribución oficial — razón por la cual ahora sobrevive solo como realojamientos de la comunidad. (Tenga en cuenta también que algunas unidades GPD Win 4 incluyen un sensor completamente diferente, un Chipsailing CS9711, no esta pieza de FocalTech).

Proyectos relacionados

  • championswimmer/libfprint-eh577 — un esfuerzo de controlador Linux para el EgisTec EH577 (1c7a:0577), otro lector de tipo presión "solo Windows Hello" (sensor activo de 52×72). Diferente proveedor y protocolo USB, pero la misma forma de comparación en el host: su paquete Windows incluye una DLL adaptadora del motor del proveedor (EgisTouchFPEngine0577.dll, sin enclave VBS), por lo que el método en PORTING.md también se aplica a él.
  • OMGrant/eh577-libfprint — este método llevado de principio a fin al EgisTec EH577 y publicado como un controlador funcional. Las técnicas criptográficas de la §3b se validaron contra sus compilaciones SDCP; el controlador distribuido apunta a una compilación del Catálogo anterior a SDCP (un comparador puramente software — véase la nota de la §3b sobre selección de compilación), inscribiendo y verificando huellas reales en Linux.

Licencia

El controlador y el cargador (src/, scripts/) tienen licencia LGPL-2.1-o-superior, coincidiendo con libfprint. La DLL y el firmware de FocalTech son propiedad de ellos y no se distribuyen aquí — usted los obtiene por su cuenta. Este proyecto es una herramienta de interoperabilidad para hardware que usted posee; no incluye ni relicencia ningún código de FocalTech.

Categorías