Skip to content

Commit

Permalink
implemented chrome124;
Browse files Browse the repository at this point in the history
  • Loading branch information
bogdanfinn committed May 1, 2024
1 parent 84094ce commit d8b8262
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 8 deletions.
13 changes: 8 additions & 5 deletions mapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,14 @@ var aeadIds = map[string]uint16{
}

var curves = map[string]tls.CurveID{
"GREASE": tls.CurveID(tls.GREASE_PLACEHOLDER),
"P256": tls.CurveP256,
"P384": tls.CurveP384,
"P521": tls.CurveP521,
"X25519": tls.X25519,
"GREASE": tls.CurveID(tls.GREASE_PLACEHOLDER),
"P256": tls.CurveP256,
"P384": tls.CurveP384,
"P521": tls.CurveP521,
"X25519": tls.X25519,
"P256Kyber768": tls.P256Kyber768Draft00,
"X25519Kyber512D": tls.X25519Kyber512Draft00,
"X25519Kyber768": tls.X25519Kyber768Draft00,
}

var certCompression = map[string]tls.CertCompressionAlgo{
Expand Down
103 changes: 102 additions & 1 deletion profiles/internal_browser_profiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,108 @@ var Chrome_117 = ClientProfile{
connectionFlow: 15663105,
}

var Chrome_124 = ClientProfile{
clientHelloId: tls.ClientHelloID{
Client: "Chrome",
RandomExtensionOrder: false,
Version: "124",
Seed: nil,
SpecFactory: func() (tls.ClientHelloSpec, error) {
return tls.ClientHelloSpec{
CipherSuites: []uint16{
tls.GREASE_PLACEHOLDER,
tls.TLS_AES_128_GCM_SHA256,
tls.TLS_AES_256_GCM_SHA384,
tls.TLS_CHACHA20_POLY1305_SHA256,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
tls.TLS_RSA_WITH_AES_128_GCM_SHA256,
tls.TLS_RSA_WITH_AES_256_GCM_SHA384,
tls.TLS_RSA_WITH_AES_128_CBC_SHA,
tls.TLS_RSA_WITH_AES_256_CBC_SHA,
},
CompressionMethods: []uint8{
tls.CompressionNone,
},
Extensions: []tls.TLSExtension{
&tls.UtlsGREASEExtension{},
&tls.UtlsCompressCertExtension{[]tls.CertCompressionAlgo{
tls.CertCompressionBrotli,
}},
&tls.SCTExtension{},
&tls.ExtendedMasterSecretExtension{},
&tls.ApplicationSettingsExtension{SupportedProtocols: []string{"h2"}},
&tls.ALPNExtension{AlpnProtocols: []string{"h2", "http/1.1"}},
&tls.SupportedVersionsExtension{[]uint16{
tls.GREASE_PLACEHOLDER,
tls.VersionTLS13,
tls.VersionTLS12,
}},
&tls.SignatureAlgorithmsExtension{SupportedSignatureAlgorithms: []tls.SignatureScheme{
tls.ECDSAWithP256AndSHA256,
tls.PSSWithSHA256,
tls.PKCS1WithSHA256,
tls.ECDSAWithP384AndSHA384,
tls.PSSWithSHA384,
tls.PKCS1WithSHA384,
tls.PSSWithSHA512,
tls.PKCS1WithSHA512,
}},
&tls.SupportedPointsExtension{SupportedPoints: []byte{
tls.PointFormatUncompressed,
}},
&tls.SNIExtension{},
&tls.SessionTicketExtension{},
&tls.SupportedCurvesExtension{[]tls.CurveID{
tls.GREASE_PLACEHOLDER,
tls.X25519Kyber768Draft00,
tls.X25519,
tls.CurveP256,
tls.CurveP384,
}},
tls.BoringGREASEECH(),
&tls.StatusRequestExtension{},
&tls.RenegotiationInfoExtension{Renegotiation: tls.RenegotiateOnceAsClient},
&tls.PSKKeyExchangeModesExtension{[]uint8{
tls.PskModeDHE,
}},
&tls.KeyShareExtension{[]tls.KeyShare{
{Group: tls.CurveID(tls.GREASE_PLACEHOLDER), Data: []byte{0}},
{Group: tls.X25519Kyber768Draft00},
{Group: tls.X25519},
}},
&tls.UtlsGREASEExtension{},
},
}, nil
},
},
settings: map[http2.SettingID]uint32{
http2.SettingHeaderTableSize: 65536,
http2.SettingEnablePush: 0,
http2.SettingInitialWindowSize: 6291456,
http2.SettingMaxHeaderListSize: 262144,
},
settingsOrder: []http2.SettingID{
http2.SettingHeaderTableSize,
http2.SettingEnablePush,
http2.SettingInitialWindowSize,
http2.SettingMaxHeaderListSize,
},
pseudoHeaderOrder: []string{
":method",
":authority",
":scheme",
":path",
},
connectionFlow: 15663105,
}

var Chrome_120 = ClientProfile{
clientHelloId: tls.ClientHelloID{
Client: "Chrome",
Expand Down Expand Up @@ -180,7 +282,6 @@ var Chrome_120 = ClientProfile{
tls.CertCompressionBrotli,
}},
&tls.UtlsGREASEExtension{},
//&tls.UtlsPaddingExtension{GetPaddingLen: tls.BoringPaddingStyle},
},
}, nil
},
Expand Down
5 changes: 3 additions & 2 deletions profiles/profiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
tls "github.com/bogdanfinn/utls"
)

var DefaultClientProfile = Chrome_120
var DefaultClientProfile = Chrome_124

var MappedTLSClients = map[string]ClientProfile{
"chrome_103": Chrome_103,
Expand All @@ -22,6 +22,7 @@ var MappedTLSClients = map[string]ClientProfile{
"chrome_116_PSK_PQ": Chrome_116_PSK_PQ,
"chrome_117": Chrome_117,
"chrome_120": Chrome_120,
"chrome_124": Chrome_124,
"safari_15_6_1": Safari_15_6_1,
"safari_16_0": Safari_16_0,
"safari_ipad_15_6": Safari_Ipad_15_6,
Expand All @@ -36,7 +37,7 @@ var MappedTLSClients = map[string]ClientProfile{
"firefox_108": Firefox_108,
"firefox_110": Firefox_110,
"firefox_117": Firefox_117,
"firefox_120": Firefox_120,
"firefox_120": Firefox_120,
"firefox_123": Firefox_123,
"opera_89": Opera_89,
"opera_90": Opera_90,
Expand Down
27 changes: 27 additions & 0 deletions tests/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import (
)

func TestClients(t *testing.T) {
t.Log("testing chrome 124")
chrome_124(t)
t.Log("testing chrome 120")
chrome_120(t)
time.Sleep(2 * time.Second)
Expand Down Expand Up @@ -511,6 +513,31 @@ func firefox_108(t *testing.T) {
compareResponse(t, "firefox", clientFingerprints[firefox][tls.HelloFirefox_108.Str()], resp)
}

func chrome_124(t *testing.T) {
options := []tls_client.HttpClientOption{
tls_client.WithClientProfile(profiles.Chrome_124),
}

client, err := tls_client.NewHttpClient(nil, options...)
if err != nil {
t.Fatal(err)
}

req, err := http.NewRequest(http.MethodGet, peetApiEndpoint, nil)
if err != nil {
t.Fatal(err)
}

req.Header = defaultHeader

resp, err := client.Do(req)
if err != nil {
t.Fatal(err)
}

compareResponse(t, "chrome", clientFingerprints[chrome][profiles.Chrome_124.GetClientHelloStr()], resp)
}

func chrome_120(t *testing.T) {
options := []tls_client.HttpClientOption{
tls_client.WithClientProfile(profiles.Chrome_120),
Expand Down
6 changes: 6 additions & 0 deletions tests/client_test_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,12 @@ const (

var clientFingerprints = map[string]map[string]map[string]string{
chrome: {
profiles.Chrome_124.GetClientHelloStr(): map[string]string{
ja3String: "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,27-18-23-17513-16-43-13-11-0-35-10-65037-5-65281-45-51,25497-29-23-24,0",
ja3Hash: "64aff24dbef210f33880d4f62e1493dd",
akamaiFingerprint: "1:65536,2:0,4:6291456,6:262144|15663105|0|m,a,s,p",
akamaiFingerprintHash: "90224459f8bf70b7d0a8797eb916dbc9",
},
profiles.Chrome_120.GetClientHelloStr(): map[string]string{
ja3String: "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-45-43-5-23-35-13-65281-16-65037-18-51-10-11-17513-27,29-23-24,0",
ja3Hash: "1d9a054bac1eef41f30d370f9bbb2ad2",
Expand Down

0 comments on commit d8b8262

Please sign in to comment.