Linux 指纹识别支持,适用于 Focal-systems FT9201 USB 读卡器(2808:93a9,作为独立 Windows Hello 加密狗销售),作为 libfprint 的驱动程序。
该传感器是一个微型的 96×96 光学读卡器。libfprint 内置的匹配器在如此小的图像上表现不佳,因此该驱动程序转而复用 FocalTech 自己的匹配引擎——其签名 Windows 驱动程序中的 ftWbioEngineAdapter.dll——在 Linux 上通过一个轻量的进程内 PE 加载器原生运行。无需 Wine、无需 Windows、无需云端。
本仓库不仅是一个驱动程序,还提供了一种可复用的方法。 该技术——在 Linux 上原生运行供应商的 Windows 匹配引擎,无需 Wine——可以推广到其他“仅 Windows Hello”的读卡器,包括那些带有 SDCP 安全通道的读卡器(Synaptics/Goodix/ELAN/EgisTec 类加密传感器),通过可选的
src/crypto_shims.c模块实现。FT9201 是一个完整的示例;进程内加载器、WinBio 桥接层和加密旁路层可以迁移到下一个设备。详细的分步方法以及可直接复用的部分,请参阅 PORTING.md。
已在真实硬件上端到端工作:通过 fprintd / 命令行工具进行注册和验证,安装后也可在 KDE/GNOME 中使用。它使用供应商的真实算法匹配你的手指。
针对这款具体读卡器(ASIN B0DK7LQZGH)——2808:93a9 的 FT9348W 变体——进行开发和测试。
注意:
2808:93a9 设备的 FT9348W 变体上测试过。ft_engine.c 是一个约 450 行的加载器,它将 ftWbioEngineAdapter.dll 映射到内存中,提供其导入的约 90 个 kernel32 函数,设置一个伪造的 Windows TEB,并调用引擎的 WinBio 接口进行注册/验证。fprintd 默认的 MemoryDenyWriteExecute 强化机制下运行——你无需禁用任何安全设置。完整的技术文档请参阅 docs/how-it-works.md。
构建工具 + libfprint 的构建依赖。在 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:对应的包为 libglib2.0-dev libgusb-dev libnss3-dev libpixman-1-dev libgudev-1.0-dev libsystemd-dev,外加 cabextract。)
git clone https://github.com/OMGrant/ft9201-libfprint
cd ft9201-libfprint
scripts/fetch-blobs.sh # 拉取供应商 DLL + MCU 固件(见下方说明)
scripts/build.sh # 克隆固定版本的 libfprint,嫁接驱动程序,构建
不安装任何内容尝试运行:
FT9201_ENGINE_DLL=$PWD/blobs/ftWbioEngineAdapter.dll \
LD_LIBRARY_PATH=libfprint/build/libfprint \
libfprint/build/examples/enroll
安装用于 KDE/GNOME/登录(并行安装;你的发行版的 libfprint 保持不变,无需禁用任何强化机制):
sudo scripts/install.sh
fprintd-enroll
卸载所有内容:sudo scripts/install.sh --uninstall。
本仓库不包含任何专有二进制文件。两个文件属于 FocalTech,在构建时由 scripts/fetch-blobs.sh 从现有公共来源拉取:
| 文件 | 内容 | 来源 |
|---|---|---|
ftWbioEngineAdapter.dll |
如果下载地址发生变化,你只需要这两个文件:
ftWbioEngineAdapter.dll — 在微软更新目录中搜索 "FocalTech Electronics Biometric"(驱动程序 1.0.3.58,匹配硬件 ID USB\VID_2808&PID_93A9)。下载 .cab 文件,使用 cabextract 解压,将 ftWbioEngineAdapter.dll 放入 blobs/ 目录。FOCALFP_9348_FW_APP 符号的 FocalTech Linux libfprint 二进制文件(例如从 ft9201-static 获取),然后运行 python3 scripts/extract-firmware.py <那个-libfprint-2.so> src/ft9201_fw.h。然后重新运行 scripts/build.sh。
可复用的方法和加密传感器路径还依赖于以下工作:
这并非唯一方法——不同之处主要在于如何复用 FocalTech 的匹配器(所有方法都这么做;微小的传感器排除了通用匹配的可能性)。
9338 → 93a9)。
.deb 包,修补两个字节,无需逆向工程。但它需要支持 TOD 的 libfprint(Debian/Ubuntu 系列;不支持标准的 Fedora/Arch),它会替换你整个系统的 libfprint 为一个旧的、完全封闭的构建,而且你必须与包管理器斗争以锁定版本。本项目则提供一个开放的驱动程序,并行安装(你的发行版的 libfprint 保持不变),运行于 主线的、无 TOD 的 libfprint,并且只加载隔离的供应商匹配器 DLL——这正是所有逆向工程工作的成果。那些 .deb/RPM 包分发的专有 Linux TOD 驱动程序似乎是 FocalTech/GPD 为 GPD Win 4 发布的版本,后来从官方分发中撤下——这就是为什么现在它只以社区重新托管的形式存在。(另请注意,部分 GPD Win 4 设备配备的是完全不同的传感器——Chippsailing CS9711,而非本 FocalTech 部件。)
1c7a:0577) 的 Linux 驱动程序项目,这是另一个按压式“仅 Windows Hello”读卡器(52×72 有效传感器)。不同供应商和 USB 协议,但同样是 主机端匹配 模式:其 Windows 包携带一个供应商引擎适配器 DLL(EgisTouchFPEngine0577.dll,无 VBS 飞地),因此 PORTING.md 中的方法同样适用。驱动程序和加载器(src/、scripts/)采用 LGPL-2.1-or-later 许可证,与 libfprint 一致。FocalTech 的 DLL 和固件归其自身所有,未在此分发——你需要自行获取它们。本项目是为你拥有的硬件提供的互操作工具,不包含或重新许可任何 FocalTech 代码。
| 匹配引擎 |
| 微软更新目录中 FocalTech 的签名 Windows 驱动程序 |
FT9348W MCU 固件 (src/ft9201_fw.h) | 传感器运行的 8051 固件 | 从公共 ft9201-static 二进制文件中提取(符号 FOCALFP_9348_FW_APP) |