JA4 fingerprint
t12i190700_d83cc789557e_16bbda4055b2
Cobalt Strike - a known offensive-security / C2 tool.
TCP · TLS 1.2, no SNI (IP), 19 cipher suites, 07 extensions, none offered ALPN.
Anatomy
d83cc789557e is a SHA-256 of the sorted cipher list · 16bbda4055b2 covers the extensions and signature algorithms. Hashes aren't reversible - the identity below comes from matching them.
Identity
from FoxIO ja4dbCobalt Strike is the published identity for this exact fingerprint in FoxIO's ja4db - a known mapping, not a guess.
Cobalt Strike is a commercial adversary-simulation / C2 platform heavily abused by real attackers. This is a v4.9.1 beacon’s HTTP transport over WinINET.
Get hundreds of insights
connection_fingerprint: {ja4: {hash: "t12i190700_d83cc789557e_16bbda4055b2",family: "unknown",},user_agent_alignment: "?", // needs a live requesth2_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
BlockTreat as malicious until proven otherwise. Block the connection at the edge and raise a high-priority alert to your security team.
Then pivot: enrich the source IP (hosting/ASN, geo, reputation), search for every other session sharing this JA4, IP, or device cluster, and look for beaconing - regular intervals, small fixed payloads. If it’s on an internal or egress network the source host is likely compromised, so isolate it and begin incident response. Note that Go-based C2 shares a generic Go JA4, so corroborate with the destination, JA4S/JA4H, timing, and payload before attributing it to a specific tool.
About this fingerprint
Cobalt Strike is a commercial adversary-simulation / C2 platform heavily abused by real attackers. This is a v4.9.1 beacon’s HTTP transport over WinINET.
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 16bbda4055b2 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.