From 152747382f8086010a192dac7e8a4b2a19d261a7 Mon Sep 17 00:00:00 2001 From: Gaukas Wang Date: Wed, 12 Oct 2022 12:00:24 -0600 Subject: [PATCH] Fix Google Parrots - Move `HelloChrome_102` to the end of `HelloChrome_` fingerprints for consistency. - Fixed #123 by adjusting mismatching SupportedVersionsExtension value in `HelloChrome_100`. --- u_parrots.go | 145 +++++++++++++++++++++++++-------------------------- 1 file changed, 72 insertions(+), 73 deletions(-) diff --git a/u_parrots.go b/u_parrots.go index aa64d150..31106356 100644 --- a/u_parrots.go +++ b/u_parrots.go @@ -500,10 +500,9 @@ func utlsIdToSpec(id ClientHelloID) (ClientHelloSpec, error) { PskModeDHE, }}, &SupportedVersionsExtension{[]uint16{ + GREASE_PLACEHOLDER, VersionTLS13, VersionTLS12, - VersionTLS11, - VersionTLS10, }}, &UtlsCompressCertExtension{[]CertCompressionAlgo{ CertCompressionBrotli, @@ -513,6 +512,77 @@ func utlsIdToSpec(id ClientHelloID) (ClientHelloSpec, error) { &UtlsPaddingExtension{GetPaddingLen: BoringPaddingStyle}, }, }, nil + case HelloChrome_102: + return ClientHelloSpec{ + CipherSuites: []uint16{ + GREASE_PLACEHOLDER, + TLS_AES_128_GCM_SHA256, + TLS_AES_256_GCM_SHA384, + TLS_CHACHA20_POLY1305_SHA256, + TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, + TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, + TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + TLS_RSA_WITH_AES_128_GCM_SHA256, + TLS_RSA_WITH_AES_256_GCM_SHA384, + TLS_RSA_WITH_AES_128_CBC_SHA, + TLS_RSA_WITH_AES_256_CBC_SHA, + }, + CompressionMethods: []byte{ + 0x00, // compressionNone + }, + Extensions: []TLSExtension{ + &UtlsGREASEExtension{}, + &SNIExtension{}, + &UtlsExtendedMasterSecretExtension{}, + &RenegotiationInfoExtension{Renegotiation: RenegotiateOnceAsClient}, + &SupportedCurvesExtension{[]CurveID{ + GREASE_PLACEHOLDER, + X25519, + CurveP256, + CurveP384, + }}, + &SupportedPointsExtension{SupportedPoints: []byte{ + 0x00, // pointFormatUncompressed + }}, + &SessionTicketExtension{}, + &ALPNExtension{AlpnProtocols: []string{"h2", "http/1.1"}}, + &StatusRequestExtension{}, + &SignatureAlgorithmsExtension{SupportedSignatureAlgorithms: []SignatureScheme{ + ECDSAWithP256AndSHA256, + PSSWithSHA256, + PKCS1WithSHA256, + ECDSAWithP384AndSHA384, + PSSWithSHA384, + PKCS1WithSHA384, + PSSWithSHA512, + PKCS1WithSHA512, + }}, + &SCTExtension{}, + &KeyShareExtension{[]KeyShare{ + {Group: CurveID(GREASE_PLACEHOLDER), Data: []byte{0}}, + {Group: X25519}, + }}, + &PSKKeyExchangeModesExtension{[]uint8{ + PskModeDHE, + }}, + &SupportedVersionsExtension{[]uint16{ + GREASE_PLACEHOLDER, + VersionTLS13, + VersionTLS12, + }}, + &UtlsCompressCertExtension{[]CertCompressionAlgo{ + CertCompressionBrotli, + }}, + &ApplicationSettingsExtension{SupportedProtocols: []string{"h2"}}, + &UtlsGREASEExtension{}, + &UtlsPaddingExtension{GetPaddingLen: BoringPaddingStyle}, + }, + }, nil case HelloFirefox_55, HelloFirefox_56: return ClientHelloSpec{ TLSVersMax: VersionTLS12, @@ -632,77 +702,6 @@ func utlsIdToSpec(id ClientHelloID) (ClientHelloSpec, error) { &FakeRecordSizeLimitExtension{0x4001}, &UtlsPaddingExtension{GetPaddingLen: BoringPaddingStyle}, }}, nil - case HelloChrome_102: - return ClientHelloSpec{ - CipherSuites: []uint16{ - GREASE_PLACEHOLDER, - TLS_AES_128_GCM_SHA256, - TLS_AES_256_GCM_SHA384, - TLS_CHACHA20_POLY1305_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_256_GCM_SHA384, - TLS_RSA_WITH_AES_128_CBC_SHA, - TLS_RSA_WITH_AES_256_CBC_SHA, - }, - CompressionMethods: []byte{ - 0x00, // compressionNone - }, - Extensions: []TLSExtension{ - &UtlsGREASEExtension{}, - &SNIExtension{}, - &UtlsExtendedMasterSecretExtension{}, - &RenegotiationInfoExtension{Renegotiation: RenegotiateOnceAsClient}, - &SupportedCurvesExtension{[]CurveID{ - GREASE_PLACEHOLDER, - X25519, - CurveP256, - CurveP384, - }}, - &SupportedPointsExtension{SupportedPoints: []byte{ - 0x00, // pointFormatUncompressed - }}, - &SessionTicketExtension{}, - &ALPNExtension{AlpnProtocols: []string{"h2", "http/1.1"}}, - &StatusRequestExtension{}, - &SignatureAlgorithmsExtension{SupportedSignatureAlgorithms: []SignatureScheme{ - ECDSAWithP256AndSHA256, - PSSWithSHA256, - PKCS1WithSHA256, - ECDSAWithP384AndSHA384, - PSSWithSHA384, - PKCS1WithSHA384, - PSSWithSHA512, - PKCS1WithSHA512, - }}, - &SCTExtension{}, - &KeyShareExtension{[]KeyShare{ - {Group: CurveID(GREASE_PLACEHOLDER), Data: []byte{0}}, - {Group: X25519}, - }}, - &PSKKeyExchangeModesExtension{[]uint8{ - PskModeDHE, - }}, - &SupportedVersionsExtension{[]uint16{ - GREASE_PLACEHOLDER, - VersionTLS13, - VersionTLS12, - }}, - &UtlsCompressCertExtension{[]CertCompressionAlgo{ - CertCompressionBrotli, - }}, - &ApplicationSettingsExtension{SupportedProtocols: []string{"h2"}}, - &UtlsGREASEExtension{}, - &UtlsPaddingExtension{GetPaddingLen: BoringPaddingStyle}, - }, - }, nil case HelloFirefox_99: return ClientHelloSpec{ TLSVersMin: VersionTLS10,