Adbleed

Proof of concept · adblock filter-list fingerprinting

A VPN hides your IP address. Your adblocker doesn't. Country-specific filter lists — EasyList Germany, Liste FR and others — each block a different set of ad domains. This page probes those domains in your browser, works out which lists you have enabled, and infers your country or language from that alone, even behind a VPN.

Your IP location The Netherlands via 2001:1c00:2193:800:1489:8258:bb82:db5e — this is what your IP says. The detection below checks what your adblocker says.

Country Filter Lists

Each list below blocks ad domains specific to one country. We probe 30 domains per list — ones no other list blocks.

How It Works

1

Domain Extraction

Every country list blocks ad domains specific to its region. EasyList Germany, for one, blocks adnx.de, adition.de and hundreds of other German ad networks that the base EasyList never touches. We diffed each country list against that base list (54,000+ domains) and kept only the domains unique to the country.

2

Domain Probing

The page loads a tiny resource — a favicon — from 30 of those domains. If your adblocker blocks one, the request fails in under 30ms, because it never reaches the network. A real network failure (DNS timeout, refused connection) takes over 100ms. That gap is what separates a blocked domain from one that is merely unreachable.

3

Fingerprint Assembly

Block 20 or more of a list's 30 domains and that list is almost certainly on. The lists you run, taken together, form a fingerprint — often specific enough to place you in a country or language group, VPN or not.

Methodology Notes

  • Every probed domain is checked against the base EasyList (54,415 rules) first — none of them appear in it. The set was tuned against Brave's default Shields to keep false positives down; other adblockers may behave differently.
  • A list only counts as detected once at least 20 of its 30 probes are blocked. That high bar stops browsers with extra generic lists from tripping a false match.
  • Adblocker blocks (under 30ms) and ordinary network failures (over 100ms) are told apart with performance.now() high-resolution timing.
  • Known-blocked and known-good domains run as controls, to confirm an adblocker is present and to calibrate the timing baseline.
  • Everything runs client-side in plain JavaScript; the page works as a static file with no backend.

Reproduce it

Turn on a country-specific list in your adblocker, then re-run the detection and watch it get picked up. Steps for the common setups are below.

Brave Browser

  1. Open brave://settings/shields/filters in your address bar
  2. Browse the list of available filter lists
  3. Toggle on any country-specific list (e.g., EasyList Germany, Liste FR)
  4. Return to this page and click Run Detection

uBlock Origin

  1. Click the uBlock Origin icon in your toolbar, then the gear icon to open the dashboard
  2. Go to the Filter lists tab
  3. Expand the Regions, languages section
  4. Check any country list, click Apply changes, and re-run detection

AdBlock Plus

  1. Click the ABP icon and select Settings
  2. Go to the Advanced tab
  3. Under Filter lists, click Add a new filter list
  4. Select a language-specific list from the dropdown and click Add

AdGuard

  1. Open AdGuard and go to Settings → Filters
  2. Find the Language-specific category
  3. Enable any regional filter (e.g., AdGuard German filter)
  4. Wait for the list to update, then re-run detection here

Pi-hole / DNS-level

  1. Open your Pi-hole admin panel at http://pi.hole/admin
  2. Go to Group Management → Adlists
  3. Add a country-specific blocklist URL (e.g., the EasyList Germany URL)
  4. Run pihole -g to update gravity, then re-run detection

Note: DNS-level blocking may not trigger the same timing signature as browser-based adblockers. Results may differ.

Firefox with built-in tracking protection

  1. Firefox's Enhanced Tracking Protection uses Disconnect lists, not EasyList
  2. To test with country lists, install uBlock Origin from the Add-ons store
  3. Follow the uBlock Origin instructions above to enable regional lists