A Chrome Manifest V3 extension that silently removes anti-adblock walls, overlays, modals, and paywalls — the nags that appear when a website detects you're running an adblocker.
- Multi-layer defense — DNR network rules +
document_startspoof layer +document_idleoverlay cleanup + persistentMutationObserver. - Per-site rules — Targeted selectors and text phrases for known offenders (Forbes, Wired, YouTube, Business Insider, Tom's Guide, The Atlantic + Turkish news: Hürriyet, Sözcü, Milliyet, Sabah, Haberturk, Akşam, Posta).
- Remote rule updates — Background service worker fetches a shared rule list every 6 hours via
chrome.alarms, so new patterns don't require a manual update. - Whitelist per site — One-click "Disable on this site" in the popup. Stored in
chrome.storage.local. - Stats — Counts walls removed all-time; shows number of built-in + remote rules and last sync time.
- Consent-banner safe — Cookie/GDPR/KVKK banners are matched against known class and text patterns and left untouched to prevent false positives.
- Shadow-DOM aware — Selector sweep walks up to 3 levels of shadow roots.
- Playwright regression suite —
npm testlaunches real Chrome with the extension loaded and verifies walls are gone on 12 known sites.
- Clone or download this repo
- Open
chrome://extensions - Enable Developer mode
- Click Load unpacked and select the
adblockkiller/folder
The extension activates on every page automatically.
Three layers run in order:
content-early.js(runs atdocument_start, MAIN world) — PatchesHTMLElement.prototypedimension getters so bait elements report non-zero size, and pre-defineswindow.canRunAds,window.adsbygoogle, etc. so detection scripts believe ads are present.- DNR rules (
rules/net-rules.json,rules/ad-rules.json) — Block known adblock-detector and ad-delivery network requests at the browser level. content.js(runs atdocument_idle, isolated world) — Injects a broad CSS blocklist for known overlay classes, then runs a per-site targeted pass, a global text-heuristic pass, and a high-z-index sweep. AMutationObserverrepeats the cleanup for dynamically injected walls. Consent banners are detected and skipped.
adblockkiller/
├── manifest.json MV3 config
├── background.js Service worker — alarms, remote fetch, stats, whitelist
├── content-early.js Pre-page spoof layer (MAIN world)
├── content.js Main overlay remover + MutationObserver
├── popup.html / popup.js UI — status, counter, whitelist, rule stats
├── rules/
│ ├── net-rules.json DNR rules: adblock detector blocklist
│ ├── ad-rules.json DNR rules: ad-server blocklist
│ ├── cosmetic-data.js Global rule table loaded into content scripts
│ └── sites/index.js Per-site targeted rules
├── surrogates/ Stub scripts for ad SDKs (GPT, adsbygoogle)
└── test.js Playwright regression suite
Open DevTools Console on any page and filter for [AAK]. Every action (selector match, text heuristic, high-z sweep) is logged.
npm install
npm testLaunches headed Chrome, visits 12 known ad-wall sites, takes screenshots, reports pass/fail.
- Server-side detection — If a site checks impressions via their own backend, client-side spoofing can't help.
- Hard redirects — Sites that redirect to a "disable adblock" landing page at the HTTP level bypass this extension entirely.
- First page load — Very aggressive walls that block content before
document_idlemay flash briefly before removal. - Remote rule URL — Currently points to a placeholder raw-content URL; update
RULE_UPDATE_URLinbackground.jsif you self-host the rule feed.
MIT