crypttrace 0.33.0__tar.gz → 0.34.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {crypttrace-0.33.0/src/crypttrace.egg-info → crypttrace-0.34.0}/PKG-INFO +28 -8
  2. {crypttrace-0.33.0 → crypttrace-0.34.0}/README.md +27 -7
  3. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/__init__.py +1 -1
  4. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/labels/known.json +1 -1
  5. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/web/index.html +24 -0
  6. {crypttrace-0.33.0 → crypttrace-0.34.0/src/crypttrace.egg-info}/PKG-INFO +28 -8
  7. {crypttrace-0.33.0 → crypttrace-0.34.0}/LICENSE +0 -0
  8. {crypttrace-0.33.0 → crypttrace-0.34.0}/pyproject.toml +0 -0
  9. {crypttrace-0.33.0 → crypttrace-0.34.0}/setup.cfg +0 -0
  10. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/addresses.py +0 -0
  11. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/analysis.py +0 -0
  12. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/assess.py +0 -0
  13. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/assets.py +0 -0
  14. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/bridges.py +0 -0
  15. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/case.py +0 -0
  16. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/chains.py +0 -0
  17. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/cli.py +0 -0
  18. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/config.py +0 -0
  19. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/drain.py +0 -0
  20. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/evidence.py +0 -0
  21. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/export.py +0 -0
  22. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/fetchers/__init__.py +0 -0
  23. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/fetchers/bitcoin.py +0 -0
  24. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/fetchers/etherscan.py +0 -0
  25. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/fetchers/http.py +0 -0
  26. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/fetchers/solana.py +0 -0
  27. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/fetchers/ton.py +0 -0
  28. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/fetchers/tron.py +0 -0
  29. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/freeze.py +0 -0
  30. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/funder.py +0 -0
  31. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/gascluster.py +0 -0
  32. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/investigate.py +0 -0
  33. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/labels/__init__.py +0 -0
  34. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/labels/audit.py +0 -0
  35. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/labels/bulk.py +0 -0
  36. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/labels/labels.py +0 -0
  37. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/labels/names.py +0 -0
  38. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/labels/partial.json +0 -0
  39. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/labels/tonapi.py +0 -0
  40. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/labels/tronscan.py +0 -0
  41. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/offramp.py +0 -0
  42. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/poisoning.py +0 -0
  43. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/prices.py +0 -0
  44. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/render.py +0 -0
  45. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/report.py +0 -0
  46. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/spam.py +0 -0
  47. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/store.py +0 -0
  48. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/trace.py +0 -0
  49. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/verify.py +0 -0
  50. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/watch.py +0 -0
  51. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace/webapp.py +0 -0
  52. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace.egg-info/SOURCES.txt +0 -0
  53. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace.egg-info/dependency_links.txt +0 -0
  54. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace.egg-info/entry_points.txt +0 -0
  55. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace.egg-info/requires.txt +0 -0
  56. {crypttrace-0.33.0 → crypttrace-0.34.0}/src/crypttrace.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypttrace
3
- Version: 0.33.0
3
+ Version: 0.34.0
4
4
  Summary: OSINT toolkit for crypto investigations: trace stolen funds across Ethereum, Bitcoin, Tron, Solana and TON
5
5
  Author: bobslayerX
6
6
  License-Expression: MIT
@@ -50,12 +50,14 @@ here's the wallet — where did the money go, and where can it still be stopped?
50
50
  Works as a terminal tool **and** as a local web app with an interactive
51
51
  fund-flow graph.
52
52
 
53
- ![crypttrace tracing the AFX Trade exploit](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/graph-outflow.png)
53
+ ![crypttrace investigating the Ronin bridge exploiter in the web UI](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/web-ronin.png)
54
54
 
55
- *Real case: the AFX Trade exploiter (July 2026, $24.15M). crypttrace follows the
56
- stolen ETH out of the attacker's wallet — 12,467 ETH (~$23.3M) to a holding
57
- address, then split across three wallets and split again. Classic layering,
58
- mapped in seconds.*
55
+ *Real case: the Ronin bridge exploiter (Lazarus, 2022). The graph shows the
56
+ stolen ETH leaving in three transfers of 23,500–33,600 ETH, every one to a
57
+ wallet on the US sanctions list. The side panel shows what is known about the
58
+ address and where it comes from: the OFAC listing behind the label, USDT and
59
+ USDC blacklisted by Tether and Circle, and the first funding of the wallet —
60
+ 1.06 ETH from a Binance reserve wallet, an exchange that knows who withdrew it.*
59
61
 
60
62
  ---
61
63
 
@@ -137,6 +139,8 @@ so scams that start in a Telegram chat often end there. TON addresses are
137
139
  accepted in any form (`UQ…`, `EQ…` or raw `0:…`) and shown as wallets show
138
140
  them (`UQ…`); jetton transfers are reported between the owners' wallets.
139
141
 
142
+ ![A Binance reserve wallet on Dogecoin: 2.12 billion DOGE, labelled from Binance's own proof-of-reserves list](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/web-dogecoin.png)
143
+
140
144
  ---
141
145
 
142
146
  ## Was my wallet drained?
@@ -161,6 +165,14 @@ history and answers in plain language:
161
165
  jetton balances and NFTs from trusted collections, not airdropped spam), and
162
166
  who to report to.
163
167
 
168
+ It also names any payment the wallet made to an address on a phishing or
169
+ sanctions list (ScamSniffer's phishing blacklist and OFAC's, downloaded with
170
+ `crypttrace update-labels`). A fake site or a signed token approval takes money
171
+ in one transfer, so there is no burst to find, but the destination gives it
172
+ away:
173
+
174
+ ![A payment to a listed phishing address, found by the drain check](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/web-check-phishing.png)
175
+
164
176
  The web UI has the same check in its **Was I drained?** tab.
165
177
 
166
178
  ### An evidence pack for the exchange and the police
@@ -192,8 +204,11 @@ explorer. A side panel shows the profile, first-funder chain, off-ramp check
192
204
  and whether USDT/USDC at the address is frozen. Tabs add the assessment, the
193
205
  timeline, the list of who sent funds here, and address poisoning (look-alikes
194
206
  planted in the wallet's history, and payments lured by this address). **Case
195
- file** downloads the same one-page HTML report `crypttrace report` writes.
196
- Everything runs on your machine — nothing is uploaded anywhere.
207
+ file** downloads the same one-page HTML report `crypttrace report` writes;
208
+ **GraphML** and **CSV** download the graph for Gephi or Maltego. The page's
209
+ address is a link to the investigation
210
+ (`/?address=…&chain=…&direction=…&depth=…&tab=check`), ready to bookmark or
211
+ send. Everything runs on your machine — nothing is uploaded anywhere.
197
212
 
198
213
  This exists so non-technical victims can use the tool at all: a form and a
199
214
  picture, instead of command-line flags.
@@ -454,6 +469,11 @@ explorers list newest first, so there it is the earliest of the latest 200
454
469
  transfers. On EVM chains a first funding sent by a contract (a mixer or bridge
455
470
  withdrawal, an internal transaction) counts and is flagged.
456
471
 
472
+ ![funder on the Ronin exploiter, and verify on a Dogecoin wallet](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/cli-funder-verify.png)
473
+
474
+ *Above: the Ronin exploiter's first gas came from a Binance reserve wallet. Below:
475
+ `verify` re-derives a Dogecoin wallet's totals and matches them with the chain.*
476
+
457
477
  ### Victim lists and timing analysis
458
478
 
459
479
  Two things a graph shows but can't hand you as evidence.
@@ -16,12 +16,14 @@ here's the wallet — where did the money go, and where can it still be stopped?
16
16
  Works as a terminal tool **and** as a local web app with an interactive
17
17
  fund-flow graph.
18
18
 
19
- ![crypttrace tracing the AFX Trade exploit](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/graph-outflow.png)
19
+ ![crypttrace investigating the Ronin bridge exploiter in the web UI](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/web-ronin.png)
20
20
 
21
- *Real case: the AFX Trade exploiter (July 2026, $24.15M). crypttrace follows the
22
- stolen ETH out of the attacker's wallet — 12,467 ETH (~$23.3M) to a holding
23
- address, then split across three wallets and split again. Classic layering,
24
- mapped in seconds.*
21
+ *Real case: the Ronin bridge exploiter (Lazarus, 2022). The graph shows the
22
+ stolen ETH leaving in three transfers of 23,500–33,600 ETH, every one to a
23
+ wallet on the US sanctions list. The side panel shows what is known about the
24
+ address and where it comes from: the OFAC listing behind the label, USDT and
25
+ USDC blacklisted by Tether and Circle, and the first funding of the wallet —
26
+ 1.06 ETH from a Binance reserve wallet, an exchange that knows who withdrew it.*
25
27
 
26
28
  ---
27
29
 
@@ -103,6 +105,8 @@ so scams that start in a Telegram chat often end there. TON addresses are
103
105
  accepted in any form (`UQ…`, `EQ…` or raw `0:…`) and shown as wallets show
104
106
  them (`UQ…`); jetton transfers are reported between the owners' wallets.
105
107
 
108
+ ![A Binance reserve wallet on Dogecoin: 2.12 billion DOGE, labelled from Binance's own proof-of-reserves list](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/web-dogecoin.png)
109
+
106
110
  ---
107
111
 
108
112
  ## Was my wallet drained?
@@ -127,6 +131,14 @@ history and answers in plain language:
127
131
  jetton balances and NFTs from trusted collections, not airdropped spam), and
128
132
  who to report to.
129
133
 
134
+ It also names any payment the wallet made to an address on a phishing or
135
+ sanctions list (ScamSniffer's phishing blacklist and OFAC's, downloaded with
136
+ `crypttrace update-labels`). A fake site or a signed token approval takes money
137
+ in one transfer, so there is no burst to find, but the destination gives it
138
+ away:
139
+
140
+ ![A payment to a listed phishing address, found by the drain check](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/web-check-phishing.png)
141
+
130
142
  The web UI has the same check in its **Was I drained?** tab.
131
143
 
132
144
  ### An evidence pack for the exchange and the police
@@ -158,8 +170,11 @@ explorer. A side panel shows the profile, first-funder chain, off-ramp check
158
170
  and whether USDT/USDC at the address is frozen. Tabs add the assessment, the
159
171
  timeline, the list of who sent funds here, and address poisoning (look-alikes
160
172
  planted in the wallet's history, and payments lured by this address). **Case
161
- file** downloads the same one-page HTML report `crypttrace report` writes.
162
- Everything runs on your machine — nothing is uploaded anywhere.
173
+ file** downloads the same one-page HTML report `crypttrace report` writes;
174
+ **GraphML** and **CSV** download the graph for Gephi or Maltego. The page's
175
+ address is a link to the investigation
176
+ (`/?address=…&chain=…&direction=…&depth=…&tab=check`), ready to bookmark or
177
+ send. Everything runs on your machine — nothing is uploaded anywhere.
163
178
 
164
179
  This exists so non-technical victims can use the tool at all: a form and a
165
180
  picture, instead of command-line flags.
@@ -420,6 +435,11 @@ explorers list newest first, so there it is the earliest of the latest 200
420
435
  transfers. On EVM chains a first funding sent by a contract (a mixer or bridge
421
436
  withdrawal, an internal transaction) counts and is flagged.
422
437
 
438
+ ![funder on the Ronin exploiter, and verify on a Dogecoin wallet](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/cli-funder-verify.png)
439
+
440
+ *Above: the Ronin exploiter's first gas came from a Binance reserve wallet. Below:
441
+ `verify` re-derives a Dogecoin wallet's totals and matches them with the chain.*
442
+
423
443
  ### Victim lists and timing analysis
424
444
 
425
445
  Two things a graph shows but can't hand you as evidence.
@@ -1,2 +1,2 @@
1
1
  """crypttrace — OSINT crypto investigation CLI."""
2
- __version__ = "0.33.0"
2
+ __version__ = "0.34.0"
@@ -97,7 +97,7 @@
97
97
  "0x2796317b0ff8538f253012862c06787adfb8ceb6": {"name": "Synapse: Bridge", "type": "bridge"},
98
98
  "0x5427fefa711eff984124bfbb1ab6fbf5e3da1820": {"name": "Celer: cBridge V2", "type": "bridge"},
99
99
  "0x841ce48f9446c8e281d3f1444cb859b4a6d0738c": {"name": "Celer: cBridge (old)", "type": "bridge"},
100
- "0x098b716b8aaf21512996dc57eb0615e2383e2f96": {"name": "Ronin Bridge Exploiter (Lazarus)", "type": "sanctioned"},
100
+ "0x098b716b8aaf21512996dc57eb0615e2383e2f96": {"name": "Ronin Bridge Exploiter (Lazarus)", "type": "sanctioned", "source": "US Treasury OFAC SDN list, Lazarus Group entry (address added in April 2022); present in the SDN digital-currency address extract, github.com/0xB10C/ofac-sanctioned-digital-currency-addresses, checked 2026-11-07", "source_kind": "official-list", "added": "2026-11-07"},
101
101
  "0x2f2974fabc54dba33442261211c06bd20e0feefc": {"name": "AFX Trade Exploiter (Jul 2026, $24M)", "type": "scam", "chain": "eth", "source": "Lookonchain, 23 Jul 2026 - received 24.15M USDC bridged from Arbitrum, swapped to 12,467 ETH", "source_kind": "research", "added": "2026-08-01"},
102
102
 
103
103
  "bc1qq85v2c926eg6pgxhwp6q7lf6cnsz80qs3fcu9r": {"name": "Coldcard Exploiter (Jul 2026) - consolidation", "type": "scam", "chain": "btc", "source": "Galaxy Research flow-of-funds thread, 31 Jul 2026, based on Block (clay_garrett) analysis", "source_kind": "research", "added": "2026-08-09"},
@@ -285,6 +285,8 @@ const COLORS={exchange:'#3fdf87',mixer:'#c48cff',sanctioned:'#ff6b60',scam:'#ff6
285
285
  const EXPLORER={eth:'https://etherscan.io',bsc:'https://bscscan.com',polygon:'https://polygonscan.com',
286
286
  arbitrum:'https://arbiscan.io',optimism:'https://optimistic.etherscan.io',base:'https://basescan.org'};
287
287
  const NON_EVM={btc:a=>`https://mempool.space/address/${a}`,
288
+ ltc:a=>`https://litecoinspace.org/address/${a}`,
289
+ doge:a=>`https://blockchair.com/dogecoin/address/${a}`,
288
290
  tron:a=>`https://tronscan.org/#/address/${a}`,
289
291
  sol:a=>`https://solscan.io/account/${a}`,
290
292
  ton:a=>`https://tonviewer.com/${a}`};
@@ -486,6 +488,10 @@ async function inspect(addr){
486
488
  async function run(){
487
489
  const a=$('#addr').value.trim();
488
490
  if(!a){ setStatus('enter an address',true); return; }
491
+ // the page's own address becomes a link to this investigation
492
+ const link=new URLSearchParams({address:a,chain:chain(),asset:$('#asset').value,
493
+ direction:$('#direction').value,depth:$('#depth').value});
494
+ history.replaceState(null,'',`?${link}`);
489
495
  setStatus('tracing the chain…',false,true); loader(35);
490
496
  $('#hint').classList.add('hide');
491
497
  loaded={}; // new address -> other views must reload
@@ -514,6 +520,8 @@ async function run(){
514
520
  async function syncAssets(){
515
521
  const sel=$('#asset'), c=chain();
516
522
  $('#addr').placeholder = c==='btc' ? 'bc1… / 1… / 3… Bitcoin address'
523
+ : c==='ltc' ? 'L… / M… / ltc1… Litecoin address'
524
+ : c==='doge' ? 'D… Dogecoin address'
517
525
  : c==='tron' ? 'T… Tron address'
518
526
  : c==='sol' ? 'Solana account address'
519
527
  : c==='ton' ? 'UQ… / EQ… TON address'
@@ -821,6 +829,22 @@ $('#zroot').onclick=()=>{
821
829
  setTimeout(showScale,520);
822
830
  };
823
831
  $('#addr').addEventListener('keydown',e=>{ if(e.key==='Enter') run(); });
832
+
833
+ // A link opens an investigation: /?address=…&chain=eth&direction=in&depth=4&asset=usdt&tab=check
834
+ (function(){
835
+ const p=new URLSearchParams(location.search), a=p.get('address');
836
+ if(!a) return;
837
+ const set=(id,v)=>{
838
+ const el=$(id);
839
+ if(v!==null && [...el.options].some(o=>o.value===v)){ el.value=v; el.dispatchEvent(new Event('change')); }
840
+ };
841
+ set('#chain',p.get('chain')); // first: it decides which assets are offered
842
+ set('#asset',p.get('asset')); set('#direction',p.get('direction')); set('#depth',p.get('depth'));
843
+ $('#addr').value=a;
844
+ run();
845
+ const v=p.get('tab');
846
+ if(v && [...document.querySelectorAll('.tab')].some(t=>t.dataset.view===v)) showView(v);
847
+ })();
824
848
  </script>
825
849
  </body>
826
850
  </html>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypttrace
3
- Version: 0.33.0
3
+ Version: 0.34.0
4
4
  Summary: OSINT toolkit for crypto investigations: trace stolen funds across Ethereum, Bitcoin, Tron, Solana and TON
5
5
  Author: bobslayerX
6
6
  License-Expression: MIT
@@ -50,12 +50,14 @@ here's the wallet — where did the money go, and where can it still be stopped?
50
50
  Works as a terminal tool **and** as a local web app with an interactive
51
51
  fund-flow graph.
52
52
 
53
- ![crypttrace tracing the AFX Trade exploit](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/graph-outflow.png)
53
+ ![crypttrace investigating the Ronin bridge exploiter in the web UI](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/web-ronin.png)
54
54
 
55
- *Real case: the AFX Trade exploiter (July 2026, $24.15M). crypttrace follows the
56
- stolen ETH out of the attacker's wallet — 12,467 ETH (~$23.3M) to a holding
57
- address, then split across three wallets and split again. Classic layering,
58
- mapped in seconds.*
55
+ *Real case: the Ronin bridge exploiter (Lazarus, 2022). The graph shows the
56
+ stolen ETH leaving in three transfers of 23,500–33,600 ETH, every one to a
57
+ wallet on the US sanctions list. The side panel shows what is known about the
58
+ address and where it comes from: the OFAC listing behind the label, USDT and
59
+ USDC blacklisted by Tether and Circle, and the first funding of the wallet —
60
+ 1.06 ETH from a Binance reserve wallet, an exchange that knows who withdrew it.*
59
61
 
60
62
  ---
61
63
 
@@ -137,6 +139,8 @@ so scams that start in a Telegram chat often end there. TON addresses are
137
139
  accepted in any form (`UQ…`, `EQ…` or raw `0:…`) and shown as wallets show
138
140
  them (`UQ…`); jetton transfers are reported between the owners' wallets.
139
141
 
142
+ ![A Binance reserve wallet on Dogecoin: 2.12 billion DOGE, labelled from Binance's own proof-of-reserves list](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/web-dogecoin.png)
143
+
140
144
  ---
141
145
 
142
146
  ## Was my wallet drained?
@@ -161,6 +165,14 @@ history and answers in plain language:
161
165
  jetton balances and NFTs from trusted collections, not airdropped spam), and
162
166
  who to report to.
163
167
 
168
+ It also names any payment the wallet made to an address on a phishing or
169
+ sanctions list (ScamSniffer's phishing blacklist and OFAC's, downloaded with
170
+ `crypttrace update-labels`). A fake site or a signed token approval takes money
171
+ in one transfer, so there is no burst to find, but the destination gives it
172
+ away:
173
+
174
+ ![A payment to a listed phishing address, found by the drain check](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/web-check-phishing.png)
175
+
164
176
  The web UI has the same check in its **Was I drained?** tab.
165
177
 
166
178
  ### An evidence pack for the exchange and the police
@@ -192,8 +204,11 @@ explorer. A side panel shows the profile, first-funder chain, off-ramp check
192
204
  and whether USDT/USDC at the address is frozen. Tabs add the assessment, the
193
205
  timeline, the list of who sent funds here, and address poisoning (look-alikes
194
206
  planted in the wallet's history, and payments lured by this address). **Case
195
- file** downloads the same one-page HTML report `crypttrace report` writes.
196
- Everything runs on your machine — nothing is uploaded anywhere.
207
+ file** downloads the same one-page HTML report `crypttrace report` writes;
208
+ **GraphML** and **CSV** download the graph for Gephi or Maltego. The page's
209
+ address is a link to the investigation
210
+ (`/?address=…&chain=…&direction=…&depth=…&tab=check`), ready to bookmark or
211
+ send. Everything runs on your machine — nothing is uploaded anywhere.
197
212
 
198
213
  This exists so non-technical victims can use the tool at all: a form and a
199
214
  picture, instead of command-line flags.
@@ -454,6 +469,11 @@ explorers list newest first, so there it is the earliest of the latest 200
454
469
  transfers. On EVM chains a first funding sent by a contract (a mixer or bridge
455
470
  withdrawal, an internal transaction) counts and is flagged.
456
471
 
472
+ ![funder on the Ronin exploiter, and verify on a Dogecoin wallet](https://raw.githubusercontent.com/bobslayerX/crypttrace/main/assets/cli-funder-verify.png)
473
+
474
+ *Above: the Ronin exploiter's first gas came from a Binance reserve wallet. Below:
475
+ `verify` re-derives a Dogecoin wallet's totals and matches them with the chain.*
476
+
457
477
  ### Victim lists and timing analysis
458
478
 
459
479
  Two things a graph shows but can't hand you as evidence.
File without changes
File without changes
File without changes