案例
iX500 Scan:基于逆向 ScanSnap Wi-Fi 协议的 macOS 客户端
在 macOS 上以 SwiftUI 应用和 Python 后台服务替代 ScanSnap Home,为富士通/PFU ScanSnap iX500 提供扫描:Wi-Fi 经由社区逆向的 VENS 协议,USB 经由 SANE,输出可搜索的 PDF。项目内置 bramheerink 的 GPL-2.0 驱动并为 macOS 做了扩展,还记录了更多握手字段和硬件状态字段,包括扫描键状态位。结果均为作者报告,仓库未公开测试或抓包记录。
使用条件与局限
- 审阅提交 24a5f7c(共三次提交,均为 2026-10-15)面向富士通/PFU ScanSnap iX500。README 称 ScanSnap Home 3.7 已不再维护,在 macOS 27 上会卡死;项目提供由设备扫描键触发的 Wi-Fi 扫描、经 SANE 的 USB 扫描,以及带旋转、裁边、去空白页和 OCR 的可搜索 PDF。未发布构建好的版本,也未声称支持其他 ScanSnap 型号。
- Wi-Fi 扫描需要用户自己的 iX500,以及 README 所说只有 ScanSnap Home 才知道的两个值:扫描仪的 12 位配对密钥和已配对电脑的 8 字节 HostID。这两个值需从 ScanSnap Home 与该扫描仪的连接中一次性取得;仓库不包含厂商软件、固件或抓包文件。
- 构建需要 macOS 14+、Xcode 15+(Swift tools 5.10)、带 Pillow 的系统 Python 3,以及通过 Homebrew 安装的 sane-backends、ocrmypdf、img2pdf 和 tesseract-lang。build.sh 把 Python 服务和内置驱动打包进一个临时(ad-hoc)签名的应用,应用通过 /usr/bin/python3 运行该服务。
- 协议部分扩展自 bramheerink/scansnap,其 VENS 规范称是根据 ScanSnap Home 与 iX500 通信的抓包逆向得出。README 补充了握手中已配对 HostID、本地时间与 UTC 偏移的字段,空纸盒与扫描键的硬件状态位,以及约 40 秒的会话超时,并说明 Wi-Fi 图像始终以 300 dpi 彩色、旋转 180° 且带扫描仪背景的形式传回。仓库未公开自动化测试、抓包或与 ScanSnap Home 输出的对比;本次审阅未运行应用,也未连接扫描仪。
- 采用 GPL-2.0,与内置驱动所基于的 5706688 提交一致,驱动文件头记录了作者的修改。这是非官方客户端,并非恢复的厂商源码或固件。仓库中的社交媒体草稿称,作者借助 Claude Code 用一个晚上补齐了协议中剩余的空白;未提及使用 REA。
关于此条目
- 类型
- 案例
- 类别
- 独立重建案例
- 关联
- 独立重建项目
- 目标
- 应用 · 协议
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- vens/PROTOCOL GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- vens/README.md GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- vens/scansnap.py GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- scansnapd.py GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- app/Package.swift GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- app/build.sh GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- app/Sources/IX500Scan/ScannerService.swift GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- social/texte.md GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- LICENSE GitHub · jonaswagnr/ix500-scan · 修订 24a5f7c
- LICENSE GitHub · bramheerink/scansnap · 修订 5706688