Skip to content

fix(chromeauth): 修復 Chrome Web Data 鎖定無法讀取及非 DBSC 帳號匯入 - #68

Merged
Mag1cFall merged 2 commits into
Mag1cFall:mainfrom
Vaxaxas:fix-chrome-token-import
Oct 20, 2026
Merged

Mag1cFall merged 2 commits into
Mag1cFall:mainfrom
Vaxaxas:fix-chrome-token-import

Conversation

@Vaxaxas

@Vaxaxas Vaxaxas commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

概述

本 PR 解決 Windows 下 Chrome 帳號無法讀取、偵測不到,以及缺乏 DBSC 硬體綁定金鑰之帳號無法匯入的問題:

1. 解決 Chrome 執行時 database is locked (SQLITE_BUSY)

  • 當 Chrome 正在執行時,以唯讀模式直接連線開啟本機 Chrome 的 Web Data 會因檔案排他鎖拋出 SQLITE_BUSY: database is locked,或因 immutable=1 遺漏尚未刷盤的 WAL 日誌,導致管理端在掃描帳號時全部失敗或無法偵測到。
  • 在 internal/chromeauth/platform_windows.go 中新增 openWebData,透過將 Web Data 主檔及其 -wal、-shm 快照拷貝至暫存目錄後再開啟連線,讀取完畢後安全銷毀暫存目錄,100% 避開 Chrome 處理程序鎖定並確保即時取得最新記錄。

2. 支援無 DBSC 設備綁定(非硬體金鑰綁定)帳號匯入

  • 在同一 Chrome Profile 登入多帳號或舊版登入情境下,token_service 資料表中的 binding_key 欄位為空(NULL 或 0 長度),但其 encrypted_token 具備完整的 v20 AES 加密權杖。
  • 放寬 discoverPlatform 與 readTokenService 對 len(bindingKey) != 0 的硬性限制,允許具備有效 v20 權杖的帳號標記為 Importable: true。
  • 在 internal/chromeauth/protocol.go 中,於 len(wrappedKey) == 0 時提供空 assertion 之 requestMultilogin 降級呼叫流程,直接驗證並取得 SAPISID 與 __Secure-1PSID,同時在 encodeMultiOAuthHeader 與 ChromeOAuthMaterial 中允許省略 assertion 與 binding key。

🤖 Generated with Claude Code

- 實作 openWebData 拷貝 Web Data 及其 WAL 日誌快照至臨時目錄讀取,解決 Chrome 運行時 SQLITE_BUSY (database is locked) 導致帳號未被偵測到的問題
- 放寬 Importable 與 readTokenService 對 bindingKey 的強制非空要求,允許無 DBSC 設備綁定之 v20 token 正常識別為可匯入
- 在 fetchGoogleCookies 中新增無 wrappedKey 時直接調用 requestMultilogin 的降級流程,並支援非 DBSC 標頭編碼與存儲

Co-Authored-By: Claude Code <noreply@anthropic.com>
@Mag1cFall

Copy link
Copy Markdown
Owner

测试发现排他锁不影响现行读取,其余的都是确实的问题,晚一些会合入
另一边repo的pr稍晚会处理,感谢你的PR

@Mag1cFall
Mag1cFall force-pushed the fix-chrome-token-import branch from abc1b48 to 3a5f4ca Compare October 20, 2026 05:15
- Web Data 与其 WAL 日志按 Profile 复制一次到临时目录后以文件 URI 只读打开,路径中的 # 与 % 按 URI 转义,读取后删除副本,复制失败时报错
- 没有设备绑定密钥的账号以 MultiBearer 头请求 OAuthMultilogin 取得明文 Cookie,绑定与无绑定路径拆为两个函数并共用 Cookie 核对
- 协议文档、README 与注释写明无绑定密钥账号的导入与续签方式
@Mag1cFall
Mag1cFall force-pushed the fix-chrome-token-import branch from 3a5f4ca to 61a1594 Compare October 20, 2026 05:32
@Mag1cFall
Mag1cFall merged commit 5b4b91b into Mag1cFall:main Oct 20, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants