On-chain investigationLedger9 October 2026

The Ledger CryptoBilis hack took $102.0M from 335 wallets. One thief had all the keys

On Friday 9 October, people who had bought Ledger devices from a seller in South East Asia found their crypto gone. We followed every drained wallet on six chains to see how the thief worked and where the money sits now.

Live story. Sections 01 to 10 use balances from 07:00 UTC on 10 October. We will add dated lines here as the money moves.
Update, 11 October, 07:00 UTC: Ledger has found a hardware implant in one victim's device. On 10 October the thief ran another 1,736 ETH through Tornado Cash and Zcash, and it came out as USDC. Circle can now freeze 5.35 million USDC in five wallets. On TRON the thief swapped 5.1 million USDD back into USDT and then into ETH. We also found a holding wallet we had missed, and the figures now include it. Section 11 has the details.
Correction, 12 October, 12:00 UTC: The TRON wallets we called an OTC-style group (four on 9 October, five on 11 October) are THORChain's vaults, where the THORChain swap service takes in USDT. The thief used them to swap USDT into ETH, about $3.0M on 9 October and the 15.1 million USDD we had counted on 10 and 11 October. The payments to Binance that we linked to the thief belonged to other THORChain users, and we have removed that lead. On 11 and 12 October the thief also emptied the five USDC wallets, before any freeze. We are tracing where the money went and will update this page.
Update, 12 October, 14:00 UTC: We found a drain we had missed. At 20:49 UTC on 9 October the thief emptied nine more TRON wallets of 8.8 million USDT, so our count is now $102.0M from 324 wallets. Since then the thief has sent all its USDD through THORChain to be swapped into ETH, the last of it soon after 13:30 UTC on 12 October, and put about 3,690 ETH more into Tornado Cash. Two fresh wallets that are likely the thief's hold 2.38 million USDC, which Circle can freeze. Section 11 has the details.
Update, 13 October, 10:00 UTC: On the afternoon of 12 October the thief took about 1,210 ETH back out of Tornado Cash and sent most of it to the new wallet that THORChain paid for the thief's last USDD swaps. That wallet now holds 1,944 ETH. Ledger has explained how the implant copies the 24 words during setup. The two USDC wallets have not moved. Section 11 has the details.
Update, 15 October, 07:00 UTC: Circle did not freeze the 2.38 million USDC, and on 14 and 15 October the thief moved it. A wallet that paid gas to both USDC wallets also took 402 ETH from one of the thief's own wallets, so the two USDC wallets were the thief's. Most of the money became USDT on TRON. About $0.7M still sits in the thief's own wallets, where Circle and Tether can freeze it. MediaMarkt Saturn has stopped selling Ledger devices after one implant report. At 06:47 UTC, after our check, the thief began another Tornado Cash run; by 08:20 it had put in 130 ETH more. Section 11 has the details.
Update, 16 October, 15:00 UTC: The thief sent another 2.06 million USDT to TRON. A 2.0 million USDT lot crossed three broker wallets in three minutes and stopped in one, where between 0.6 and 2.0 million USDT of the thief's money still sits and Tether could freeze it. Another 360 ETH went into Tornado Cash, the last 50 ETH at 14:49 to 14:50 UTC. We now count 335 victim wallets, after counting 11 TRON wallets that lost mostly TRX; the dollar total is unchanged. Ledger has asked resellers in Southeast Asia and Hong Kong to pull its devices. Section 11 has the details.
At a glance
We count $102.0M taken from 335 wallets on TRON, Bitcoin, Ethereum, Solana, BNB Chain and Polygon, more than first reported. Ledger links the losses to devices bought through CryptoBilis, a reseller that news reports place in Indonesia, Malaysia and the Philippines. Dozens of wallets signed the same request within seconds, after two weeks of test runs, which points to one thief holding all the keys. Tether froze $10.0M. Over eight days the thief put about 7,700 ETH into Tornado Cash, sent most of what came out on through Zcash, and swapped its USDD into ETH through THORChain. Circle did not freeze the 2.38 million USDC we flagged, and the thief moved it on 14 and 15 October. On 16 October about $81M could still be found on the chain.
$102.0M
Taken from 335 wallets on six chains
3 seconds
For 25 TRON wallets to sign the same approval
$10.0M
USDT frozen by Tether in 20 wallets
$0.3M
In USDC and USDT still in the thief's own wallets, which Circle and Tether can freeze
Key findingsEach line has its own share link
  1. $102.0M

    Taken from 335 wallets on six chains, more than the $86M first reported from the ten public addresses.

  2. 3 seconds

    For 25 TRON wallets to sign the same approval. Eight minutes earlier, 30 other wallets had handed control to the thief's key.

  3. 2 weeks

    Of practice before the drain: 21 small test loops on TRON and 20 on Ethereum.

  4. 6 in 10

    Victim wallets were first funded inside Ledger's 90-day window. More than 8 in 10 were funded from June.

  5. $10.0M

    Frozen by Tether. The thief parked another $23.9M in USDD, which Tether cannot freeze, then swapped all of it into ETH through THORChain.

  6. 7,700 ETH

    Sent into Tornado Cash from 9 to 16 October. Most of what came out went on through Zcash. The thief then moved the 2.38 million USDC we flagged before any freeze.

01 · What buyers sawWeeks after setting up a Ledger, the money was gone

You buy a Ledger and move your savings onto it. Weeks later you open the app. The balance says zero, and you never sent a thing.

That is what Ledger owners in Indonesia, Malaysia and the Philippines found on Friday 9 October. Ledger says they had bought their devices from CryptoBilis, a shop that sells them in the region. Ledger's post spells it CryptoBillis in one place, and news reports describe it as an official reseller.

Ledger is a French company that makes hardware wallets, small devices that keep the keys to your crypto away from the internet. On the same day it said it was looking into losses among users in South East Asia who bought from CryptoBilis. It asked the reseller to stop all sales, told recent buyers not to set up their devices, and told anyone who had to "consider moving assets to a new Ledger signer (with new seed)".

By then two on-chain researchers had posted the thief's addresses. tanuki42 listed eight and Specter listed ten, with losses above $86 million. Bitquery records every transfer on the chains involved, so we followed each drained wallet and each address the money reached. Our count is $102.0M from 335 wallets on six chains. It is higher because the thief also emptied wallets on Solana, BNB Chain and Polygon, and used six TRON addresses that no public list includes.

The record points to one actor who held the keys to every one of those wallets. That person practised for two weeks before the drain, and by the evening was feeding the money into a mixer, a service that hides where coins go. The chain cannot show where the keys leaked from. It can show almost everything else.

02 · The key to a crypto walletWhoever has the 24 words owns the coins

When you set up a Ledger, it shows you 24 words, called the recovery phrase. Those words are the master key to your wallet. Anyone who has them can rebuild the wallet on another device and spend from it, on any chain, without touching your Ledger.

The device's job is to make sure nobody else ever sees those words. That is why Ledger tells buyers to buy only from Ledger or an authorised seller, and CryptoBilis was listed as one. A device that arrives opened, or with words already printed on a card, should never be used.

On 10 October Ledger said one victim's device "contained an unauthorized hardware implant". That is the first confirmed cause, and it covers one device so far. On 13 October Ledger's security lab, Donjon, explained how it works. The implant sits inside the case and reads the screen. When the device shows the 24 words during setup, the implant decodes them and sends them out over the mobile network through a built-in SIM. It does not touch the secure chip or the device's software, and it does not change transactions or signatures. Before that, some well-known figures, including Binance founder CZ, had suggested tampered devices. Hardware wallets have been hit before, as in the Coldcard wallet theft we traced earlier this year. Each case had its own cause. What the chain does show is what happened once the thief had the keys.

03 · Forty-seven minutesThe thief hit six chains in one morning

The first money moved on TRON, a network that many people in Asia use to hold and send USDT, the digital dollar issued by Tether. Within 47 minutes the same thief had emptied wallets on Ethereum, BNB Chain, Polygon, Solana and Bitcoin. The full TRON record is in Bitquery's TRON data and the TRON history files on the Data Store.

The drain, hour by hourmoney taken from victim wallets every 15 minutes, 9 October 2026 (UTC)
MONEY DRAINED FROM VICTIM WALLETS, EVERY 15 MINUTES, 9 OCTOBER 2026 (UTC)TRONBitcoinEthereumBNB ChainPolygon$0M$10M$20M$30M$40M05:0007:0009:0011:0013:0015:0017:0019:0021:00first posts naming drain addressesLedger's statementBitcoin's 111 sweeps landed in one block at 05:54. Swap payouts and moves between the thief's own wallets are left out.
Bars count only money leaving a victim's wallet, in US dollars at 9 October prices. TRON bars are USDT; a small amount of TRX is left out, and Solana ($0.25M) is left out of this chart. Most of the money left before 06:00, but drains went on long after the thief's addresses were public.

Most of the money left in the first hour. Then the drains slowed. The thief kept emptying wallets through the afternoon, including after Ledger's post. At 20:49 UTC it emptied nine more in a single block, 8.8 million USDT in all. On 10 October it took 70,000 USDT more from a wallet it had already emptied.

Time, UTCChainWhat happened
24 Sep, 16:46TRONA Bybit withdrawal of 14,512 TRX reaches the wallet that funds the thief's TRON address the next day
25 Sep, 09:50 and 09:53Ethereum, TRONThe thief's two control addresses get their first money, three minutes apart
26 Sep to 7 OctTRON, Ethereum21 and 20 small test loops
9 Oct, 03:55TRONOne wallet adds a second thief key; it loses 4.3 million USDT at 09:49
9 Oct, 04:59:57 to 05:00:00TRON30 wallets add the same new key and lose control of their coins
05:07:48TRON13 wallets sign the same approval; the pulls begin
05:07:49 to 05:07:57BNB Chain, PolygonFirst drains into the thief's EVM addresses
05:07:51TRON12 more wallets sign; by 05:07:54 the thief has pulled $29.0M
05:07:59EthereumFirst Ethereum wallet signs the same kind of approval
05:09EthereumThree wallets holding about 300 ETH each are emptied
05:38 to 05:56Solana4 wallets emptied into fresh addresses, about $250,000
05:54:20Bitcoin111 wallets emptied in one block, about 203 BTC
05:55TRONA second public drain address starts taking in USDT; it gets $20.1M
09:33 to 09:49TRON$4.8M taken through an address in no public list
10:26 to 10:30TRONThe 30 taken-over wallets are emptied, $5.8M
11:26 to 12:29TRON, Ethereum$4.0M of USDT swapped through Chainflip into 1,590 ETH
12:00 and 12:24Xtanuki42 and Specter post the drain addresses
12:09 to 14:10TRONTether blocks 37 addresses linked to the theft; 20 of them hold $10.0M
13:32XLedger's statement
15:17 to 15:57EthereumThree batches, 1,254 ETH, go into Tornado Cash and come back out to six new wallets
15:20 to 18:14Ethereum, ZcashThe six wallets swap the ETH into Zcash in 41 lots
15:30TRONTether lifts the block on four THORChain vault addresses
16:37TRONAnother wallet drained
18:17 to 19:53EthereumThe coins come back out of Zcash: 384 ETH and 2.1 million USDC reach three new wallets
20:49:21TRONNine more wallets are emptied in one block, 8.8 million USDT
10 Oct, 09:42 to 11:56EthereumFour thief wallets send 1,754 ETH to fresh wallets that feed Tornado Cash
09:50 to 16:12TRON5.1 million USDD is swapped back to USDT and through THORChain into ETH
10:07 to 10:23EthereumTornado Cash run 1, 1,291 ETH
11:11 to 16:40Ethereum, ZcashAfter a Zcash round trip, NEAR Intents pays 4.29 million USDC to four new wallets
12:13 to 12:17EthereumTornado Cash run 2, 445 ETH
13:38TRONThe thief takes 70,000 USDT that reached a wallet drained the day before
17:09XLedger confirms a hardware implant in one victim's device
11 Oct, 07:15 to 12 Oct, 09:30EthereumThe five USDC wallets are emptied: 3.23 million USDC goes to a payment wallet and 1.73 million USDC is swapped into ETH
11 Oct, 08:31 to 12 Oct, 07:10TRON, Ethereum16 more THORChain swaps turn 16.8 million USDT into ETH
11 Oct, 09:51 to 16 Oct, 13:42Ethereum16 more Tornado Cash batches, about 4,710 ETH
11 Oct, 13:54 to 12 Oct, 06:36EthereumNEAR Intents pays 3.63 million USDC to three fresh wallets
11 Oct, 23:37Solana44.5 SOL is withdrawn from staking and sent on to Binance
12 Oct, 11:31EthereumOne of the three USDC wallets sends 1.25 million USDC to a new wallet, which swaps it into ETH
12 Oct, 13:25 to 17:04EthereumThe thief takes about 1,210 ETH back out of Tornado Cash
12 Oct, 13:33 and 13:52TRONThe last 2.0 million USDD goes to THORChain, to be paid out as ETH to a new address
12 Oct, 17:37 to 19:09Ethereum1,156 ETH from Tornado Cash and 788 ETH from THORChain land in that new address
12 Oct, 23:58SolanaThe other 228 SOL goes to the same Binance deposit address
13 Oct, 06:25TRONBinance pays 15,527 USDT into another drained wallet; the thief holds its key
13 Oct, 06:39XLedger explains how the implant copies the 24 words at setup
13 Oct, 12:29XMediaMarkt Saturn stops selling Ledger devices after an implant report in Germany
13 Oct, 22:03XLedger asks resellers in Southeast Asia and Hong Kong to pull its devices from sale
14 Oct, 06:34 to 08:52Ethereum, TRONThe 675 ETH from swapped USDC moves again, mostly into USDT paid out on TRON
14 Oct, 06:57EthereumA thief wallet sends 402 ETH to the wallet that paid gas to the two USDC wallets
14 Oct, 09:20 to 15 Oct, 05:33Ethereum, TRONThe 2.38 million USDC leaves the two USDC wallets and moves on, most of it to TRON as USDT
15 Oct, 06:13TRONThe drained wallet that Binance paid on 13 October sends its USDT to a wallet its owner paid in July
15 Oct, 11:20 to 13:05Ethereum, TRONThe collecting wallet's last USDC and ETH become 875,000 USDT on TRON
16 Oct, 06:03 to 08:23Ethereum, TRONThe 488 ETH bought with the 1.25 million USDC becomes 1.19 million USDT on TRON
16 Oct, 08:41 to 08:44TRONA 2.0 million USDT lot crosses three broker wallets and stops in one

04 · One person, all the keysTwenty-five wallets signed the same request within three seconds

On TRON the thief did not send each wallet's USDT straight out. First, each wallet signed an approval, a short note that lets another address move its USDT. Then one address used those approvals to pull the money.

The record shows 25 wallets signing the same approval for the same address in two blocks, three seconds apart. Every one of them paid its own small network fee. Within six seconds of the first approval, $29 million in USDT had been pulled out, 7 million USDT of it from a single wallet.

The first 40 secondswallets signing the same approval, and the USDT pulled out, 05:07:45 to 05:08:25 UTC
THE FIRST 40 SECONDS, 05:07:45 TO 05:08:25 UTCTRON wallets sign the approvalTRON: USDT pulled outEthereum wallets sign the approvalEthereum: USDT pulled out05:07:4505:07:5505:08:0505:08:1505:08:2513 wallets at 05:07:4812 more at 05:07:51, the next block1 wallet, $1.30M18 wallets, $12.8M6 wallets, $14.9M$78k$6k
Each red square is one wallet signing an approval for the same address. Each green circle is the USDT pulled out in that second, sized by amount. All 25 TRON wallets signed inside two consecutive blocks.

Eleven seconds after the first TRON approval, two Ethereum wallets signed the same kind of approval for a different address, and a third followed twelve seconds later. On Bitcoin, 111 wallets were emptied in a single block at 05:54 UTC, each into one of two addresses at nearly the same fee rate. People do not act like this. Software that already held every key does.

Eight minutes before the approvals, the thief had done something quieter. At 04:59:57 UTC, 30 other TRON wallets changed who controls them, all within three seconds, each paying a 100 TRX fee. Each change added the same new key, TEqZsE…ZxpK, with enough weight to move the coins on its own. The owner's own key was left too weak to act alone. Only a wallet's own key can make that change, so whoever made it already held all 30. The owners were locked out. At 10:26 the thief came back and emptied all 30 in under four minutes, $5.8M in USDT. One more wallet had been taken over an hour earlier, at 03:55, with a second key, which the thief's approval address later sent 100 TRX. That wallet lost 4.3 million USDT at 09:49.

There is one other way to get the same picture. A phishing site could collect signed requests from many people over a day and send them all at once. We tested that idea and rate it unlikely. A signed request to send coins names the exact amount. One business wallet sent its whole balance, 4.3 million USDT, to the thief at 09:49 UTC. It was the wallet taken over at 03:55, and its balance had not changed in between, so the thief already controlled it; nothing about it needed a request signed in advance. A phishing site would also have needed signatures from 335 wallets on six chains, and the drain was in full swing within an hour.

05 · The practice runsTwo weeks of small tests before the drain

The address that pulled the USDT on TRON was set up on 25 September. Three minutes earlier, the address that did the same job on Ethereum got its first money.

For the next two weeks both ran the same test. Send a wallet a few dollars and some gas, the coin it needs to pay network fees. Have that wallet approve. Pull the dollars back. The TRON address did it 21 times and the Ethereum address 20 times. The last two tests, on 7 October, ran 23 seconds apart.

Two weeks of practicesmall test loops run by the thief's TRON and Ethereum addresses, 25 September to 9 October 2026
TEST LOOPS BEFORE THE DRAIN: EACH DOT IS ONE SMALL PULL-BACK25 Sep27 Sep29 Sep1 Oct3 Oct5 Oct7 Oct9 OctTRON21 loopsEthereum20 loopscontrol wallets fundeddrainEach loop: send a few dollars and some gas to a wallet, have it approve, pull the coins back.
Each dot is the thief's address pulling a few dollars back from a wallet it had funded minutes earlier. The two addresses got their first money three minutes apart on 25 September.

One test, on 2 October, pulled its three dollars into an address that later took $36 million on the day of the drain. The plan was in place a week before anyone lost a coin.

06 · How much was takenMore than first counted, on more chains

We counted only money that left a victim's wallet. That leaves out swaps the thief made later and money moved between the thief's own wallets, which some early totals counted twice.

Where the money was takenmoney taken from victim wallets, by chain, in US dollars at 9 October prices
MONEY TAKEN FROM VICTIMS, BY CHAIN (US DOLLARS AT 9 OCTOBER PRICES)TRON$79.3MBitcoin$16.8MEthereum$3.68MBNB Chain$1.45MPolygon$0.58MSolana$0.25M
Victim wallets only. Full histories for BNB Chain, Polygon and Solana are on the Bitquery Data Store, like the other three chains.
ChainVictim walletsTakenUS dollars
TRON15179.0M USDT, plus some TRX$79.3M
Bitcoin122203.8 BTC$16.8M
Ethereum331,230 ETH, $577,000 in USDT and USDC, 10 billion PEPE$3.7M
BNB Chain27$1.41M in USDT and USDC, 59.8 BNB$1.45M
Polygon13579,773 USDC$0.58M
Solana41,355 SOL and 100,000 USDT$0.25M
All chains335Some wallets were drained on more than one EVM chain, so 58 EVM wallets in all$102.0M

On Bitcoin, Ethereum and TRON, the ten public addresses received $85.4M, close to Specter's estimate. Three amounts are in no public tally. The thief took $2.0M on BNB Chain and Polygon, into the same three addresses it used on Ethereum. On TRON it used six more addresses to drain $15.1M, three of them after Ledger's post. The last, $0.25M, came from Solana.

Between 05:38 and 05:56 UTC the thief emptied four Solana wallets of 1,355 SOL and 100,000 USDT into three fresh addresses. Through Relay.link and NEAR Intents the money became ETH and landed in three of the thief's Ethereum wallets. The two services' public records tie each deposit to its payout. A fifth wallet, which the thief swept of a few cents of SOL at 06:05, had 272 SOL staked. Whoever holds its key can unstake those coins and take them, which takes up to about a day.

One public list also names a third Bitcoin address. It behaved differently, and we leave it out. It started two days earlier, drained old wallets one at a time, paid much lower fees and shared no wallets with the main two. It took 9.6 BTC from 154 addresses, about $0.8M of the $85.4M above. Early on 10 October it sent all of it on to fresh addresses.

07 · Who lost moneyMost wallets were new, but not all fit Ledger's 90 days

Ledger's advice covers people who bought from the reseller in the last 90 days. We checked when each TRON, Bitcoin and Ethereum victim wallet first received money. Of those wallets, 6 in 10 got their first coins inside that window, and more than 8 in 10 got them from June onward.

How new were the victims' wallets?month each victim wallet first received money, as a share of wallets per chain
WHEN EACH VICTIM WALLET FIRST RECEIVED MONEY (SHARE OF WALLETS, BY CHAIN)2024–2025Jan–May 2026June 20261–10 JulyLast 90 daysTRON124390151 walletsBitcoin2210101367122 walletsEthereum32833 walletsLedger asked people who bought from the reseller in the last 90 days to act.
Teal is Ledger's 90-day window. June 2026 is the large amber block, just before it. A wallet's first payment is a clue to when its owner started using it. It does not prove when the device was bought.

June stands out. In that month alone, 43 TRON victim wallets got their first coins, just before the 90-day line. A wallet's first payment is not the day its owner bought a device, so this is not proof. But it suggests the risk may reach back about four months, and owners who bought in June should treat Ledger's advice as theirs too.

The money came from the places you would expect for buyers in the region. Bitcoin victims had been paid from Binance, Indodax in Indonesia, OKX and Bybit. Two victims were already named on X by Lookonchain, and the record backs both. One TRON wallet, first funded on 15 September, lost 7 million USDT in the first wave. One Bitcoin wallet got 80 BTC on 29 September and lost all of it in the block at 05:54.

At least one victim was a business. One drained TRON wallet had taken in 33.5 million USDT since 1 October and paid most of it out again to 29 different wallets, the pattern of a business.

Not every victim was an ordinary buyer. On 15 October Chainalysis reported that one of the larger Bitcoin victims was running a task scam, in which people were paid to fake sales and reviews and then told to pay in money of their own. The part we can check on the chain matches. Three of the drained Bitcoin addresses each got two equal payments from one wallet on the evening of 22 September, and the thief emptied all three in the big Bitcoin block of the drain, 60 BTC in all, about $4.9M.

08 · Where the money wentInto bridges, swap services and a stablecoin Tether can't touch

Almost all the TRON money was in USDT, which Tether can freeze. The thief moved fast to get it out of reach, and in the first hours the dollars scattered.

Where the stolen dollars went firstfirst service or wallet reached by the USDT stolen on TRON, in millions
FIRST STOP FOR THE STOLEN USDT ON TRON (MILLIONS OF DOLLARS)Swapped into USDD23.7USDT0 bridge to Ethereum20.0Frozen by Tether10.0Relay.link9.4Chainflip4.6Unnamed high-volume service3.7HiFiSwap3.4THORChain3.0NEAR Intents1.6Bridgers0.6Other0.2Two services sent some money back and it was sent on again, so the bars add to slightly more than the 79.0M stolen.
Green is frozen by Tether, red was turned into USDD, which Tether cannot freeze. Blue went on through a bridge or swap service, most of it ending up as ETH.

The biggest share, 20 million USDT, crossed to Ethereum in 40 equal pieces through the USDT0 bridge, a service that moves USDT between chains. Five fresh wallets swapped it on UniswapX for 7,994 ETH. Another 23.7 million was swapped into USDD, a different stablecoin that Tether cannot freeze. Most of the rest went through swap services such as Relay.link, Chainflip, HiFiSwap and NEAR Intents, which paid the thief back in ETH. We traced the same pattern in the NEAR Intents theft and the $110 million TRON laundering case. Each payout here can be followed wallet by wallet with the Bitquery MCP.

09 · Where it sat on 10 OctoberAbout $97M could still be found

Where the $102.0M sat on 10 Octobersplit of everything taken, at 07:00 UTC on 10 October
WHERE THE MONEY SITS AT 07:00 UTC ON 10 OCTOBER$16.8M$42.9M$23.9M$10.0MBitcoin, never moved: $16.8METH in thief wallets: $42.9MUSDD on TRON: $23.9MUSDT frozen by Tether: $10.0MFound again after Tornado Cash: $3.07MSpent or not yet traced: $5.34METH, BTC and BNB at 9 October prices; USDT and USDD at $1. Swaps and fees mean the parts are an estimate of the whole.
Violet is the ETH that went through Tornado Cash and Zcash and came out in three new wallets. Grey is money spent through other services or not yet followed to the end. The ETH in thief wallets was mostly bought with the stolen USDT.

These are the balances at 07:00 UTC on 10 October. The Bitcoin had not moved since it was taken. The largest pile was about 17,247 ETH in 16 wallets on Ethereum, most of it bought with the stolen USDT. About 1,590 ETH came through Chainflip, a swap service, and nearly all of that sits in one wallet that has never sent a transaction. The 23.9 million USDD sat in nine wallets on TRON. That is a little more than the USDT swapped in section 08, because the thief also turned stolen TRX into USDD. The coins that went through Tornado Cash sat in three more wallets: 384 ETH and 2.1 million USDC. That left about $5M that had been spent through other services or that we have not yet followed to the end. By 14:40 UTC on 16 October, the money we can find had fallen to $81M. You can watch any of these wallets yourself with the Bitquery MCP, and the full histories are sold as files for Bitcoin and Ethereum.

10 · Tether's freeze, then the mixer$10.0M frozen, and the mixed coins found again

Tether can block any address that holds its USDT. About ten minutes after the first public post, it started blocking addresses linked to the theft, 37 of them over the next two hours. Twenty still held half a million USDT each, so $10 million is now stuck. A block stops the coins moving. It does not send them back to victims, though Tether can later destroy blocked coins and reissue them. News sites reported the freeze the same afternoon.

At 15:30 UTC Tether lifted the block on four wallets. They are THORChain's TRON vaults, the addresses where the THORChain swap service takes in USDT from many users. The thief had sent them about $3.0M to swap into ETH, and the ETH went to two wallets that then funded several of the thief's holding wallets.

The afternoon and evening of 9 Octoberpublic posts, Tether's actions, the mixing and the coins coming back, 11:30 to 20:00 UTC
THE AFTERNOON AND EVENING OF 9 OCTOBER (UTC)12:0013:0014:0015:0016:0017:0018:0019:0020:0012:00 tanuki42 posts 8 drain addresses12:09 Tether starts blacklisting12:24 Specter posts 10 addresses13:32 Ledger's statement14:10 Tether's last blacklisting, 37 in all15:17 Tornado batch 1: 389 ETH15:30 Tether unblocks 4 THORChain vaults15:42 Tornado batch 2: 434 ETH15:54 Tornado batch 3: 430 ETH16:37 Another wallet drained18:17 Mixed coins reach new wallets19:53 Last payout: 384 ETH, 2.1M USDC
Tether acted about ten minutes after the first public post. The mixing started less than two hours after Ledger's statement, and the same coins reached three new wallets that evening.

From 15:17 UTC the thief began sending ETH into Tornado Cash, a mixer that breaks the link between the wallet that pays in and the wallet that later takes out. Three batches of about 400 ETH each went in within 40 minutes, 1,254 ETH in all. The mixer hid little. Withdrawals matching each deposit, pool for pool, went to six fresh wallets, the first of each batch within about a minute.

Those wallets swapped the ETH into Zcash in 41 lots. Zcash can hide the sender, receiver and amount of a payment. But 39 of the 41 lots came out again as two equal payments, and their amounts match the lots that went in, down to the smallest unit of Zcash. The other two were tiny test lots. By 19:53 UTC the coins had been swapped back and sat in three new Ethereum wallets: 384 ETH and 2.1 million USDC. Circle, which issues USDC, could freeze that part. A mixer means the link cannot be proven outright, but we rate it strong. The analyst YFarmX found this path first, and we checked it against our own data. Our Tornado Cash audit explains how the mixer works.

11 · Since 10 OctoberThe stablecoins went into ETH, and the mixing went on

The money we can find on the chain fell from $97M at our first count to $81M six days later. Most of the difference is money still passing through Tornado Cash and Zcash, or paid to a busy payment wallet and swap services.

WhatAt 07:00 UTC on 10 OctoberAt 14:40 UTC on 16 October
Bitcoin in the two drain addresses, never moved203.8 BTC203.8 BTC
ETH in the thief's wallets17,247 ETH21,539 ETH
USDD on TRON, which Tether cannot freeze23.9 million USDDnone
Unfrozen USDC and USDT in the thief's own wallets2.1 million USDC200,000 USDC and 93,000 USDT
USDT frozen by Tether$10.0M$10.0M
ETH sent through Tornado Cash so far1,254 ETHabout 7,700 ETH
Can still be found on the chain$97M$81M

On 10 October four of the thief's Ethereum wallets sent out 1,754 ETH. One of them, 0xc322…4065, was missing from our first count. It got 794 ETH the day before from the same two wallets that paid three of the thief's known holding wallets, and our figures now include it. Most of that ETH went into Tornado Cash in two runs. Matching withdrawals started within minutes and went on to NEAR Intents in 28 lots, which swapped each lot into Zcash. Each lot came out of Zcash's private pool as two equal halves that together kept 99.75% of the lot. NEAR Intents then paid USDC for each half into four new wallets, 4.29 million USDC in all. YFarmX spotted two of the four wallets first.

That USDC did not wait for Circle. Within two days all five USDC wallets had emptied, including the first one. Most of it, 3.23 million USDC, went to a busy payment wallet that had also taken 1.06 million USDC from the thief a day earlier. The thief swapped another 1.73 million USDC into 675 ETH and sent the rest to the swap services Aeroswap and Bridgers. The ETH moved again on 14 October, most of it into USDT on TRON through the same payment wallet.

The stablecoins on TRON took another road. The thief turned its USDD back into USDT through single-use addresses and sent it to THORChain's vaults, each time with a note naming the Ethereum address that should get the ETH. Counting the swaps of stolen USDT on the first day, it sent THORChain 26.9 million USDT in 34 swaps, and THORChain paid out 10,636 ETH. Most of that ETH, 8,934 ETH, still sits in seven new wallets, and some of it went into Tornado Cash. One of the seven also holds ETH that came back out of Tornado Cash. The thief sent its last 2.0 million USDD the same way, so no USDD is left on TRON.

The mixing went on. Over the next six days the thief put about 4,710 ETH more into Tornado Cash. By our last check, 2,290 ETH had come back out and gone through NEAR Intents into Zcash's private pool.

On the afternoon of 12 October the thief took about 1,210 ETH back out of Tornado Cash. Most of it passed through a middle wallet into the new address that THORChain paid for the thief's last USDD swaps. That address now holds 1,944 ETH. So the withdrawals we had matched to the thief by their pattern meet its THORChain money in one wallet. On 13 October the thief also swept the last ETH, worth under $200, from two of its public drain addresses on Base into the wallet that fed Tornado Cash that morning, which puts the drain keys and the Tornado runs in one person's hands. Since 15 October it has also used Railgun, another privacy tool, though only for small sums. Nothing has come back out of Tornado Cash in the thief's pattern since 12 October. We estimate that about 1,190 ETH of its coins is still inside Tornado Cash.

Three fresh wallets got what came out of Zcash. NEAR Intents paid them 3.63 million USDC on 11 and 12 October, each batch starting within hours of one of the thief's Zcash deposits, as on 10 October. For one of the three, each payment matches one half of a pair of equal Zcash withdrawals. By the next morning one more pair of the same kind had come out, and together the pairs add up to 99.6% of what the thief put into Zcash that evening. Around midday on 12 October another of the three sent its 1.25 million USDC to a new wallet, which swapped it into ETH through the Bitget Wallet route the thief had used that morning. The third got gas four minutes later. Two days on, the wallet that paid that gas took 402 ETH straight from one of the thief's own wallets, and it also paid gas to the wallet whose payments matched the Zcash halves. On 14 October the wallet that had cashed out sent its leftover ETH to the wallet that collected the third one's USDC, moments after the third did the same. That ties all three to the thief.

Circle did not freeze the 2.38 million USDC that the other two wallets held, and the thief then moved it. Most of it went to TRON as USDT through the busy payment wallet, which takes USDC on Ethereum and pays USDT on TRON, and through Bridgers, deBridge and Aeroswap. With the ETH from the swapped USDC, about 2.77 million USDT reached new TRON wallets. From there most of it went into busy TRON wallets that behave like brokers: they take a client's money, round it up and pay it out in pieces. The thief swapped 554,000 USDC into ETH. On 15 and 16 October the thief sent the rest of the collecting wallet's USDC and ETH, and the 488 ETH bought with the 1.25 million USDC, to TRON as another 2.06 million USDT. Most of it went through a chain of broker wallets within minutes. One lot of 2.0 million USDT stopped in a single storage wallet of that network, which also holds other clients' money; between 0.6 and 2.0 million USDT of what it holds is the thief's. Some of it may have reached Binance deposit addresses: up to 0.37 million USDT by the tracing rule we use, but close to none if the oldest money in each broker wallet is counted as leaving first. At our last check 200,000 USDC and 93,000 USDT still sat in the thief's own wallets, where Circle and Tether can freeze them.

One victim lost money again. The thief still holds the key of a TRON wallet it emptied in the drain. That wallet's usual payer had sent it USDT every day since 4 October and kept paying after the drain. The day after the drain, 70,000 USDT arrived in the afternoon, and ten minutes later the thief pulled it out through the USDT approval the wallet had signed the day before. No payment has arrived since. On 13 October Binance paid USDT into another drained wallet, and the thief holds that key too. Two days later, after a second payment arrived, the wallet itself sent all its USDT to a wallet its owner had paid in July, most likely the owner moving it out. A drained wallet stays in the thief's hands, so anything sent to it can be taken again.

On Solana, someone using the key of the fifth wallet, most likely its owner, unstaked all six of its stake accounts. Binance had sent the wallet a little SOL for fees four minutes before the unstaking began. Late on 11 October the first 44.5 SOL went to a Binance deposit address first used in February 2024, at the exchange that had also paid this wallet in April. The other 228 SOL went the same way a day later.

Nothing else moved: not the Bitcoin, and nothing on BNB Chain or Polygon. Apart from the one victim above, we found no new drains.

12 · The leadsWhere investigators could ask for records

The chain can't name the thief. It does show places that keep records about their users.

LeadWhat the chain showsHow strong
BybitA withdrawal of 14,512 TRX on 24 September (b284a2…686e) reached the wallet that set up the thief's TRON address the next dayStrong on the money flow
AeroswapPaid 0.031 ETH five minutes after that withdrawal to 0x444f…2d99, which set up the thief's Ethereum addressModerate
Circle and Tether200,000 USDC sits in 0xd151…bdaf and 0xe4b7…2f3a; 93,000 USDT in TLocic…U9PsStrong link; Circle and Tether can freeze
THORChainThe thief swapped 26.9 million USDT into ETH through THORChain's TRON vaults in 34 swaps from 9 to 12 October. Each swap names the Ethereum address that gets the ETHStrong on the money flow
CCE CashA hot wallet that our labels name CCE Cash funded the thief's TRON gas wallets on 11 and 12 OctoberModerate: the exchange knows who withdrew
HitBTC313 ETH from the mixed coins reached six HitBTC deposit addresses on 10 OctoberModerate: the account may belong to a swap service
A cash desk0x08ec…31a7 takes USDC and USDT on Ethereum and pays USDT on TRON from TZG47z…MrvF, which also took $3.7M of the thief's USDT on 9 October. The thief sent the desk 1.06 million USDC on 10 October, 3.23 million USDC on 11 and 12 October $2.39M on 14 October and $1.66M of USDC and ETH on 15 and 16 OctoberModerate: the desk can name the client behind each payout; it also pays a Bitget deposit address
Chainflip$4.0M of USDT went in through deposit channels opened in Chainflip's own web app; Chainflip's TRON vault is TEcDij…Y4XC. It paid out 1,590 ETHChannel records name the payout wallets
NEAR IntentsHandled both ends of the Zcash swaps from 9 to 12 October. It paid the seven wallets that got the mixed coins on 9 and 10 October, and three more on 11 and 12 October that later paid or took gas from the thief's own walletsOrder records link each deposit to its payout
TRON brokersBusy wallets such as TQvTAS…jbXy and TWRAED…QrHQ took most of the thief's new USDT from 14 to 16 October and paid it on in pieces. On 16 October a 2.0 million USDT lot crossed three of them in three minutes and stopped in TW3myE…i6PM, which still holds between 0.6 and 2.0 million USDT of the thief's money among other clients' funds. Up to 0.37 million USDT may have reached Binance deposit addresses, depending on how pooled money is countedModerate: they serve many clients; Tether could freeze the storage wallet
Swap servicesRelay.link, HiFiSwap, NEAR Intents, Mayan, LI.FI, Bridgers and ChangeHero (47 ETH on 10 October) each handled part of the moneyOrder records may hold refund addresses and other details
Gate.io60 BNB reached a Gate.io deposit through a trader's wallet that had paid that deposit 55 times since July 2024Weak: the trader looks like a paid counterparty

Circle and Tether can still act, on less money than before. The thief moved the USDC we had flagged before Circle could freeze it. About $0.3M still sits in the thief's own wallets. Most of the USDT the thief has sent to TRON since it moved the USDC went to brokers there, who may know their clients. One broker wallet still holds between 0.6 and 2.0 million USDT of it.

The strongest lead to the person behind this is how the gas was paid for. The TRON address that ran the drain was funded from an address that had withdrawn 14,512 TRX from Bybit the day before. An exchange that sends a withdrawal knows the account it came from. The Ethereum side was funded through Aeroswap, an instant swap service, five minutes after that withdrawal. Other leads are weaker. Money from an exchange shows where funds came from. It does not show who owns the wallet that got them. The same caution applies to a trader who received the thief's BNB and moved it to Gate.io. We show how such dead ends happen in our piece on an $812 million wallet nobody flagged.

On the day of the drain, none of the thief's wallets carried a theft label in the label sets we use, so an exchange screening deposits against such labels would not have caught this money. Late on 12 October our label set marked 32 of the 37 TRON wallets Tether had blocked. The thief's other wallets, including those holding the ETH, still carry no theft label.

13 · What we know and what to doOne implant confirmed. The rest is still open

Here is what the chain settles. One actor held the keys to every drained wallet. It tested the method for two weeks, locked 31 owners out of their TRON wallets, then ran the drain across six chains in under an hour. Here is what it can't settle: how each wallet's keys leaked. Ledger has found an implant in one device and has shown how it copies the 24 words at setup. Ledger says all confirmed losses involve devices sold through CryptoBilis, and it is looking into reports of implants in devices bought elsewhere. On 13 October the electronics chain MediaMarkt Saturn stopped selling Ledger devices after a customer in Germany reported an implant. Ledger said no loss of funds was reported in that case. Later that day Ledger asked resellers in Indonesia, Singapore, Thailand, the Philippines, Vietnam, Malaysia and Hong Kong to stop selling its devices and take them off the shelves while it finds out where in the supply chain the tampering happened. Whether every drained wallet came from a tampered device, or some keys leaked another way, will come from Ledger's look at more devices. Ledger has not confirmed how much was lost in total, and has not checked our count.

If you bought a Ledger from CryptoBilis, follow Ledger's advice, even if you bought it before July. Don't set up a device you have not used yet. If you already use one, set up a new device with a new recovery phrase and move your coins to it. Never use a device that arrives with words already written down. If you hold USDT on TRON, check your wallet's permissions in a block explorer. A key you do not recognise means someone else now controls the wallet. If your wallet was drained, ask anyone who pays into it to stop, because the thief still holds the key. Ledger says it will never call or message you or ask for your 24 words, and scammers often target victims after a theft like this. Similar lessons came out of the Bitget hack and the TradeWiz drain: once someone else holds your keys, the coins can be gone in seconds.

Claim on XWho said itWhat the chain shows
Losses above $86MSpecterClose: the ten public addresses got $85.4M. All in, we count $102.0M
Tether froze USDT linked to the theftsNews reportsConfirmed: $10.0M frozen in 20 wallets
A victim lost 7M USDT three weeks after buyingLookonchainThe wallet was first funded on 15 September and lost 7,001,000 USDT at 05:07:54
A victim lost 80 BTCLookonchain80 BTC arrived on 29 September and was swept in the block at 05:54
The theft wallets are not labelled anywhereSecurity researcher TayTrue of the label sets we checked, on the day
Devices were tampered withCZ and othersLedger found an implant in one victim's device on 10 October and explained how it works on 13 October. The chain cannot test the rest
The Tornado Cash coins went through Zcash into three new walletsYFarmXStrong: 74 notes out match 74 in, the Zcash amounts match to the smallest unit, and the coins reached three new wallets as 384 ETH and 2.1 million USDC. Two of the three paid out on 10 October
2,810 ETH went through Tornado Cash in three runs and came out as USDC in three walletsYFarmXPartly right: 2,810 is the withdrawals their tool matched. We count 2,990 ETH in and matched all of it out, in three batches on 9 October and two runs on 10 October. Two more wallets got USDC from the 10 October runs, so five wallets got 5.35 million USDC, which the thief moved on 11 and 12 October
Theft now about $91M, 213.42 BTCAlex ThornClose: his Bitcoin count includes a third address that we treat as a separate operation. Without it, 203.8 BTC

14 · How we did thisMethod

We started from the ten addresses posted by tanuki42 and Specter. We read every payment into and out of them on TRON, Bitcoin, Ethereum, BNB Chain and Polygon from Bitquery's data, and followed the money until it reached a service, a frozen wallet or a wallet that has not moved. On Solana, which no public list covered, we matched Relay.link and NEAR Intents payouts into the thief's Ethereum wallets to Solana deposits, then traced those deposits back to the wallets that were drained. Solana victims whose money took another route would not show up this way. For swaps we also read the public order records of Chainflip, Relay.link and NEAR Intents, and for Zcash the visible side of each payment. We left out money the thief moved between its own wallets, payouts from swap services, and fake tokens sent by scammers who copy addresses. Dollar values use prices from the morning of 9 October. A second, independent check rebuilt every figure from the raw data without seeing our notes. The data stops at 14:40 UTC on 16 October, except for the dated moves in the box at the top. The thief may have moved since. Our address poisoning study explains why copied addresses fill these wallets with fake transfers, and Bitquery's address labels are the label set we checked first.

Limits on these figures

Sections 01 to 10 use balances read at 07:00 UTC on 10 October. Section 11 uses balances read at 14:40 UTC on 16 October. The thief can move money at any time.

The 16 October figure leaves out about 1,190 ETH we estimate is still in Tornado Cash, the part of the 4,546 ZEC sent into Zcash that has not come back out, and 190,000 DAI in two wallets we tie to the thief less firmly.

The busy TRON wallets that took most of the thief's USDT from 14 to 16 October also hold other people's money. The 16 October figure counts only the thief's own wallets, not the 0.6 to 2.0 million USDT of the thief's that sits in a broker's storage wallet.

We estimate the ETH left in Tornado Cash by matching the thief's withdrawals to its deposits note by note. It would be lower if the thief also used a withdrawal style we did not recognise.

We found the 20:49 drain on 12 October. Its nine wallets were funded by what looks like one owner, and we count them as nine wallets.

Our first count missed one holding wallet, 0xc322…, which held 794 ETH on 9 October, and a change wallet with 12 ETH. Both are now in the figures.

The $102.0M counts the drain of 9 October. The 70,000 USDT taken on 10 October is not in it.

Tornado Cash and Zcash hide the direct link between the coins that went in and the coins that came out. We tie the seven end wallets of 9 and 10 October to the thief by matching amounts and times, which is strong evidence but not proof. We tie the three wallets paid on 11 and 12 October to the thief through direct payments. A gas wallet that took 402 ETH from a thief wallet paid the gas of two of them. The third sent its leftover ETH to the thief wallet that collected one of the other two's USDC. The 402 ETH came from USDC that one of the 10 October end wallets swapped, so this tie is as strong as the tie for those wallets.

THORChain's TRON vaults handle many users' swaps. We count only the payments that carry the thief's swap instructions as the thief's.

Dollar values use prices from the morning of 9 October: BTC $82,300, ETH $2,490, TRX $0.33, BNB $742, SOL $110.40. USDT, USDC and USDD are counted at $1.

We count money that left a victim's wallet. Payouts from swap services into the thief's addresses, money the thief moved between its own wallets, and fake tokens sent by scammers who copy addresses are left out.

A victim wallet is not a victim person. One owner can have several wallets, and some EVM wallets were drained on more than one chain.

On TRON and Solana we count a wallet as a victim when it lost at least $10 in any coin. A few TRON wallets lost less; their coins are in the dollar total but not in the wallet count. On 16 October we applied that rule to 11 TRON wallets that lost mostly TRX, which raised the TRON count from 140 to 151 and the total from 324 to 335; the dollar total did not change. On Solana the thief also swept four near-empty wallets of a few cents each. On the EVM chains we count every wallet the thief swept, however small the amount.

The first payment into a wallet tells us when it started to be used. It does not tell us when its owner bought a device.

We also checked the thief's Ethereum addresses on 14 other EVM chains, and looked for drained victim wallets on XRP, Cardano, Litecoin, Dogecoin, Dash and Zcash. We found only a few hundred dollars, on Base and Arbitrum, and left it out.

A fifth Solana wallet, swept of a few cents and not in our count, had 272 SOL staked in six stake accounts on 10 October. By the early hours of 13 October all of it had gone to a Binance deposit address, most likely sent by its owner.

Exchange and service names come from Bitquery's address labels and from how the money behaves. A payment from an exchange shows where money came from. It does not show who owns the wallet that received it.

We could not find the source of a few small payouts into the thief's Ethereum wallets, and we have not followed every payment past the first service it reached.

WhatAddress or transaction
TRON drain address (public)TK6DWN…XT6C
TRON drain address (public)TBkcUM…s9d9
TRON drain address (public)TCGE3x…MNsW
TRON drain address (public)TSDWtu…Ar5a
TRON drain address (not in public lists)TYohhJ…UfGj
TRON drain address (not in public lists)TELKRM…ZznW
TRON drain address (not in public lists)TQoTZG…P9FQ
TRON drain address (not in public lists)TRTVHp…2bzE
TRON drain address (not in public lists)TRMHXE…GpDQ
TRON drain address for the 20:49 drainTRu643…D2pY
TRON USDD wallet (from the 20:49 drain)TFxdck…ciNP
TRON USDD wallet (from the 20:49 drain)TMGrwE…mZcw
Thief's TRON control addressTAzdU7…CSYQ
Key added to 30 TRON wallets at 04:59:57TEqZsE…ZxpK
Wallet that funded it from BybitTWGHw7…Bf3E
EVM drain address (public; also used on BNB Chain and Polygon)0x69c8…7841
EVM drain address (public; also used on BNB Chain and Polygon)0x0336…4f7a
EVM drain address (public; also used on BNB Chain and Polygon)0x83ae…a599
Thief's Ethereum control address0x3818…f8f2
Solana collection address (passed the SOL to MhhUk3…)6Lx2Ma…TVUy
Second Solana address (sent to Relay.link)MhhUk3…qevh
Solana collection address (sent to NEAR Intents)CA9Epb…B7Ym
Solana collection address (sent to NEAR Intents)HuRSMp…Q4mk
ETH holding wallet0x468b…2a4e
ETH holding wallet0xfa4e…b0e2
ETH holding wallet0x064a…7160
ETH holding wallet0xb88d…1856
ETH holding wallet0x131c…fa6a
ETH holding wallet0x40eb…e88c
ETH holding wallet (small; emptied 9 October)0x9400…40d6
ETH wallet found 10 October (emptied 11 October)0xc322…4065
ETH holding wallet (THORChain, via a forwarding wallet, 10 October)0x3b2f…fd70
ETH holding wallet (THORChain, via a forwarding wallet, 11 October)0x5a71…b726
ETH holding wallet (paid through THORChain, 11 October)0xa2f0…7a87
ETH holding wallet (THORChain, via a forwarding wallet, 11 October)0x6170…51e2
ETH holding wallet (paid through THORChain, 12 October)0x88bd…b929
ETH holding wallet (paid through THORChain, 12 October)0x5054…678b
Wallet that held ETH from swapped USDC (emptied 14 October)0x89b0…f964
Wallet that held ETH from swapped USDC (emptied 14 October)0xda9e…9fc2
ETH change wallet for the Tornado Cash runs0xe8cb…8879
ETH holding wallet (paid by Chainflip)0x9888…0444
ETH wallet paid by Relay.link (emptied 11 October into Tornado Cash)0x3001…f441
Small ETH wallet (paid by Chainflip)0x9862…6481
Small ETH wallet (paid by Chainflip)0xbdb5…c393
Small ETH wallet (paid by Chainflip)0x03fa…2fc0
Wallet that got mixed coins after Zcash (emptied 10 October)0xc164…9545
Middle wallet for its 1.06 million USDC0x85dd…1a7e
Wallet that got mixed coins after Zcash (emptied 11 October)0xe2fc…9c11
Wallet that got mixed coins after Zcash (emptied 10 October)0x33fd…700b
Wallet that got mixed coins after Zcash, 10 October (emptied 11 or 12 October)0x816d…cdf8
Wallet that got mixed coins after Zcash, 10 October (emptied 11 or 12 October)0xba73…f3f3
Wallet that got mixed coins after Zcash, 10 October (emptied 11 or 12 October)0x0c54…ee52
Wallet that got mixed coins after Zcash, 10 October (emptied 11 or 12 October)0x901b…9855
ETH wallet paid by THORChain and fed from Tornado Cash, 12 October0xb6af…a9c8
Middle wallet between Tornado Cash and 0xb6af…, 12 October0x04e8…7203
Wallet holding ETH withdrawn from Tornado Cash, 12 October0x6bc4…e9c7
USDC wallet paid by NEAR Intents, 11 October (emptied 14 October)0x4600…2a6a
USDC wallet paid by NEAR Intents, 11 and 12 October (emptied 14 October)0x3635…ee17
Wallet that held ETH from 0x17e1's swapped USDC (emptied 16 October)0xabb2…28b4
Gas wallet of both USDC wallets; took 402 ETH from a thief wallet0x5a93…5108
Wallet that collected 0x4600's USDC (emptied 15 October)0x50b4…1e8b
Wallet holding 100,000 USDC, 14 October0xd151…bdaf
Wallet holding 100,000 USDC, 14 October0xe4b7…2f3a
TRON wallet that collected the thief's USDT (emptied 15 October)TBJfyg…7pgp
Wallet that sold 0xabb2's 488 ETH, 16 October0x06e5…a714
TRON wallet that collected the thief's USDT, 15 and 16 OctoberTGr5w5…DnME
TRON broker storage wallet holding thief USDT, 16 OctoberTW3myE…i6PM
Tornado Cash feeder, 15 October0x2e3f…3351
Tornado Cash feeder, 16 October0x9121…f9e8
TRON wallet holding the thief's USDT, 14 OctoberTLocic…U9Ps
USDC wallet paid by NEAR Intents, 11 October (emptied 12 October)0x17e1…5d78
Bitcoin drain address (public)bc1qjq…49dl
Bitcoin drain address (public)bc1qqn…jtm9
Bitcoin address in one public list, likely a separate operationbc1qgq…d26n
Run it yourself

Follow the stolen money in plain English

Every transfer, approval and balance in this story comes from Bitquery's data for the six chains involved. The Bitquery MCP server puts that data behind an AI assistant, so you can ask where a wallet's money went or what labels an address carries, without writing the query yourself. The full histories are also sold as files on the Bitquery Data Store, for TRON, Bitcoin, Ethereum, Solana, BNB Chain and Polygon.

Watch the wallets holding 21,539 ETH and 203.8 BTCTrace where any wallet's money came from and wentCheck an address against Bitquery's labelsRun your own SQL over TRON, Bitcoin, Solana and EVM transfers
Explore Bitquery MCP →Figures measured on 9 October 2026 across all six chains. Balances read at 07:00 UTC on 10 October and updated at 14:40 UTC on 16 October.

FAQ

Was Ledger hacked?

Ledger says its own systems show no sign of a breach. On 10 October it said one victim's device "contained an unauthorized hardware implant", and on 13 October it said the implant copies the 24 words off the screen during setup. Wallets of people who bought Ledger devices from the reseller CryptoBilis were drained by someone who held their keys, and CryptoBilis has stopped selling hardware wallets while Ledger investigates.

What is CryptoBilis?

CryptoBilis, also spelled CryptoBillis, is a crypto hardware shop that sells Ledger devices in Indonesia, Malaysia and the Philippines. News reports describe it as an official Ledger reseller. On 9 October 2026 Ledger asked it to stop all sales and shipments of Ledger devices while it investigates.

How much was stolen in the Ledger CryptoBilis hack?

We count $102.0M taken from 335 wallets on TRON, Bitcoin, Ethereum, Solana, BNB Chain and Polygon. Most of it was USDT on TRON. Early counts of about $86 million covered only the ten public addresses.

Can a Ledger be hacked?

The device is built so the recovery phrase never leaves it. If someone else gets that phrase, they control the wallet without the device. That can happen through a tampered device, a pre-printed recovery card, a fake app or a phishing site. In this case the thief clearly held the keys. Ledger found a hardware implant in one victim's device that reads the 24 words off the screen during setup and sends them out over the mobile network. Whether every key leaked that way is not yet known.

Is my Ledger safe if I bought it from a reseller?

If you bought from CryptoBilis, follow Ledger's advice: don't set up an unused device, and move your coins to a new device with a new recovery phrase. Many victim wallets were first funded in June 2026, before Ledger's 90-day window, so earlier buyers should take the same step. MediaMarkt Saturn in Europe also stopped selling Ledger devices on 13 October after one implant report, while the investigation continues. If you bought a Ledger from any reseller in Southeast Asia or Hong Kong, Ledger has asked those sellers to pull their stock, so treat an unused device from them with the same care.

Can the stolen crypto be recovered?

About $10 million in USDT is frozen by Tether, which can later reissue frozen coins. The Bitcoin has not moved, and most of the ETH still sits in known wallets. The first USDC that came out of the mixers was moved on before it could be frozen, and the thief later moved the USDC we flagged as well. About $0.3M in USDC and USDT still sits in the thief's own wallets, where Circle and Tether can freeze it. The thief sent all its USDD through THORChain to be swapped into ETH.

Is this the same as the 2023 Ledger hack?

No. In December 2023 a fake version of Ledger's Connect Kit code library drained people who used certain crypto websites for a few hours. In 2020 a breach exposed customer emails and home addresses. This case is different: the thief held the recovery keys of hundreds of wallets and emptied them directly.

Legal disclaimer

This article is provided for informational and educational purposes only and reflects analysis of publicly available on-chain data as of the dates indicated. It does not constitute legal, financial, compliance, or investment advice, and nothing in it is a recommendation to buy, sell, or hold any token or asset.

The findings describe transfers, approvals and balances observed on TRON, Bitcoin, Ethereum, Solana, BNB Chain and Polygon between 24 September and 16 October 2026. Attributions come from Bitquery's address labels and from on-chain behaviour; they may be incomplete or incorrect and may be revised as more data becomes available.

References to Ledger, CryptoBilis, Tether, Bybit, Binance, Gate.io, Aeroswap or any other named company, service or protocol describe what the record shows about addresses and transactions linked to them. They are not statements about any party's security practices, compliance or conduct, and nothing here asserts that any named party acted unlawfully or negligently. The wallets that received the drained funds are described by their behaviour and attributed to nobody.

Nothing herein should be relied upon as a definitive determination of fact. Readers should conduct their own independent verification before taking any action. The authors and publisher accept no liability for any loss or damage arising from reliance on this material. All trademarks and company names are the property of their respective owners.

Reported by Gaurav Agarwal for Bitquery Research, with AI tools; every figure was checked against the raw data.

Run the next investigation in minutes

Ask any question of the blockchain. Bitquery's AI Investigations agent traces funds, attributes wallets, and writes auditable reports across every major chain. Prefer to do it yourself? Connect the Bitquery MCP server to your AI assistant, pull the raw datasets, or query the chain directly with the Bitquery API.