From 343f44be621dea1ee4dbcd105f1407e83bd049e2 Mon Sep 17 00:00:00 2001 From: Daniel Lavrushin Date: Sat, 9 May 2026 15:17:45 +0200 Subject: [PATCH] fix: correct long header bitmasking in QUIC initial packet validation --- changelog.md | 2 +- src/quic/initial.go | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/changelog.md b/changelog.md index 3c5248d4..a0fa4286 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,6 @@ # B4 - Bye Bye Big Bro -## [1.61.0] - 2026-05-xx +## [1.61.0] - 2026-05-09 - ADDED: **Custom payload for UDP fake packets** - new "Fake Packet Payload" picker in the UDP fake settings of each set. Choose a captured `.bin` (uploaded in Settings → Payloads, or auto-captured from live QUIC traffic) to use as the body of fake UDP packets. Empty = zero fill (previous behavior). The Settings → Payloads upload form now has an explicit TLS/QUIC protocol selector. - ADDED: **Auto-generated QUIC Initial payload** - new "(auto: QUIC Initial)" option in the UDP Fake Packet Payload picker. b4 generates a fresh randomized QUIC Initial packet for every fake, with random connection IDs each time, so no upload is needed and the bytes can't be fingerprinted by repetition. Recommended packet size for this mode is 1200 bytes. Works with any Faking Strategy (None / TTL / Checksum). diff --git a/src/quic/initial.go b/src/quic/initial.go index fc66fc17..4296e938 100644 --- a/src/quic/initial.go +++ b/src/quic/initial.go @@ -24,7 +24,8 @@ const ( ) const ( - longHdrBit = 0x80 + longHdrBit = 0x80 + longHdrMask = 0xC0 ) func IsInitial(b []byte) bool { @@ -48,7 +49,7 @@ func IsInitial(b []byte) bool { } func LooksLikeQUIC(b []byte) bool { - if len(b) < 7 || b[0]&longHdrBit == 0 { + if len(b) < 7 || b[0]&longHdrMask != longHdrMask { return false } off := 1 + 4