mirror of https://github.com/cbeuw/Cloak
Update firefox fingerprint
This commit is contained in:
parent
f67ae6e644
commit
9614fbc03d
|
|
@ -1,4 +1,4 @@
|
||||||
// Fingerprint of Firefox 96
|
// Fingerprint of Firefox 99
|
||||||
|
|
||||||
package client
|
package client
|
||||||
|
|
||||||
|
|
@ -22,26 +22,30 @@ func (f *Firefox) composeExtensions(serverName string, keyShare []byte) []byte {
|
||||||
common.CryptoRandRead(ret[42:107])
|
common.CryptoRandRead(ret[42:107])
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
// extension length is always 399, and server name length is variable
|
// extension length is always 401, and server name length is variable
|
||||||
var ext [12][]byte
|
var ext [15][]byte
|
||||||
ext[0] = addExtRec([]byte{0x00, 0x00}, generateSNI(serverName)) // server name indication
|
ext[0] = addExtRec([]byte{0x00, 0x00}, generateSNI(serverName)) // server name indication
|
||||||
ext[1] = addExtRec([]byte{0x00, 0x17}, nil) // extended_master_secret
|
ext[1] = addExtRec([]byte{0x00, 0x17}, nil) // extended_master_secret
|
||||||
ext[2] = addExtRec([]byte{0xff, 0x01}, []byte{0x00}) // renegotiation_info
|
ext[2] = addExtRec([]byte{0xff, 0x01}, []byte{0x00}) // renegotiation_info
|
||||||
suppGroup, _ := hex.DecodeString("000c001d00170018001901000101")
|
suppGroup, _ := hex.DecodeString("000c001d00170018001901000101")
|
||||||
ext[3] = addExtRec([]byte{0x00, 0x0a}, suppGroup) // supported groups
|
ext[3] = addExtRec([]byte{0x00, 0x0a}, suppGroup) // supported groups
|
||||||
ext[4] = addExtRec([]byte{0x00, 0x0b}, []byte{0x01, 0x00}) // ec point formats
|
ext[4] = addExtRec([]byte{0x00, 0x0b}, []byte{0x01, 0x00}) // ec point formats
|
||||||
|
ext[5] = addExtRec([]byte{0x00, 0x23}, nil) // session ticket
|
||||||
ALPN, _ := hex.DecodeString("000c02683208687474702f312e31")
|
ALPN, _ := hex.DecodeString("000c02683208687474702f312e31")
|
||||||
ext[5] = addExtRec([]byte{0x00, 0x10}, ALPN) // app layer proto negotiation
|
ext[6] = addExtRec([]byte{0x00, 0x10}, ALPN) // app layer proto negotiation
|
||||||
ext[6] = addExtRec([]byte{0x00, 0x05}, []byte{0x01, 0x00, 0x00, 0x00, 0x00}) // status request
|
ext[7] = addExtRec([]byte{0x00, 0x05}, []byte{0x01, 0x00, 0x00, 0x00, 0x00}) // status request
|
||||||
ext[7] = addExtRec([]byte{0x00, 0x33}, composeKeyShare(keyShare)) // key share
|
delegatedCredentials, _ := hex.DecodeString("00080403050306030203")
|
||||||
suppVersions, _ := hex.DecodeString("080304030303020301")
|
ext[8] = addExtRec([]byte{0x00, 0x22}, delegatedCredentials) // delegated credentials
|
||||||
ext[8] = addExtRec([]byte{0x00, 0x2b}, suppVersions) // supported versions
|
ext[9] = addExtRec([]byte{0x00, 0x33}, composeKeyShare(keyShare)) // key share
|
||||||
|
suppVersions, _ := hex.DecodeString("0403040303")
|
||||||
|
ext[10] = addExtRec([]byte{0x00, 0x2b}, suppVersions) // supported versions
|
||||||
sigAlgo, _ := hex.DecodeString("001604030503060308040805080604010501060102030201")
|
sigAlgo, _ := hex.DecodeString("001604030503060308040805080604010501060102030201")
|
||||||
ext[9] = addExtRec([]byte{0x00, 0x0d}, sigAlgo) // Signature Algorithms
|
ext[11] = addExtRec([]byte{0x00, 0x0d}, sigAlgo) // Signature Algorithms
|
||||||
ext[10] = addExtRec([]byte{0x00, 0x1c}, []byte{0x40, 0x01}) // record size limit
|
ext[12] = addExtRec([]byte{0x00, 0x2d}, []byte{0x01, 0x01}) // psk key exchange modes
|
||||||
// len(ext[0]) + 218 + 4 + len(padding) = 399
|
ext[13] = addExtRec([]byte{0x00, 0x1c}, []byte{0x40, 0x01}) // record size limit
|
||||||
|
// len(ext[0]) + 238 + 4 + len(padding) = 401
|
||||||
// len(padding) = 177 - len(ext[0])
|
// len(padding) = 177 - len(ext[0])
|
||||||
ext[11] = addExtRec([]byte{0x00, 0x15}, make([]byte, 177-len(ext[0]))) // padding
|
ext[14] = addExtRec([]byte{0x00, 0x15}, make([]byte, 159-len(ext[0]))) // padding
|
||||||
var ret []byte
|
var ret []byte
|
||||||
for _, e := range ext {
|
for _, e := range ext {
|
||||||
ret = append(ret, e...)
|
ret = append(ret, e...)
|
||||||
|
|
@ -57,8 +61,8 @@ func (f *Firefox) composeClientHello(hd clientHelloFields) (ch []byte) {
|
||||||
clientHello[3] = hd.random // random
|
clientHello[3] = hd.random // random
|
||||||
clientHello[4] = []byte{0x20} // session id length 32
|
clientHello[4] = []byte{0x20} // session id length 32
|
||||||
clientHello[5] = hd.sessionId // session id
|
clientHello[5] = hd.sessionId // session id
|
||||||
clientHello[6] = []byte{0x00, 0x24} // cipher suites length 36
|
clientHello[6] = []byte{0x00, 0x22} // cipher suites length 34
|
||||||
cipherSuites, _ := hex.DecodeString("130113031302c02bc02fcca9cca8c02cc030c00ac009c013c014009c009d002f0035000a")
|
cipherSuites, _ := hex.DecodeString("130113031302c02bc02fcca9cca8c02cc030c00ac009c013c014009c009d002f0035")
|
||||||
clientHello[7] = cipherSuites // cipher suites
|
clientHello[7] = cipherSuites // cipher suites
|
||||||
clientHello[8] = []byte{0x01} // compression methods length 1
|
clientHello[8] = []byte{0x01} // compression methods length 1
|
||||||
clientHello[9] = []byte{0x00} // compression methods
|
clientHello[9] = []byte{0x00} // compression methods
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,14 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestComposeExtensions(t *testing.T) {
|
func TestComposeExtensions(t *testing.T) {
|
||||||
target, _ := hex.DecodeString("000000170015000012636f6e73656e742e676f6f676c652e636f6d00170000ff01000100000a000e000c001d00170018001901000101000b000201000010000e000c02683208687474702f312e310005000501000000000033006b0069001d00208d8ea1b80430b7710b65f0d89b0144a5eeb218709ce6613d4fc8bfb117657c150017004104bcffff92fc5a5aa656a04342cef647cf59a365678743ec64409a1444360c58b552c92ee6d0aad8573d1b8ca91a160e28de18bf9b46f8950c50957f606e04a970002b0009080304030303020301000d0018001604030503060308040805080604010501060102030201001c0002400100150096000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
|
target, _ := hex.DecodeString("000000170015000012636f6e73656e742e676f6f676c652e636f6d00170000ff01000100000a000e000c001d00170018001901000101000b00020100002300000010000e000c02683208687474702f312e310005000501000000000022000a000804030503060302030033006b0069001d00208d8ea1b80430b7710b65f0d89b0144a5eeb218709ce6613d4fc8bfb117657c1500170041947458330e3553dcde0a8741eb1dde26ebaee8262029c5edb3cbacc9ee1d7c866085b9cf483d943248997a65c5fa1d35725213895d0e5569d4e291863061b7d075002b00050403040303000d0018001604030503060308040805080604010501060102030201002d00020101001c0002400100150084000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
|
||||||
|
|
||||||
serverName := "consent.google.com"
|
serverName := "consent.google.com"
|
||||||
keyShare, _ := hex.DecodeString("8d8ea1b80430b7710b65f0d89b0144a5eeb218709ce6613d4fc8bfb117657c15")
|
keyShare, _ := hex.DecodeString("8d8ea1b80430b7710b65f0d89b0144a5eeb218709ce6613d4fc8bfb117657c15")
|
||||||
|
|
||||||
result := (&Firefox{}).composeExtensions(serverName, keyShare)
|
result := (&Firefox{}).composeExtensions(serverName, keyShare)
|
||||||
// skip random secp256r1
|
// skip random secp256r1
|
||||||
if !bytes.Equal(result[:133], target[:133]) || !bytes.Equal(result[198:], target[198:]) {
|
if !bytes.Equal(result[:151], target[:151]) || !bytes.Equal(result[216:], target[216:]) {
|
||||||
t.Errorf("got %x", result)
|
t.Errorf("got %x", result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue