웹사이트가 감지 못하는 광고 차단기를 직접 만들어봤는데, 왜 작동하는지 완벽히는 모르겠음
i vibe coded an ad blocker that websites cant detect and i still dont fully understand why it works
핵심 요약
레시피 사이트의 광고 차단 감지에 빡쳐서 직접 확장 프로그램을 개발한 개발자의 경험담.
- 광고 차단 원리 — 사이트의 감지 스크립트보다 먼저 실행되는 스크립트 주입 방식 사용
- MV3의 악몽 — 크롬 확장 프로그램 개발 과정에서 겪은 기술적 난관과 시행착오 공유
- 오픈 소스 공개 — 깃허브 레포지토리를 공개하고 커뮤니티의 피드백과 기여를 환영함
- 기술적 성장 — AI의 도움을 받으면서도 직접 기술적 개념을 공부하며 문제를 해결함
새벽 1시에 레시피 사이트 들어갔다가 차단당해서 시작된 일임. "광고 차단기 끄세요"라는 팝업창이 뜨는데, 칠리에 커민 얼마나 넣는지 보려고 광고 차단기를 끄는 건 도저히 못 하겠더라고. 그래서 정상적인 사람처럼 광고 차단기를 끄는 대신, 그냥 내가 직접 하나 만들기로 했음. 역시나 나답지.
이 짓을 시작하게 된 멍청한 깨달음이 하나 있는데, 사이트들이 광고 차단기를 잡아내는 이유는 유명한 차단기들이 너무 대놓고 유명해서임. uBlock이나 Adblock Plus 같은 애들은 너무 유명하니까 사이트 쪽에서 "어, 너 여기 있네?" 하고 바로 걸려버리는 거임. 무슨 대단한 탐지 기술이 아니라, 그냥 군중 속에서 연예인 알아보는 수준인 거지.
그래서 아이디어는 이거였음: 사이트 문지기가 확인하기 전에 미리 차단해버리면 어떨까?
실제로 어떻게 만들었는지(대충 분위기 위주로):
- Claude한테 Manifest V3를 5살짜리도 알아듣게 설명해달라고 했음. 근데 5살 수준으로 설명 안 해주더라. 참고로 Manifest V3는 꿈과 희망이 죽어 나가는 곳임. 크롬이 확장 프로그램에서 스크립트를 주입하는 방식을 바꿨는데, 문서 읽어보면 마치 나한테 화가 난 것처럼 써놨음.
- 핵심 트릭은 콘텐츠 스크립트 두 개를 쓰는 거임. 하나는
document_start시점에 MAIN 월드(페이지 자체 컨텍스트)에서 실행해서 페이지 스크립트가 깨어나기 전에 선수 치는 거고, 다른 하나는 안전한 작업을 위해 ISOLATED 월드에서 실행하는 거임. 타이밍이 전부임. 차단이 한 박자만 늦어도 탐지 스크립트가 이미 출석 체크를 끝내버려서 바로 걸림. - "왜 내 스크립트가 가끔 페이지 스크립트보다 늦게 실행되지?" 이거 해결하는 데만 3일 썼음. 답은 매니페스트의
run_at이랑 월드 설정이었음. 내가 설정을 살짝 잘못했더라고. 이거 하느라 1년은 늙은 듯. - 네트워크 차단은 예전 webRequest 방식 대신 declarativeNetRequest 규칙 리스트를 썼음. MV3가 예전 방식을 죽여버렸거든. 이 부분은 그냥 필터 규칙만 넣어주면 돼서 생각보다 스무스하게 짰음.
- 유튜브는 진짜 보스전이었음. 광고가 그냥 네트워크 요청만 있는 게 아니라 탐지 스크립트까지 있어서, 콘텐츠 레이어에서 플레이어를 직접 다뤄야 함. 안 그러면 나 엿 먹이려고 계속 버퍼링만 걸려 있음.
몸으로 부딪히며 배운 것들:
- "AI한테 타이밍 버그 고쳐달라고 하면 되겠지"는 개뿔, 내가 타이밍을 이해 못 하면 아무 소용 없음. AI가 도와주기 전에
document_start가 뭔지부터 직접 공부해야 했음. '바이브 코딩'도 최소한의 베이스는 있어야 함. 내가 뭘 물어보는지 정도는 알아야 하니까. - 짜증 나는 사이트들로 일찍 테스트해 볼 것. 첫날 테스트 페이지에서 잘 돌아가길래 자만했는데, 실제 뉴스 사이트 들어가자마자 바로 참교육당함.
- 권한은 신뢰 문제임. declarativeNetRequest랑 스토리지 권한만 남겨서 사람들이 보고 "오, 키로거는 아니네"라고 안심하게 만들었음.
무료고, 계정 필요 없고, GPL-3.0이라 소스 코드도 깃허브에 올릴 예정임(다른 서브레딧에서 링크 없다고 엄청 까였는데, 맞는 말이라 반박 불가). 레포 링크 뿌릴 테니까 내가 뭘 잘못했는지 다들 좀 알려주셈. 이 서브레딧 성격상 엄청 많을 것 같은데, 환영함.
써보고 싶은 사람들은 여기: https://chromewebstore.google.com/detail/ad-blocker-%E2%80%94-block-ads-po/cfcfhjclnllekcnfeoaaiicbjlmjmojk
아무튼 MV3 악몽에 대해 궁금한 거 있으면 물어보셈. 공유할 트라우마가 좀 많음.
작은 업데이트: 오픈 소스라면서 레포 없다고 까였는데, 맞는 말임 ㅋㅋ 이제 올라갔음:



