From 97d5b067c8b3fd61bdadff4d413ec87aae1fb15b Mon Sep 17 00:00:00 2001 From: Matthew Ransley Date: Mon, 3 Jul 2023 19:23:16 +0100 Subject: [PATCH] v114 --- src/browser/chrome/mod.rs | 1 + src/browser/chrome/ver/mod.rs | 2 + src/browser/chrome/ver/v108.rs | 44 +++++++------- src/browser/chrome/ver/v114.rs | 106 +++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 24 deletions(-) create mode 100644 src/browser/chrome/ver/v114.rs diff --git a/src/browser/chrome/mod.rs b/src/browser/chrome/mod.rs index c7bd274..b4bb188 100644 --- a/src/browser/chrome/mod.rs +++ b/src/browser/chrome/mod.rs @@ -28,4 +28,5 @@ pub enum ChromeVersion { V105, V106, V108, + V114, } diff --git a/src/browser/chrome/ver/mod.rs b/src/browser/chrome/ver/mod.rs index bb2bef8..d7f72fe 100644 --- a/src/browser/chrome/ver/mod.rs +++ b/src/browser/chrome/ver/mod.rs @@ -6,6 +6,7 @@ mod v104; mod v105; mod v106; mod v108; +mod v114; pub(super) fn get_config_from_ver(ver: ChromeVersion) -> BrowserSettings { match ver { @@ -13,5 +14,6 @@ pub(super) fn get_config_from_ver(ver: ChromeVersion) -> BrowserSettings { ChromeVersion::V105 => v105::get_settings(), ChromeVersion::V106 => v106::get_settings(), ChromeVersion::V108 => v108::get_settings(), + ChromeVersion::V114 => v114::get_settings(), } } diff --git a/src/browser/chrome/ver/v108.rs b/src/browser/chrome/ver/v108.rs index 344ea76..a3b91aa 100644 --- a/src/browser/chrome/ver/v108.rs +++ b/src/browser/chrome/ver/v108.rs @@ -1,13 +1,18 @@ use boring::ssl::{ - CertCompressionAlgorithm, SslConnector, SslConnectorBuilder, SslMethod, SslVersion, + CertCompressionAlgorithm, + SslConnector, + SslConnectorBuilder, + SslMethod, + SslVersion, }; use http::{ - header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, UPGRADE_INSECURE_REQUESTS, USER_AGENT}, - HeaderMap, HeaderValue, + header::{ ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, UPGRADE_INSECURE_REQUESTS, USER_AGENT }, + HeaderMap, + HeaderValue, }; use std::sync::Arc; -use crate::browser::{BrowserSettings, Http2Data}; +use crate::browser::{ BrowserSettings, Http2Data }; pub(super) fn get_settings() -> BrowserSettings { BrowserSettings { @@ -70,17 +75,11 @@ fn create_ssl_connector() -> SslConnectorBuilder { builder.set_alpn_protos(b"\x02h2\x08http/1.1").unwrap(); - builder - .add_cert_compression_alg(CertCompressionAlgorithm::Brotli) - .unwrap(); + builder.add_cert_compression_alg(CertCompressionAlgorithm::Brotli).unwrap(); - builder - .set_min_proto_version(Some(SslVersion::TLS1_2)) - .unwrap(); + builder.set_min_proto_version(Some(SslVersion::TLS1_2)).unwrap(); - builder - .set_max_proto_version(Some(SslVersion::TLS1_3)) - .unwrap(); + builder.set_max_proto_version(Some(SslVersion::TLS1_3)).unwrap(); builder } @@ -91,18 +90,15 @@ fn create_headers() -> HeaderMap { headers.insert( "sec-ch-ua", HeaderValue::from_static( - "\"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"108\", \"Google Chrome\";v=\"108\"", - ), + "\"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"108\", \"Google Chrome\";v=\"108\"" + ) + ); + headers.insert( + USER_AGENT, + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" + .parse() + .unwrap() ); - headers.insert("sec-ch-ua-mobile", "?0".parse().unwrap()); - headers.insert("sec-ch-ua-platform", "\"Windows\"".parse().unwrap()); - headers.insert(UPGRADE_INSECURE_REQUESTS, "1".parse().unwrap()); - headers.insert(USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36".parse().unwrap()); - headers.insert(ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9".parse().unwrap()); - headers.insert("sec-fetch-site", "none".parse().unwrap()); - headers.insert("sec-fetch-mode", "navigate".parse().unwrap()); - headers.insert("sec-fetch-user", "?1".parse().unwrap()); - headers.insert("sec-fetch-dest", "document".parse().unwrap()); headers.insert(ACCEPT_ENCODING, "gzip, deflate, br".parse().unwrap()); headers.insert(ACCEPT_LANGUAGE, "en-US,en;q=0.9".parse().unwrap()); diff --git a/src/browser/chrome/ver/v114.rs b/src/browser/chrome/ver/v114.rs new file mode 100644 index 0000000..d16c791 --- /dev/null +++ b/src/browser/chrome/ver/v114.rs @@ -0,0 +1,106 @@ +use boring::ssl::{ + CertCompressionAlgorithm, + SslConnector, + SslConnectorBuilder, + SslMethod, + SslVersion, +}; +use http::{ + header::{ ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, UPGRADE_INSECURE_REQUESTS, USER_AGENT }, + HeaderMap, + HeaderValue, +}; +use std::sync::Arc; + +use crate::browser::{ BrowserSettings, Http2Data }; + +pub(super) fn get_settings() -> BrowserSettings { + BrowserSettings { + tls_builder_func: Arc::new(create_ssl_connector), + http2: Http2Data { + initial_stream_window_size: 6291456, + initial_connection_window_size: 15728640, + max_concurrent_streams: 1000, + max_header_list_size: 262144, + header_table_size: 65536, + enable_push: Some(false), + }, + headers: create_headers(), + gzip: true, + brotli: true, + } +} + +fn create_ssl_connector() -> SslConnectorBuilder { + let mut builder = SslConnector::builder(SslMethod::tls()).unwrap(); + + builder.set_grease_enabled(true); + + builder.enable_ocsp_stapling(); + + let cipher_list = [ + "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_SHA256", + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", + "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", + ]; + + builder.set_cipher_list(&cipher_list.join(":")).unwrap(); + + let sigalgs_list = [ + "ecdsa_secp256r1_sha256", + "rsa_pss_rsae_sha256", + "rsa_pkcs1_sha256", + "ecdsa_secp384r1_sha384", + "rsa_pss_rsae_sha384", + "rsa_pkcs1_sha384", + "rsa_pss_rsae_sha512", + "rsa_pkcs1_sha512", + ]; + + builder.set_sigalgs_list(&sigalgs_list.join(":")).unwrap(); + + builder.enable_signed_cert_timestamps(); + + builder.set_alpn_protos(b"\x02h2\x08http/1.1").unwrap(); + + builder.add_cert_compression_alg(CertCompressionAlgorithm::Brotli).unwrap(); + + builder.set_min_proto_version(Some(SslVersion::TLS1_2)).unwrap(); + + builder.set_max_proto_version(Some(SslVersion::TLS1_3)).unwrap(); + + builder +} + +fn create_headers() -> HeaderMap { + let mut headers = HeaderMap::new(); + + headers.insert( + "sec-ch-ua", + HeaderValue::from_static( + "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"" + ) + ); + headers.insert( + USER_AGENT, + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" + .parse() + .unwrap() + ); + headers.insert(ACCEPT_ENCODING, "gzip, deflate, br".parse().unwrap()); + headers.insert(ACCEPT_LANGUAGE, "en-US,en;q=0.9".parse().unwrap()); + + headers +}