Android 16

As mentioned in the comment: For Androids ja3 is is not unique, probably because of GREASE.
One can add two handshakes after another and they are different. ja4 seems more consistent here.

This should be kept in mind for all clients "supplying some grease"
This commit is contained in:
Dirk
2026-05-18 16:50:06 +02:00
parent 56e4a74485
commit 7897cdcd84
2 changed files with 51 additions and 0 deletions
+26
View File
@@ -332,6 +332,32 @@
requiresSha2+=(true) requiresSha2+=(true)
ja3+=("78c89591bc3fffbc6aa884cc7ebbbdb5") ja3+=("78c89591bc3fffbc6aa884cc7ebbbdb5")
ja4+=("t13d1517h2_8daaf6152771_b6f405a00624") ja4+=("t13d1517h2_8daaf6152771_b6f405a00624")
# careful! ja3 is is not unique here, probably because of GREASE. It's difficult to find to matching ja3 at all. ja4 seems more consistent here.
current+=(true)
names+=("Android 16 (native)")
short+=("android_16")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030107130100070f0303a80e8116ef08e859a5660ef369403922257044938f3dc4801497a4ff86ae1e6520b7d9e84e0116f07f3ea7b9b31be7d49578864802be4199920af028a7bf1df50800205a5a130113021303c02bc02fc02cc030cca9cca8c013c014009c009d002f0035010006a67a7a0000000b00020100002b000706baba0304030300170000ff01000100003304ef04ed8a8a00010011ec04c0b031ba06c780befc685949cef93243d2b29da8426e9d1b0287195958276c7358653051008cb48d93598782f9a8be73663eabce21412cf3ca249f6a61da34a6f728756c5aa5c6b6866910bfc47a20310362b5b49d60b855f46b34f9ebbd6beb3b1f972af1c646f0ba746a51ad89b96e72cc7fae9943da40692c746883a094ac0564cc180a481b34ab84b08bd08984c72aa18214d098981dfcca67b872ed7c147c8526c128a50f0562c93b090b1b83cbd53ea94b69c03c9380c81b31a6b234c476e2988db137757047c7a9712d006871a192a4f31334dc3069e850a5208585fee65d6cfb63b5db3641f3b5b35c462a813cb645cca78271c411628b51450583712f987c5f8222ada32afaea7e43a519eb3c32ea464b6d8173774220418390af28c4b79787b1344be9f02483e185693831c2ab4693e3bca8f176da7317c2a497cce1bcae86266fe67311f738a5375ff53c33ddb7baad362db6581d21b1bb8e2c9526744066b203fe670efcc810425c89fc6b3e3cfc6b37a08c14ecaa6a7063219261d23c6fa952558839a27d80b2c750ac77a8756af3523eebc3d1ea8eba1c4d367ac9a2e6406e35a9a7e97320dc3505c88e5cc123c83a7fb18b1e1e33241d825d97905e7b8991cfc4b4b846a985f8cc9e8b5bae2a20af801349162e5ea1b5b7b0c951f65914d8af968b852ed399eb650c1ef7954b982abd5cc46edc3bc6c7b3f2b569553690e8588cc1fb7230024f6e83050200747839a54d89caaf25933b3aabde28c094350c03d75a87a4aa3e1b47a2f978cf4463c1cbb8eb6aac2e4b7c0c8a4803c506dc9990beac54b2376f351caa513c6fcd3a18db55763f02865435a8533659cef00a57cb2b0e7790a90a6e64e8181067372d377be831b1d113b2799b64007c215dfaad52453183d09b6711761c94225ab27ffd30aa6356208d036e002a6b61ab8b559b1408cab808393b31b60a54a102b0b6167ce222f4210bcc049bb765b866a73227104aeaab8014261a5a89bc4adc0e30c6212e693f1fa6146b7abf57464c2f68a513f408058b1253046167bca6089345144261c974c403101471e002404b1d98b47de7d8660e0016e72aa6678944b2d65e50dccfd5412db7dc87a150ba8a4977228455df35256cf296cb34204c2c3fd2c27efe882087c04466e39e0168549560cd126666a05b09afb810544b7594db725da09c26a2a69127a6b12786af712404f7a163c4a110ba05e6d8b17869be7faca2b1086210fba9dcb958a13502277131c3340242b70591dc051e895716103eb2a63b92e198cef5c3a213c88eb49bd3f0b393ba576ac14218975b1a36a0e7c3217f32437ef603f053a14be25fe3ccc7f6f977ea3401c50c5a8d5b101a451db9f40776f6cc01395886293c7b18880223c5656ab23f5c625bd25b81216123563aad3a739a96529ea35ad95c876fda01a91a5111e0bb6ffc0eec24cecf15b3b28715df0b7f9b393c84f5a2e7b80910744a7341970c7c4425f98e3e718839743d11c997e434c1c2027a11769fd011b76e2495d1f83e31d0ae58b24eccb17f8539150f869ab1b8ce87b625cc52993e05a92f030fe6a790f3f62443f05c482c42e65280106c43d3f35ca273070a440dc490b77502103925599d7d3ba576db2d6257ec2945b3f16c6609a575fe556303aa0e4427f2234fe0e18e84f0cceb8baf5abb10982fe4c27fdb2aeda7aba94277001d0020613f7c9b4efa181e720de9c1e406b7a6ef17c94ff97053fac456c36faf200e0afe0d011a0000010001710020008eb36ce91deadb92ff7983761ac68ce58cec044231899f73c5b5eb4464c64800f02925bb0094febfd8fc3960f861148f71ac4e4134ef5861e84d04ff3d79e7e773748e5fe6d947c768c22f42a0dfaa53575a0f13526d74d232605bbc1ab682aa61841396cd3191cfb76d82f3053549333d8325488e7a3b61707d567753ac98cd6b44ce26ba353bcd1853036f0f8db85b8b920afa6235e1403feb2ce44af2151e6c48d535102225a074626a7157096b3def88655d79fa1bc21fe7954d661995b8ac8f7cba70c2fff5fa8cf2e3b1ed83be5884e0c4b4576ab0cc589daf4494e0e911858cc6030f78e7f1c4765ebd356585f75ad9204505e4b2916126a51cdbeacfe3eff962d78f48795d966d3d32b7f6ce85002d00020101001b0003020002000d001200100403080404010503080505010806060144cd000500030268320005000501000000000010000e000c02683208687474702f312e3100230000000a000c000a8a8a11ec001d001700180000000f000d00000a7465737473736c2e7368001200006a6a000100")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("X25519MLKEM768:x25519:secp256r1:secp384r1")
requiresSha2+=(true)
ja3+=("1039cdb7642a736c706f52a335544033")
ja4+=("t13d1516h2_8daaf6152771_d8a2da3f94cd")
# careful! ja3 is is not unique here, probably because of GREASE. It's difficult to find to matching ja3 at all. ja4 seems more consistent here.
current+=(true) current+=(true)
names+=("Chrome 27 Win 7") names+=("Chrome 27 Win 7")
+25
View File
@@ -217,6 +217,31 @@
ja4+=("t13d1517h2_8daaf6152771_b6f405a00624") ja4+=("t13d1517h2_8daaf6152771_b6f405a00624")
current+=(true) current+=(true)
names+=("Android 16 (native)")
short+=("android_16")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030107130100070f0303a80e8116ef08e859a5660ef369403922257044938f3dc4801497a4ff86ae1e6520b7d9e84e0116f07f3ea7b9b31be7d49578864802be4199920af028a7bf1df50800205a5a130113021303c02bc02fc02cc030cca9cca8c013c014009c009d002f0035010006a67a7a0000000b00020100002b000706baba0304030300170000ff01000100003304ef04ed8a8a00010011ec04c0b031ba06c780befc685949cef93243d2b29da8426e9d1b0287195958276c7358653051008cb48d93598782f9a8be73663eabce21412cf3ca249f6a61da34a6f728756c5aa5c6b6866910bfc47a20310362b5b49d60b855f46b34f9ebbd6beb3b1f972af1c646f0ba746a51ad89b96e72cc7fae9943da40692c746883a094ac0564cc180a481b34ab84b08bd08984c72aa18214d098981dfcca67b872ed7c147c8526c128a50f0562c93b090b1b83cbd53ea94b69c03c9380c81b31a6b234c476e2988db137757047c7a9712d006871a192a4f31334dc3069e850a5208585fee65d6cfb63b5db3641f3b5b35c462a813cb645cca78271c411628b51450583712f987c5f8222ada32afaea7e43a519eb3c32ea464b6d8173774220418390af28c4b79787b1344be9f02483e185693831c2ab4693e3bca8f176da7317c2a497cce1bcae86266fe67311f738a5375ff53c33ddb7baad362db6581d21b1bb8e2c9526744066b203fe670efcc810425c89fc6b3e3cfc6b37a08c14ecaa6a7063219261d23c6fa952558839a27d80b2c750ac77a8756af3523eebc3d1ea8eba1c4d367ac9a2e6406e35a9a7e97320dc3505c88e5cc123c83a7fb18b1e1e33241d825d97905e7b8991cfc4b4b846a985f8cc9e8b5bae2a20af801349162e5ea1b5b7b0c951f65914d8af968b852ed399eb650c1ef7954b982abd5cc46edc3bc6c7b3f2b569553690e8588cc1fb7230024f6e83050200747839a54d89caaf25933b3aabde28c094350c03d75a87a4aa3e1b47a2f978cf4463c1cbb8eb6aac2e4b7c0c8a4803c506dc9990beac54b2376f351caa513c6fcd3a18db55763f02865435a8533659cef00a57cb2b0e7790a90a6e64e8181067372d377be831b1d113b2799b64007c215dfaad52453183d09b6711761c94225ab27ffd30aa6356208d036e002a6b61ab8b559b1408cab808393b31b60a54a102b0b6167ce222f4210bcc049bb765b866a73227104aeaab8014261a5a89bc4adc0e30c6212e693f1fa6146b7abf57464c2f68a513f408058b1253046167bca6089345144261c974c403101471e002404b1d98b47de7d8660e0016e72aa6678944b2d65e50dccfd5412db7dc87a150ba8a4977228455df35256cf296cb34204c2c3fd2c27efe882087c04466e39e0168549560cd126666a05b09afb810544b7594db725da09c26a2a69127a6b12786af712404f7a163c4a110ba05e6d8b17869be7faca2b1086210fba9dcb958a13502277131c3340242b70591dc051e895716103eb2a63b92e198cef5c3a213c88eb49bd3f0b393ba576ac14218975b1a36a0e7c3217f32437ef603f053a14be25fe3ccc7f6f977ea3401c50c5a8d5b101a451db9f40776f6cc01395886293c7b18880223c5656ab23f5c625bd25b81216123563aad3a739a96529ea35ad95c876fda01a91a5111e0bb6ffc0eec24cecf15b3b28715df0b7f9b393c84f5a2e7b80910744a7341970c7c4425f98e3e718839743d11c997e434c1c2027a11769fd011b76e2495d1f83e31d0ae58b24eccb17f8539150f869ab1b8ce87b625cc52993e05a92f030fe6a790f3f62443f05c482c42e65280106c43d3f35ca273070a440dc490b77502103925599d7d3ba576db2d6257ec2945b3f16c6609a575fe556303aa0e4427f2234fe0e18e84f0cceb8baf5abb10982fe4c27fdb2aeda7aba94277001d0020613f7c9b4efa181e720de9c1e406b7a6ef17c94ff97053fac456c36faf200e0afe0d011a0000010001710020008eb36ce91deadb92ff7983761ac68ce58cec044231899f73c5b5eb4464c64800f02925bb0094febfd8fc3960f861148f71ac4e4134ef5861e84d04ff3d79e7e773748e5fe6d947c768c22f42a0dfaa53575a0f13526d74d232605bbc1ab682aa61841396cd3191cfb76d82f3053549333d8325488e7a3b61707d567753ac98cd6b44ce26ba353bcd1853036f0f8db85b8b920afa6235e1403feb2ce44af2151e6c48d535102225a074626a7157096b3def88655d79fa1bc21fe7954d661995b8ac8f7cba70c2fff5fa8cf2e3b1ed83be5884e0c4b4576ab0cc589daf4494e0e911858cc6030f78e7f1c4765ebd356585f75ad9204505e4b2916126a51cdbeacfe3eff962d78f48795d966d3d32b7f6ce85002d00020101001b0003020002000d001200100403080404010503080505010806060144cd000500030268320005000501000000000010000e000c02683208687474702f312e3100230000000a000c000a8a8a11ec001d001700180000000f000d00000a7465737473736c2e7368001200006a6a000100")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("X25519MLKEM768:x25519:secp256r1:secp384r1")
requiresSha2+=(true)
ja3+=("1039cdb7642a736c706f52a335544033")
ja4+=("t13d1516h2_8daaf6152771_d8a2da3f94cd")
# careful! ja3 is is not unique here, probably because of GREASE. It's difficult to find to matching ja3 at all. ja4 seems more consistent here.
current+=(true)
names+=("Edge 17 Win 10") names+=("Edge 17 Win 10")
short+=("edge_17_win10") short+=("edge_17_win10")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA") ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA")