Papers › AdVersarial: Perceptual Ad Blocking meets Adversarial Machine Learning

AdVersarial: Perceptual Ad Blocking meets Adversarial Machine Learning

8 Nov 2018arXiv:1811.03194archive 2025-07-28

Florian Tramèr, Pascal Dupré, Gili Rusak, Giancarlo Pellegrino, Dan Boneh

Perceptual ad-blocking is a novel approach that detects online advertisements based on their visual content. Compared to traditional filter lists, the use of perceptual signals is believed to be less prone to an arms race with web publishers and ad networks. We demonstrate that this may not be the case. We describe attacks on multiple perceptual ad-blocking techniques, and unveil a new arms race that likely disfavors ad-blockers. Unexpectedly, perceptual ad-blocking can also introduce new vulnerabilities that let an attacker bypass web security boundaries and mount DDoS attacks. We first analyze the design space of perceptual ad-blockers and present a unified architecture that incorporates prior academic and commercial work. We then explore a variety of attacks on the ad-blocker's detection pipeline, that enable publishers or ad networks to evade or detect ad-blocking, and at times even abuse its high privilege level to bypass web security boundaries. On one hand, we show that perceptual ad-blocking must visually classify rendered web content to escape an arms race centered on obfuscation of page markup. On the other, we present a concrete set of attacks on visual ad-blockers by constructing adversarial examples in a real web page context. For seven ad-detectors, we create perturbed ads, ad-disclosure logos, and native web content that misleads perceptual ad-blocking with 100% success rates. In one of our attacks, we demonstrate how a malicious user can upload adversarial content, such as a perturbed image in a Facebook post, that fools the ad-blocker into removing another users' non-ad content. Moving beyond the Web and visual domain, we also build adversarial examples for AdblockRadio, an open source radio client that uses machine learning to detects ads in raw audio streams.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="1811.03194")

Code

Syntology Ran 0 of 15 code samples harvested from 1 repository linked to this paper; 15 have no recorded run.

By repository: official repository: 15 samples from 1 repository, 0 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

ftramer/ad-versarial officialmentioned in papermentioned on GitHubtfMIT report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

15 samples harvested; 0 ran; 0 honoured the contract we drafted; 15 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

15unverified

Licence: 0 of the 15 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from ftramer/ad-versarial. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

batch_eval ftramer/ad-versarial/page-based/utils.py official repository unverified MIT (permissive) · 7471ef5863e35839 · report
batch_eval_ch ftramer/ad-versarial/page-based/utils.py official repository unverified MIT (permissive) · 1f1b48c13ddfd7f1 · report
blend_transparent ftramer/ad-versarial/element-frame-based/utils.py official repository unverified MIT (permissive) · f11417cdc9ea3460 · report
blend_white ftramer/ad-versarial/element-frame-based/utils.py official repository unverified MIT (permissive) · 6f84e0253750d23a · report
compare_hash ftramer/ad-versarial/element-frame-based/phash/model.py official repository unverified MIT (permissive) · 35ac26a4707546ca · report
is_equal ftramer/ad-versarial/element-frame-based/exact_match.py official repository unverified MIT (permissive) · f7a281adc4fb2f95 · report
load_example ftramer/ad-versarial/element-frame-based/OCR/evade_or_fp_attack.py official repository unverified MIT (permissive) · 35a4a4659ccecb7a · report
load_image ftramer/ad-versarial/page-based/utils.py official repository unverified MIT (permissive) · b7e77d2bb35e1278 · report
load_weights ftramer/ad-versarial/page-based/yolo_v3.py official repository unverified MIT (permissive) · 968725378659c630 · report
phash_dct_tf ftramer/ad-versarial/element-frame-based/phash/model.py official repository unverified MIT (permissive) · 4622646a7161f4cc · report
remove_alpha ftramer/ad-versarial/element-frame-based/phash/model.py official repository unverified MIT (permissive) · c347a1bee1e9939f · report
resize ftramer/ad-versarial/element-frame-based/sift/model.py official repository unverified MIT (permissive) · 4ceb2d6022efa952 · report
squeezenet1_0 ftramer/ad-versarial/element-frame-based/percival/ModuleSqueezeNet1.py official repository unverified MIT (permissive) · fdf8f85f406426a8 · report
squeezenet1_1 ftramer/ad-versarial/element-frame-based/percival/ModuleSqueezeNet1.py official repository unverified MIT (permissive) · 43cd5c22cd650a33 · report
to_gray ftramer/ad-versarial/element-frame-based/utils.py official repository unverified MIT (permissive) · 45c374c2c75105a5 · report

Tasks

BIG-bench Machine LearningBlocking

Results from the paper archive 2025-07-28

No leaderboard rows for this paper in the archive.

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections