JA4 fingerprint

t12d190800_d83cc789557e_7af1ed941c26

WinINET / Go - infrastructure / agent software.

TCP · TLS 1.2, domain present, 19 cipher suites, 08 extensions, none offered ALPN.

Try:

Anatomy

t12d190800_d83cc789557e_7af1ed941c26
tTransportThe protocol carrying the handshake - t for TCP, q for QUIC (HTTP/3), d for DTLS.TCP
12TLS versionThe highest TLS version the client offered, from the supported_versions extension - 13 is TLS 1.3, 12 is TLS 1.2.TLS 1.2
dSNIWhether the client sent a Server Name Indication - d if it named a domain, i if it connected to a bare IP.domain present
19CiphersHow many cipher suites the client offered (GREASE values excluded). The exact list is hashed into the first JA4 hash.19 suites offered
08ExtensionsHow many TLS extensions the client sent (GREASE excluded, and SNI and ALPN are not counted). The list is hashed into the second JA4 hash.8 present
00ALPNThe first application protocol the client advertised - h2 is HTTP/2, h1 is HTTP/1.1, h3 is HTTP/3, 00 is none.none offered

d83cc789557e is a SHA-256 of the sorted cipher list · 7af1ed941c26 covers the extensions and signature algorithms. Hashes aren't reversible - the identity below comes from matching them.

Identity

from FoxIO ja4db
WinINET / Go
Infrastructure / agent

WinINET / Go is the published identity for this exact fingerprint in FoxIO's ja4db - a known mapping, not a guess.

Family
unknown
Confidence
Exact match · full JA4
Matched on
full JA4 hash
Verified
yes - FoxIO published mapping

Windows’ built-in WinINET HTTP stack (Internet Explorer, legacy apps, some malware loaders). Go can present the same JA4, so treat the label as ambiguous.

Get hundreds of insights

connection_fingerprint: {
ja4: {
hash: "t12d190800_d83cc789557e_7af1ed941c26",
family: "unknown",
},
user_agent_alignment: "?", // needs a live request
h2_fingerprint: "?", // needs a live request
}

A JA4 is one clue. Foil checks hundreds more - the network, the device, and how the session behaves - and tells you when they don't add up. That's usually where the bots are.

See it on a real session - free →

What to do

Review

Legitimate in the right place, suspicious out of it - decide by context. A VPN or remote-access stack hitting an admin panel, corporate SSO, or a consumer signup flow deserves scrutiny.

Check it against an allowlist of sanctioned infrastructure; if it isn’t sanctioned, step up verification or block. VPN/proxy egress also hides the real client, so pair this with IP intelligence (datacenter vs residential, known-VPN ranges) and watch for many accounts sharing one exit.

About this fingerprint

Windows’ built-in WinINET HTTP stack (Internet Explorer, legacy apps, some malware loaders). Go can present the same JA4, so treat the label as ambiguous.

The breakdown above is computed from the string itself: the readable JA4_aprefix gives the transport, TLS version, SNI flag, cipher and extension counts, and ALPN, while the two hashes are matched against Foil's reference database to name the client. For the full background, see TLS fingerprinting, or try any fingerprint of your own in the JA4 database.

Both component hashes can be looked up on their own: cipher hash d83cc789557e lists every fingerprint built on this cipher stack, and extension hash 7af1ed941c26 lists the variants that share this extension set.

Frequently asked

JA4 is a fingerprint of the TLS ClientHello a client sends before any HTTP. It is a three-part string, JA4_a_JA4_b_JA4_c: a readable prefix (transport, TLS version, SNI, cipher and extension counts, ALPN) followed by two truncated SHA-256 hashes over the sorted cipher and extension lists. Unlike JA3, it survives Chrome's extension-order randomization.

The JA4_a prefix decodes by eye: the first character is the transport, the next two are the TLS version, then SNI, a two-digit cipher count, a two-digit extension count, and the first ALPN value. The two hashes are not reversible; you identify them by matching against a database or by decoding the raw (JA4_r) variant.

A JA3 fingerprint is an MD5 hash of the handshake, so the hash itself carries no readable structure. Only the raw JA3 string (version, ciphers, extensions, curves, point formats) can be decoded back into its components.

Yes. Fingerprints are matched against a distilled reference database of common browsers, HTTP libraries, and automation tools. The match tells you what a client is; identifying whether it is lying about that requires cross-checking against the User-Agent, HTTP/2 fingerprint, and JavaScript environment in a live request.