mirror of
https://github.com/lwthiker/curl-impersonate.git
synced 2026-09-13 04:05:53 +00:00
Add support for impersonating Firefox 100
Add support for impersonating Firefox 100. The TLS signature is identical to previous versions of Firefox. In addition, upgrade NSS (Firefox's TLS library) to version 3.77 used by Firefox 100. This is not strictly necessary as the previous version used works just fine, but it's better keep up with the newest version.
This commit is contained in:
+2
-2
@@ -40,9 +40,9 @@ RUN cd brotli-${BROTLI_VERSION} && \
|
||||
# Needed for building libnss
|
||||
RUN pip install gyp-next
|
||||
|
||||
ARG NSS_VERSION=nss-3.75
|
||||
ARG NSS_VERSION=nss-3.77
|
||||
# This tarball is already bundled with nspr, a dependency of libnss.
|
||||
ARG NSS_URL=https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_75_RTM/src/nss-3.75-with-nspr-4.32.tar.gz
|
||||
ARG NSS_URL=https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_77_RTM/src/nss-3.77-with-nspr-4.32.tar.gz
|
||||
|
||||
# Download and compile nss.
|
||||
RUN curl -o ${NSS_VERSION}.tar.gz ${NSS_URL}
|
||||
|
||||
@@ -33,9 +33,9 @@ RUN cd brotli-${BROTLI_VERSION} && \
|
||||
# Needed for building libnss
|
||||
RUN pip install gyp-next
|
||||
|
||||
ARG NSS_VERSION=nss-3.75
|
||||
ARG NSS_VERSION=nss-3.77
|
||||
# This tarball is already bundled with nspr, a dependency of libnss.
|
||||
ARG NSS_URL=https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_75_RTM/src/nss-3.75-with-nspr-4.32.tar.gz
|
||||
ARG NSS_URL=https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_77_RTM/src/nss-3.77-with-nspr-4.32.tar.gz
|
||||
|
||||
# Download and compile nss.
|
||||
RUN curl -o ${NSS_VERSION}.tar.gz ${NSS_URL}
|
||||
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Find the directory of this script
|
||||
dir=`echo "$0" | sed 's%/[^/]*$%%'`
|
||||
|
||||
# The list of ciphers can be obtained by looking at the Client Hello message in
|
||||
# Wireshark, then converting it using the cipherlist array at
|
||||
# https://github.com/curl/curl/blob/master/lib/vtls/nss.c
|
||||
"$dir/curl-impersonate-ff" \
|
||||
--ciphers aes_128_gcm_sha_256,chacha20_poly1305_sha_256,aes_256_gcm_sha_384,ecdhe_ecdsa_aes_128_gcm_sha_256,ecdhe_rsa_aes_128_gcm_sha_256,ecdhe_ecdsa_chacha20_poly1305_sha_256,ecdhe_rsa_chacha20_poly1305_sha_256,ecdhe_ecdsa_aes_256_gcm_sha_384,ecdhe_rsa_aes_256_gcm_sha_384,ecdhe_ecdsa_aes_256_sha,ecdhe_ecdsa_aes_128_sha,ecdhe_rsa_aes_128_sha,ecdhe_rsa_aes_256_sha,rsa_aes_128_gcm_sha_256,rsa_aes_256_gcm_sha_384,rsa_aes_128_sha,rsa_aes_256_sha \
|
||||
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0' \
|
||||
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' \
|
||||
-H 'Accept-Language: en-US,en;q=0.5' \
|
||||
-H 'Accept-Encoding: gzip, deflate, br' \
|
||||
-H 'Upgrade-Insecure-Requests: 1' \
|
||||
-H 'Sec-Fetch-Dest: document' \
|
||||
-H 'Sec-Fetch-Mode: navigate' \
|
||||
-H 'Sec-Fetch-Site: none' \
|
||||
-H 'Sec-Fetch-User: ?1' \
|
||||
-H 'TE: Trailers' \
|
||||
--http2 --false-start --compressed \
|
||||
"$@"
|
||||
@@ -216,7 +216,7 @@ index 769363941..6e2f1b829 100644
|
||||
|
||||
CHECKSRC = $(CS_$(V))
|
||||
diff --git a/lib/easy.c b/lib/easy.c
|
||||
index 20293a710..f08403bc0 100644
|
||||
index 20293a710..87acdb814 100644
|
||||
--- a/lib/easy.c
|
||||
+++ b/lib/easy.c
|
||||
@@ -80,6 +80,7 @@
|
||||
@@ -227,7 +227,7 @@ index 20293a710..f08403bc0 100644
|
||||
|
||||
/* The last 3 #include files should be in this order */
|
||||
#include "curl_printf.h"
|
||||
@@ -282,6 +283,202 @@ void curl_global_cleanup(void)
|
||||
@@ -282,6 +283,237 @@ void curl_global_cleanup(void)
|
||||
init_flags = 0;
|
||||
}
|
||||
|
||||
@@ -351,6 +351,41 @@ index 20293a710..f08403bc0 100644
|
||||
+ "Sec-Fetch-User: ?1",
|
||||
+ "TE: Trailers"
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ .target = "ff100",
|
||||
+ .httpversion = CURL_HTTP_VERSION_2_0,
|
||||
+ .ssl_version = CURL_SSLVERSION_TLSv1_2 | CURL_SSLVERSION_MAX_DEFAULT,
|
||||
+ .ciphers =
|
||||
+ "aes_128_gcm_sha_256,"
|
||||
+ "chacha20_poly1305_sha_256,"
|
||||
+ "aes_256_gcm_sha_384,"
|
||||
+ "ecdhe_ecdsa_aes_128_gcm_sha_256,"
|
||||
+ "ecdhe_rsa_aes_128_gcm_sha_256,"
|
||||
+ "ecdhe_ecdsa_chacha20_poly1305_sha_256,"
|
||||
+ "ecdhe_rsa_chacha20_poly1305_sha_256,"
|
||||
+ "ecdhe_ecdsa_aes_256_gcm_sha_384,"
|
||||
+ "ecdhe_rsa_aes_256_gcm_sha_384,"
|
||||
+ "ecdhe_ecdsa_aes_256_sha,"
|
||||
+ "ecdhe_ecdsa_aes_128_sha,"
|
||||
+ "ecdhe_rsa_aes_128_sha,"
|
||||
+ "ecdhe_rsa_aes_256_sha,"
|
||||
+ "rsa_aes_128_gcm_sha_256,"
|
||||
+ "rsa_aes_256_gcm_sha_384,"
|
||||
+ "rsa_aes_128_sha,"
|
||||
+ "rsa_aes_256_sha",
|
||||
+ .http_headers = {
|
||||
+ "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0",
|
||||
+ "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
|
||||
+ "Accept-Language: en-US,en;q=0.5",
|
||||
+ "Accept-Encoding: gzip, deflate, br",
|
||||
+ "Upgrade-Insecure-Requests: 1",
|
||||
+ "Sec-Fetch-Dest: document",
|
||||
+ "Sec-Fetch-Mode: navigate",
|
||||
+ "Sec-Fetch-Site: none",
|
||||
+ "Sec-Fetch-User: ?1",
|
||||
+ "TE: Trailers"
|
||||
+ }
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
@@ -430,7 +465,7 @@ index 20293a710..f08403bc0 100644
|
||||
/*
|
||||
* curl_easy_init() is the external interface to alloc, setup and init an
|
||||
* easy handle that is returned. If anything goes wrong, NULL is returned.
|
||||
@@ -290,6 +487,7 @@ struct Curl_easy *curl_easy_init(void)
|
||||
@@ -290,6 +522,7 @@ struct Curl_easy *curl_easy_init(void)
|
||||
{
|
||||
CURLcode result;
|
||||
struct Curl_easy *data;
|
||||
@@ -438,7 +473,7 @@ index 20293a710..f08403bc0 100644
|
||||
|
||||
/* Make sure we inited the global SSL stuff */
|
||||
if(!initialized) {
|
||||
@@ -308,6 +506,22 @@ struct Curl_easy *curl_easy_init(void)
|
||||
@@ -308,6 +541,22 @@ struct Curl_easy *curl_easy_init(void)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -461,7 +496,7 @@ index 20293a710..f08403bc0 100644
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -878,6 +1092,13 @@ struct Curl_easy *curl_easy_duphandle(struct Curl_easy *data)
|
||||
@@ -878,6 +1127,13 @@ struct Curl_easy *curl_easy_duphandle(struct Curl_easy *data)
|
||||
outcurl->state.referer_alloc = TRUE;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user