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-25629e9521c5004cc3e55709782c7ac783cb977514e2dd74a0b4884d6d242415452。 - CSS:
index-D7k5zxBj.css,SHA-256c91173cf249078523177c9e75070317223bd8e86ee053bc358d96be951313ad8。 - 原生库:
lib/arm64-v8a/libonethu_lib.so,26,102,160 字节,SHA-256ec063e2fd596f1e2c976721bd6bc3af623525f729ac8ae122c1dead6235daec9。
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. 认证修复结论¶
已确认的客户端问题与处理¶
- 启动探测过去将学习服务错误、网关壳和超时合并为“未登录”,随后可能调用已保存密码。现在区分已验证、明确失登和服务不可用。只有可靠账号快照允许显示该账号的本地视图;该视图不会把底层会话提升为已验证。
- 正常 HTTP 401、明确登录表单或明确失登响应保留恢复路径。网关壳、限流、服务故障、缺失 CSRF 和未知 JSON 结构保留原始失败,不据此自动重新提交密码。手动登录、2FA 和已有服务会话建立流程继续使用现有机制。
- 安装指纹采用共享读取与生成过程,并通过本地与原生镜像恢复;同一已知账号可复用 Cookie。换账号、未知归属及退出执行清理隔离。
- 恢复时先核对两份持久化账号快照,再水合和访问学校。账号归属冲突或存储读取失败采取保守处理;记住的凭据仅能注入同账号会话。退出清理失败会保留错误,并移除当前账号视图。
- 原生 Cookie 仓在完整清理时推进账号代次并立即保存空仓。reqwest Cookie provider 在锁内验证请求代次,旧请求无法写回当前 Cookie;前端正文、clone 和派生种票继续校验代次。
- 云盘 WebView、静默 profile 和 Token 提交流程绑定操作起点。Token setter 同步核对凭据版本,涵盖“已经退出,但旧取票请求此时才开始提交”的窗口。GitLab 种子写入与最终删除串行执行,清理完成后再次清空 TS Cookie 镜像。
- 主认证、直接 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附近的时间;实际公开发布时间以 GitHubpublished_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本次成功执行回执,未另存日志。