TwinKey ClickFix kit
TwinKey is a two-key wrapper whose decoded stage reads a script host from Polygon. We have matched it on 70 sites since 7 September.
TwinKey in numbers
Since 7 September, the first TwinKey match in our records, counted on 12 November 2026. How we count.
| Sites with TwinKey code | 70 |
|---|---|
| Sites with a match in the last 30 days | 56 |
| New sites in October | 21 |
| Still serving it when recaptured at least 25 days later | 39 of 42 sites (93%) |
| Sites running WordPress (captured since 25 September) | 98% |
Two keys unwrap the resolver
TwinKey is an inline wrapper that rebuilds the name fromCharCode from split strings. It applies two repeating string keys to an embedded byte sequence, converts the result to text and writes that text into a temporary script element. The wrapper removes the temporary element and its own script tag after the decoded code runs.
The outer variable names change across copies.
The scheduler and requested path changed
One generation waits for requestIdleCallback. Another uses requestAnimationFrame and the String constructor. Both decode a resolver that calls the same Polygon contract with selector 0xb68d1809.
The contract response supplies a base address. The resolver adds a randomised path below /api/ and injects the result as a script. Copies use /api/index or /api/vendor_lib, with extensions including .js, .avi and .css.
In production captures, those randomised requests received a captcha-themed 404 page.
What we see
| Month | New sites |
|---|---|
| September | 48 |
| October | 21 |
| November so far | 1 |
The persistence check found TwinKey again on 39 of 42 sites recaptured at least 25 days after their first match (93%). 98% of TwinKey sites captured since 25 September run WordPress.
TwinKey overlaps with BW panel on 34 sites and with LA02 on 19.
Checking a site
Search raw HTML and decoded inline scripts for:
fromCharCodeassembled from several short strings- two repeating string keys applied to one embedded byte sequence
decodeURIComponent(escape(...))around the decoded text- a temporary script populated through
textContentand then removed - a Polygon call using selector
0xb68d1809 - randomised
/api/indexor/api/vendor_librequests
Decode several copies before comparing them. Scheduling calls, variable names and extensions rotate while the inner contract resolver remains recognisable.
Contracts we read
We read 1 TwinKey contract every day.
| Chain | Contract | Current destinations | Last changed |
|---|---|---|---|
| Polygon | 0xb6be32f00cd80b27ed2b94c10dce991d0d27aef0 | recap-cha[.]xyz |
The EtherHiding contract tracker keeps the full destination history.
Hosts its commands download from
TwinKey lure commands we captured download from 1 host.
| Host | Sites | Last seen | Latest command |
|---|---|---|---|
api-net[.]cfd | 2 | CommandURL First seen 30 October 2026, 2 URLs on this host. |
The ClickFix command tracker lists every host.