You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(rfcs): drop private-playbook and dated validation notes
RFCs document the technical design; per-maintainer sandbox state (specific
browser versions last verified, private playbook references, timestamped
"tested against Chrome 147" status markers, cookie-count baselines tied to
a single contributor's host) doesn't belong in them.
- RFC-010 §1.1: replace "Tested matrix (as of …)" with a compatibility-
contract table; drop the "Last verified" column and the reference to
the author's private regression playbook.
- RFC-010 §10: drop "tested against Chrome 147 family" timestamp, "✅
verified" / "not yet sandbox-tested" status markers; keep the technical
behavior columns.
- RFC-010 §11-12: drop "private maintainer notes" pointer and the "not
observed on Chrome 147 sandbox outputs" / "no observed conflict" lines;
restate the unknowns as open questions.
- RFC-012 §6: drop "as of 2026-04" timestamp on the Yandex-ABE note.
- RFC-012 §7: replace the CLAUDE.local.md / 574-cookie validation recipe
with a one-line general statement about the full-sweep regression gate.
-[RFC-009](009-windows-locked-file-bypass.md) — other Windows-specific handling
19
19
20
-
### 1.1 Tested matrix (as of 2026-04-19)
20
+
### 1.1 Compatibility contract
21
21
22
-
Single source of truth for version pins and observed-working targets. When re-validating, update dates and re-run the regression flow documented in the author's private playbook (not in this RFC).
23
-
24
-
| Component | Contract | Last verified |
25
-
|---|---|---|
26
-
| Go toolchain |**1.20** (pinned; Go 1.21+ drops Win7) | 1.20.14 |
27
-
| Windows host | Any Win10 1909+ (PE loader + UCRT) | Windows 10 19044 |
28
-
| Chrome family | Any v127+ (ABE introduced) | Chrome 147.0.7727.57 |
@@ -280,20 +278,18 @@ Tempting — it's known-good. But: C++ in an otherwise pure-C/Go repo; ASM tramp
280
278
281
279
## 10. Browser coverage
282
280
283
-
As of 2026-04-19, tested against Chrome 147 family.
284
-
285
-
| Browser class | Behavior | Status |
286
-
|---|---|---|
287
-
| Chrome Stable/Beta, Brave, CocCoc | ABE v20 via `CHROME_BASE` slot (5) | ✅ verified (cookies + passwords, zero non-ASCII in output) |
288
-
| Microsoft Edge | ABE v20 via `EDGE` slot (8); v2 `E_NOINTERFACE` → v1 fallback succeeds | ✅ verified |
289
-
| Avast Secure Browser | ABE v20 via `AVAST` slot (13) | ⚠️ table entry shipped; not yet sandbox-tested |
290
-
| Opera / OperaGX / Vivaldi / Yandex / Arc / 360 / QQ / Sogou | Not in `com_iid.c`| ⚠️ legacy v10 cookies still decrypt via DPAPI; v20 cookies do not |
Three steps. Detail (dump scripts, CLSID discovery) lives in private maintainer notes.
292
+
Three steps.
297
293
298
294
1.**Discover CLSID** — find the fork's elevation Windows service, look up its AppID in `HKLM\SOFTWARE\Classes\AppID`, then the CLSID that binds to it in `HKLM\SOFTWARE\Classes\CLSID`.
299
295
2.**Mine IIDs from TypeLib** — the interface IIDs live in the TypeLib resource of `<InstallDir>\Application\<version>\elevation_service.exe`. PowerShell + `ITypeLib.GetTypeInfo` enumerates them. Map `IElevator<Vendor>` → v1 IID, `IElevator2<Vendor>` → v2 IID (absent for older vendors).
@@ -307,8 +303,8 @@ Edit `crypto/windows/abe_native/com_iid.c` (add the entry), `utils/winutil/brows
307
303
308
304
- Non-`com_iid.c` browsers (Opera, Vivaldi, Yandex, Arc, 360, QQ, Sogou) fall back to DPAPI; v20 cookies remain encrypted. Fix = §11 procedure per vendor.
309
305
- ARM64 Windows unsupported. Payload is `x86_64-windows-gnu` only. xaitax ships ARM64; we'd need parallel payload builds + runtime arch dispatch.
310
-
- Chrome v20 domain-binding prefix: injector-old strips 32 bytes at the start of v20 plaintext. Not observed on Chrome 147 sandbox outputs; left unimplemented. Re-add if a future test surfaces the prefix.
311
-
- Running-browser handling: if the user has the target browser open we spawn a second instance. No observed conflict, but some vendors (Opera GX) serialize elevation service; an opt-in `--kill-running` is future work.
306
+
- Chrome v20 domain-binding prefix: injector-old strips 32 bytes at the start of v20 plaintext. Left unimplemented pending evidence that current Chrome versions emit this prefix; re-add if encountered.
307
+
- Running-browser handling: if the user has the target browser open we spawn a second instance. Some vendors (Opera GX) serialize the elevation service, which could surface conflicts; an opt-in `--kill-running` is future work.
- Windows ABE v20 for Yandex; as of 2026-04 Yandex has not adopted App-Bound Encryption.
28
+
- Windows ABE v20 for Yandex — not in scope until Yandex adopts App-Bound Encryption.
29
29
- Linux support; Yandex Browser has no official Linux build.
30
30
31
31
## 2. Protocol differences at a glance
@@ -165,7 +165,7 @@ All decryption math is covered by pure-Go tests that synthesize Yandex DB files
165
165
|`browser/chromium/extract_creditcard_test.go`| Merged file — Chromium tests for `credit_cards` plus Yandex tests: round-trip on 2-card fixture verifying Number/CVC/Comment/NickName/ExpMonth/ExpYear mapping; count on 3-row `records` table; wrong master key surfaces as error. `TestYandexCardAAD` covers guid bytes / guid+keyID. |
166
166
|`browser/chromium/chromium_test.go`|`TestExtractorsForKind` asserts `yandexExtractors` carries both `Password` and `CreditCard` entries. |
167
167
168
-
Windows-host validation (out-of-tree, per `CLAUDE.local.md`): `make build-windows` → deploy to sandbox → `hbd.exe -v -b yandex` → verify non-empty `password.json` / `creditcard.json` and no regression on full-sweep baseline. Most recent run: 703 cookies across 13 browsers, 0 non-ASCII — "no regression" measured as `0 non-ASCII` rather than exact cookie count, since the sandbox naturally accumulates new cookies over time.
168
+
End-to-end validation on a Windows host with a real Yandex profile is expected before shipping changes that touch the decryption path; the Chromium full-sweep suite doubles as a regression gate to catch unintended impact on other Chromium forks.
0 commit comments