跳转至

OneTHU 0.11.3 “Revolution” 发布审计

审计更新:2026-10-23 14:19:28 UTC(北京时间 22:19:28)。0.11.3 已于 2026-10-23 13:27:05 UTC(北京时间 21:27:05)公开发布并设为 GitHub Latest。三端安装包、校验码和更新清单共五个资产已核对;清华云盘三个系统目录的最新安装包均已匿名完整下载并通过 SHA-256 校验。三平台双源更新与回退测试通过。官网 Pages 构建与部署成功,GitHub/云盘/官网公开清单均为 0.11.3,三端哈希一致;四个公开页面的 HTTP、版本与下载入口检查全部通过。

1. 发布来源

项目 本次值
版本 0.11.3,Revolution
源码提交 ffa5667fb3013d9133867407bc5a1fa1aec7949e
标签 v0.11.3,本地解引用与上述源码一致
桌面构建 GitHub Actions 39954633000
Actions 结果 completed / success;Windows、macOS 两个 job 均成功
macOS job 120417282683,ARM64,完成于 2026-10-23T12:48:03Z
Windows job 120417282498,x64,完成于 2026-10-23T12:50:49Z
Android 构建 本地 ARM64 release 构建,绑定同一源码;原正式签名
Android 包标识 app.onethu.desktop
Android 版本号 versionName=0.11.3,versionCode=11012
公开 Release v0.11.3 · Revolution,ID 421844918,正式版、Latest
发布时间 2026-10-23T13:27:05Z
构建证据目录 /Volumes/OneTHUBuild/artifacts/release-0.11.3/final/

本次读取 release-context.json、ci-result.json 和三端验包报告核对来源;构建冻结核验时已跟踪源码干净,工作区仅存在未跟踪的 output/。Android 报告中的 run=39954633000 用于绑定同一发布批次,APK 由本地构建产生。

Actions 两个 job 的 Check authentication recovery and account ownership、Check cloud account boundaries、构建 Harness、构建桌面包和上传产物步骤均显示成功。

2. 安装包哈希与签名

以下字节数与 SHA-256 在审计时直接读取 final/installers/ 三个实际文件计算,与已有 Android 构建证明一致。

平台 文件 字节数 SHA-256
macOS ARM64 OneTHU_0.11.3_aarch64.dmg 18,871,878 6eec07b5a4dd39802fcd24f54ab7088928a48a47fe117e26415d46ad1aaf042e
Windows x64 OneTHU_0.11.3_x64-setup.exe 17,289,178 60d028eaf01f0606f60a4e5b1870332ede8d97045463dee3e7d5dc94868b6978
Android ARM64 OneTHU_0.11.3_arm64.apk 31,859,573 5ed2a5026a785747036e751f1f314ce055a5617a427f4afd47b2286658f0cc5a

macOS

macos-check.json 确认应用与 Harness 均为 ARM64 Mach-O、应用标识为 app.onethu.desktop,应用版本和 bundle version 均为 0.11.3。内嵌中英文演示资源,排除开发面板。

报告中的 adHocSignatureVerified=true,本次额外读取 codesign -dv --verbose=2 显示 Signature=adhoc、flags=0x10002(adhoc,runtime)、TeamIdentifier=not set。签名结论为 ad-hoc 签名完整性通过;现有证据未建立 Apple Developer ID 签名或公证证明。

Actions 产物 ZIP:artifact ID 12502686377,18,852,082 字节,SHA-256 2617ee560b5cff6d033bc6194ae6fcbed11bd4b57701223cf468e54d58af0ef8,ZIP 完整性验证通过。此哈希属于 Actions ZIP,与发布 DMG 分别记录。

Windows

原始 onethu.exe 为 x64 PE(machine 0x8664),文件版本 0.11.3.0,32,193,536 字节,SHA-256 7ab475863667a1eb22c7aacb0429ee676a9bf7f86e027f15c7075e07b9323c69。NSIS 安装器本身为 x86 PE stub(machine 0x14c),安装内容为 x64 应用。Harness 为 x64;排除开发面板。windows-bundle-check.json 确认解包应用与 Actions 原始应用仅有预期 NSIS 标记差异。

本次直接读取安装器及原始应用的 PE Security Directory,两者均为 [0, 0],未带嵌入式 Authenticode 签名。完整性依据为源码与 Actions 绑定、原始产物摘要、解包对照和发布 SHA-256。

Actions 产物 ZIP:artifact ID 12502187881,35,078,530 字节,SHA-256 6d5bd0cc2b8b8b4f422d8e6227046c19d89b947c9428153da86f7e8d686059aa,ZIP 完整性验证通过。

Windows 最终机器码门禁已通过。 windows-native-code-check.json 于 2026-10-23T12:55:21.677312+00:00 生成,绑定本次源码、Actions run 和安装器。受检应用为安装器内的 windows-extracted/onethu.exe,32,193,536 字节,SHA-256 9e401b4480f2f2a29b7feee8f3bce03689e43249f55c7f8d4e29f4ef1a5e8062;它与上文原始 Actions exe 的摘要差异对应已核对的 NSIS 标记差异。

本次依据 x64 PE 导入解析与人工审阅的指令检查点,确认既有互斥锁进入第二实例分支、窗口最多探测 40 次、间隔 25 ms、激活调用 SendMessageTimeoutW 的 10,000 ms 上限、WM_COPYDATA/SMTO_NORMAL 参数及探测耗尽、激活结束后的退出路径。认证 epoch 命令和旧会话拒绝标记同时存在。夹具 15 项通过、0 失败:原样接受 1 项,定点改动拒绝 14 项。

门禁报告 SHA-256 为 5acaedd0715a0abf1254427ea14acf13a1fb9687c9c7c6fcfe984a36cba6e72d;审阅反汇编 verification/windows-single-instance-disassembly.txt 的 SHA-256 为 e7cd7f57e0d000a3ea473adabdc605e37bd6cb772a018cafc768302ed33004b1。报告注明 windowsGuiTested=false。优化后的 release 机器码包含超时调用及边界,未保留结果日志分支;仅凭已去符号二进制尚无法确定该日志分支消失的具体优化原因。

Android

android/build-info.json、badging.txt 和 signature.txt 确认正式包名、0.11.3 / 11012、arm64-v8a、非 debuggable。构建验证流程执行 zipalign -c -p 4。APK 签名验证成功,v2、v3 均为 true,单一签名者,RSA 2048 位。

正式签名证书 SHA-256:

cc14d735667bb8b5d3134e7dfdccf6a4d9353e1a2fce54503f4a29705423aa97

证书主体:CN=OneTHU, OU=OneTHU, O=smartThise, L=Beijing, ST=Beijing, C=CN。证书与项目既有正式证书一致;包名和递增 versionCode 满足覆盖升级的静态条件,设备上的实际覆盖安装尚待验证。

android/logo-check.json 确认 15 张编译后 PNG 与标准 Logo 像素一致,launcher、round、adaptive 绑定正确。android/frontend-check.json 确认当前前端已内嵌、开发面板已排除、壁纸及 epoch 原生命令已嵌入:

  • JS:index-SXiDagj_.js,SHA-256 29e9521c5004cc3e55709782c7ac783cb977514e2dd74a0b4884d6d242415452。
  • CSS:index-D7k5zxBj.css,SHA-256 c91173cf249078523177c9e75070317223bd8e86ee053bc358d96be951313ad8。
  • 原生库:lib/arm64-v8a/libonethu_lib.so,26,102,160 字节,SHA-256 ec063e2fd596f1e2c976721bd6bc3af623525f729ac8ae122c1dead6235daec9。

android/epoch-command-check.json 将源码、APK 和原生库哈希绑定,静态确认 http_native_epoch 命令分发与 Acquire 64 位原子读取。机器码夹具 83 项通过、0 失败,其中 1 项原样接受、82 项指令改动拒绝;夹具绕过外层整文件哈希以验证指令级检查。该报告注明 androidDeviceExecuted=false。

3. 测试与编译证据

各套测试按原始报告分别列出;Rust 安全测试包含在 Rust 库测试中,界面测试与逻辑测试的断言也可能覆盖同一功能,因此不合并成单一总数。

验证项 实际结果 证据或范围
登录恢复浏览器测试 137 项通过 /tmp/onethu-auth-final-0113/browser-report.json,手机/桌面视口,学校请求为隔离夹具
登录页更新浏览器测试 69 项通过 /tmp/onethu-login-update/report.json,学校接口 503、中英文、三模式、2FA 输入保留、取消与晚返回
已登录更新浏览器测试 133 项通过 /tmp/onethu-update-reminder-0113/report.json,中英文、三模式、手机/桌面、窄屏、延后、返回键及导览遮挡
认证主链真实函数回归 35 项通过 tools/login-public-key-test.mjs
CAS 补充回归 7 项通过 tools/cas-recovery-trust-test.mjs
账号恢复/登录尝试状态 67 项通过 tools/login-attempt-state-test.mjs
Cookie 账号边界 15 项通过 tools/auth-cookie-boundary-test.mjs,含延迟 GitLab 种子写入与 native 清理失败
应用会话守卫 4 组通过 tools/session-probe-policy-test.mjs,每组包含多个错误/状态场景
原生桥账号代次 8 项通过 tools/native-session-epoch-test.mjs,IPC 夹具,含延迟正文和 clone
云盘账户生命周期 25 项通过 tools/seafile-account-lifecycle-test.mjs,含退出后旧 profile、重试和 WebView 返回
Rust 库测试 79 项通过、12 项忽略 本轮认证审查记录;忽略项按既有配置,未计为通过
Rust 安全测试子集 14 项通过 /tmp/onethu-native-epoch-build.log,真实本地 HTTP 服务模拟旧响应;属于上行 Rust 测试子集
Android 系统桥 Kotlin 编译通过 /tmp/onethu-epoch-kotlin-final.log,BUILD SUCCESSFUL
TypeScript 核心库、认证库、桌面检查通过 本轮最终审查记录
i18n 中英文各 7,591 键完整 本轮最终审查记录;Android 62 个回退模板一致
发布脚本离线合成夹具 72 项通过、0 失败 final/verification/release-gate-fixture-report.json;验证脚本拒绝旧来源、篡改文件、缺失资产等逻辑
Windows 单实例机器码夹具 15 项通过、0 失败 final/windows-native-code-check.json,1 项原样接受、14 项定点改动拒绝
Android 命令机器码夹具 83 项通过、0 失败 final/android/epoch-command-check.json,静态证据
真实双源更新与故障回退 3 平台全部通过 node --use-env-proxy tools/update-sources-live-test.mjs 的本次执行回执,真实 GitHub/云盘清单及人为 GitHub 失败回退
云盘按系统目录检验最新安装包 3 个文件完整下载通过 官网 assets/downloads.json,三个 anonymousDownloadVerified=true,摘要与发布包一致
官网本地下载页浏览器验收 8 个组合通过 final/verification/download-page/report.json,中英 × 1440/768/390/320 px,均含无 JavaScript 可用性检查
官网部署后公开清单 3 渠道通过 final/verification/public-manifests.json,GitHub/云盘/官网版本与三端哈希一致

本次审计直接复核三个应用浏览器 JSON 的 passed=true 与 checks 数组长度,分别为 137、69、133。其他源码回归计数来自本轮已保存审查记录与完成回执。发布脚本的 72 项使用离线合成产物和临时 Git 仓库,其结果用于证明门禁逻辑;当前真实三端产物另由 final-bindings-check.json 完成来源、摘要、内嵌内容和机器码证明绑定。

4. 认证修复结论

已确认的客户端问题与处理

  1. 启动探测过去将学习服务错误、网关壳和超时合并为“未登录”,随后可能调用已保存密码。现在区分已验证、明确失登和服务不可用。只有可靠账号快照允许显示该账号的本地视图;该视图不会把底层会话提升为已验证。
  2. 正常 HTTP 401、明确登录表单或明确失登响应保留恢复路径。网关壳、限流、服务故障、缺失 CSRF 和未知 JSON 结构保留原始失败,不据此自动重新提交密码。手动登录、2FA 和已有服务会话建立流程继续使用现有机制。
  3. 安装指纹采用共享读取与生成过程,并通过本地与原生镜像恢复;同一已知账号可复用 Cookie。换账号、未知归属及退出执行清理隔离。
  4. 恢复时先核对两份持久化账号快照,再水合和访问学校。账号归属冲突或存储读取失败采取保守处理;记住的凭据仅能注入同账号会话。退出清理失败会保留错误,并移除当前账号视图。
  5. 原生 Cookie 仓在完整清理时推进账号代次并立即保存空仓。reqwest Cookie provider 在锁内验证请求代次,旧请求无法写回当前 Cookie;前端正文、clone 和派生种票继续校验代次。
  6. 云盘 WebView、静默 profile 和 Token 提交流程绑定操作起点。Token setter 同步核对凭据版本,涵盖“已经退出,但旧取票请求此时才开始提交”的窗口。GitLab 种子写入与最终删除串行执行,清理完成后再次清空 TS Cookie 镜像。
  7. 主认证、直接 CAS、选课恢复路径停止自动添加 singleLogin/deviceName,同时过滤隐藏字段带回的同名参数。既有指纹和信任票继续使用;验证码阶段由用户明确选择的保存信任设备流程保留。

故障原因与证据边界

用户报告曾同时出现 AUTH-FAIL reason=unexpected-page stage=credential-entry 和 webvpn-guide len=2760,随后又恢复登录。这两项诊断来自认证入口和学习探测各自的响应,现有材料不足以证明二者为同一份 HTML。

本轮进行一次使用全新 CookieJar 和应用 User-Agent 的匿名公开 GET,经过 WebVPN、OAuth 后获得正常统一认证表单:HTTP 200,17,524 字符,含公钥字段。此请求没有提交账号或密码,只证明检查时入口正常。故障时原始响应尚未取得;学校网关短时异常与现象一致,仍属于推断。

公开表单的 singleLogin 表示“本次登录使用信任浏览器访问校内其他系统时不必再输入账号密码(统一登录)”,默认未勾选。已确认客户端过去自动携带该选项;尚未以真实账号验证学校是否每次新增持久信任因子、何时去重及具体去重条件。因此本次可确认减少自动授权请求与身份抖动,不能宣称已经证明并完全消除学校端所有重复信任记录。

5. 登录页更新能力

更新提醒宿主提升到应用路由层,登录与二次验证界面可主动查看公告、检查更新并进入独立下载界面。三种模式、中英文共用提醒策略,可延后 1 小时、1 天、7 天。自动提醒等待登录请求、验证码输入、导览和其他对话框完成;主动查看更新保留现有输入。

下载沿用双源、SHA-256 校验与安装器确认流程。应用交互已通过隔离浏览器测试;公开 0.11.3 清单、云盘安装包完整下载及源故障回退的在线结果记录于下一节。官网页面完成本地浏览器验收,部署后的公开清单通过一致性检查;四个公开页面的逐页 HTTP 检查记录待补。

6. 发布门禁与渠道状态

已完成的发布准备证据:

  • 脚本封存:verification/release-script-freeze.json 绑定本次源码和 run,登记 19 个脚本文件的 SHA-256,并记录离线合成夹具 72 通过、0 失败。本次逐一重新计算这 19 个文件的哈希,均与封存记录相符。
  • 真实三端统一门禁:final-bindings-check.json 绑定桌面安装器与同一 Actions ZIP、认证恢复与窗口归属 CI 步骤、Windows 单实例机器码、Android 当前前端及签名 APK、Android 原生 epoch 命令。报告中的五个汇总检查均为 true,三端文件大小和摘要与第 2 节一致。windowsGuiTested=false、androidDeviceInstalled=false 保留在报告中。
  • 发布清单准备:asset-manifest.json、SHA256SUMS.txt、两源 latest.json 已生成并与本批次三端摘要一致。GitHub 版 latest.json 与 github-latest.json 字节相同;云盘版指向各系统目录。清单 releasedAt 值为准备阶段 2026-10-23T12:57:26Z 附近的时间;实际公开发布时间以 GitHub published_at=2026-10-23T13:27:05Z 为准。
  • GitHub 公开资产:草稿阶段的 verification/github-draft-check.json 已完成五资产校验,随后同一 Release 421844918 公开。release-state.json 记录 draft=false、prerelease=false 和 published_at=2026-10-23T13:27:05Z;github-upload-check.json 记录 latest=true。三个安装包、SHA256SUMS.txt、latest.json 共五项均以 GitHub 返回的名称、字节数及 SHA-256 digest 对照本地准备文件,全部 matched=true。
  • 清华云盘完整下载:官网仓库 assets/downloads.json 记录 verifiedAt=2026-10-23T14:09:11.289675+00:00。check-release-mirrors.py 从既有发布库的 /macOS/、/Windows/、/Android/ 各自目录选择最新版本,三端均为 0.11.3,匿名下载完整文件后核对字节数和 SHA-256。三个 anonymousDownloadVerified=true,结果与第 2 节发布包一致。该证明覆盖各系统目录与实际下载内容。
  • 三平台真实更新链路:发布负责人执行 node --use-env-proxy tools/update-sources-live-test.mjs,macOS、Windows、Android 均通过真实 GitHub/云盘清单读取、版本与哈希一致性检查,并在故意令 GitHub 源失败时成功回退云盘。该结果来自本次终端执行回执,未单独保存测试日志。测试调用生产更新解析函数、模拟平台选择;联网读取真实公开清单,全程没有调用安装器 IPC。
  • 官网本地下载页验收:verification/download-page/report.json 的 8 项均为 passed=true,覆盖中文/英文与 1440、768、390、320 px 四种视口,且八项 noJavaScript=true。此报告属于部署前本地页面验收。部署后的三渠道公开清单另已通过检查,四个公开页面的逐页 HTTP 记录待补。
证据文件 SHA-256
verification/release-script-freeze.json dea5ac210a0ed9350f8a0989eeb42ab02b94c8d84c168a10026c80c122f33915
final-bindings-check.json e10ca61f63aa4b21f7357876f7d59aae999b7a506be8dd05146e20e98213b061
asset-manifest.json 028de5aef67181dbb6f35f3a28e82fc69caa6a99ecc859b4c347fa435a3e27e3
installers/SHA256SUMS.txt 018eb268feaf7ed740adad16443f79bc7b5546911e854d67b52c1edddf6d78df
update-manifests/github-latest.json / latest.json 3672b1350c066d980bc0a1c11abed18a0eefab7ccbee961df5b758de76b61128
update-manifests/cloud-latest.json 34a03bc8f208f88cf3559230fb7f77ddd01d506731766f279162f88a5f7bfb26
verification/github-draft-check.json 7b0d51b40351b06eaefcc89a60e2d71783e123c9caad90716f98ad2a4f067f60
release-state.json 9969dd899fb4096d96bbd41029313769f185a8621755342e8167df4b901a9dff
github-upload-check.json 1ad22dd7c91333b54f467f3762a1fb7f7178dc21934979ffe37bbb52f0a2ac9b
官网 assets/downloads.json a83ce176c78b534b2df9f6c1a12784cae39be8f75602c9f9982cac6c82f3702c
verification/download-page/report.json d0655a3ab27d7bb45271bca1c20dfbf13bdb3430ab45289f4810e33300d85412
verification/public-manifests.json 191b1c0a96d2f89b9ba207570da5c8648e0b38eb01e5b8b90869b8ba3bf46fca

官网仓库提交 6ab17925e803b98d6fa947fd1feb312d846c47f3 的 GitHub Pages run 39968285976 已完成,build、deploy 均为 success。部署后运行 verify-public-manifests.py 成功,verification/public-manifests.json 中 GitHub、清华云盘、官网三项均为 version=0.11.3、allHashesMatch=true。GitHub/云盘清单的源码字段均为本次应用提交;官网快照按其既有结构未提供源码字段,网站部署来源以上述官网仓库提交记录。

公开页面逐页检查通过(HTTP 200、版本 0.11.3):

两份下载页均提供三个对应系统的清华云盘直接下载链接,文件名与本批次版本一致,页面中展示登录页更新说明。记录:verification/website-live-check.json。官网部署完成时间为 2026-10-23T14:18:37Z(北京时间 22:18:37)。

7. 尚待真实环境验收

  • macOS 报告标记 deviceLaunchTested=false;本批次安装产物的实际启动与账号登录尚未以该报告验收。
  • Windows Actions 成功和静态机器码检查分别证明编译/产物和指定程序逻辑;本批次真实 Windows 设备上的完整登录、刷新、退出、换账号和窗口交互仍待验收。
  • Android 报告标记 deviceInstalled=false、androidDeviceExecuted=false。本批次 APK 尚未据这些证据完成真机覆盖安装、启动、系统 WebView、登录及返回操作验收。
  • 真实学校账号的完整 2FA 流程、跨设备行为和真实双账号换号隔离尚未完成联调。已有测试使用隔离夹具、模拟存储/IPC及本地 HTTP 服务,不含生产账号密码、验证码或 Cookie。
  • 信任因子上限、学校重复记录的去重规则,以及突发校园网关故障的真实重现仍待实际证据。此次匿名 GET 和客户端修复均无法代替上述验证。

8. 证据索引

源码说明:docs/reviews/2026-10-23-auth-gateway-trust.md、.github/RELEASE_NOTES_v0.11.3.md。

本批次构建与验包证据根:/Volumes/OneTHUBuild/artifacts/release-0.11.3/final/。

  • release-context.json、ci-result.json。
  • macos-artifact-check.json、macos-check.json。
  • windows-artifact-check.json、windows-check.json、windows-bundle-check.json。
  • android/build-info.json、android/signature.txt、android/badging.txt、android/logo-check.json、android/frontend-check.json、android/epoch-command-check.json。
  • verification/release-gate-fixture-report.json、verification/release-script-freeze.json。
  • windows-native-code-check.json、verification/windows-single-instance-disassembly.txt。
  • final-bindings-check.json、asset-manifest.json、installers/SHA256SUMS.txt、update-manifests/ 两源清单。
  • verification/github-draft-check.json、release-state.json、github-upload-check.json。
  • verification/download-page/report.json、verification/public-manifests.json。
  • 官网仓库镜像证明:/Volumes/PortableSSD/Projects/thuapp/onethu.github.io/assets/downloads.json。
  • 三平台更新链路:node --use-env-proxy tools/update-sources-live-test.mjs 本次成功执行回执,未另存日志。