본문 바로가기

떠들기

안티 안티 애드블록 : 광고차단 탐지를 무효화시키자

1. 계기

애드블록을 해제 안 하면 내용을 안 보여주겠답니다. 그렇다고 잠깐 해제하고 치우기엔 너무나도 괘씸해서요. 코드를 들여다보기로 했습니다.

2. 해킹은 아닙니다.

웹사이트에서 어떻게 여러분의 컴퓨터에 광고차단기가 설치되어 있는지 알 수 있을까요? 만약 여러분이 방문하는 웹사이트가 우리 컴퓨터에 이런 저런 프로그램이 설치되어있는지 알 수 있다면 그건 보안 구멍입니다. 상식적으로 인터넷을 통해 방문했더니 내 컴퓨터를 들여다볼 수 있다는 건 말이 안 되죠.

그렇다면? 컴퓨터에 광고차단 프로그램이 설치되어있는지 알 수 없다면 어떻게 광고차단기가 돌아가는지 탐지하는 걸까요?

안티 애드블록은 광고차단기의 동작 원리를 역이용합니다. 광고차단 프로그램은 아예 광고를 다운받지 않게 차단해버리거든요. 안티 애드블록은 광고와 비슷한 낚시 광고를 준비해놓고, 광고 차단기가 이걸 숨기거나 다운받지 못하게 했는지 확인합니다. 낚시로 준비한 가짜 광고가 사라졌다? 너 애드블록 돌리는구나! 가 되는거죠.

그런데 이 안티 애드블록이란 결국 프로그램입니다. 다만 광고차단기와는 다르게 내 컴퓨터에 설치하는 건 아니고, 여러분이 방문하려는 웹사이트에 같이 들어있습니다. 웹사이트랑 같이 안티 애드블록을 다운받아 버리는 셈이죠... 이런 프로그램을 "자바스크립트" 라고 합니다. 보통 스크립트란 웹사이트의 기능을 보조하기 위해 사용되지만, 이번엔 악용이군요...

그래서 어떻게 적용할 수 있지 않을까 해봤는데, 웹페이지에 쌩으로 프로그램[각주:1]을 박아놨네요. 다른 파일을 다운로드해! 라고 해놨으면 그 파일만 차단하면 그만이었을텐데, 웹사이트의 코드 중 일부로 삽입해놨네요. 경사났네 경사났어... 이러면 다운로드를 막지는 못하죠. 보려는 웹페이지의 다운로드를 막으면 그 페이지 자체를 못 보게 되는걸요. (무슨말인지 알죠? 빈대 잡으려다 초가삼간 태운다는 말입니다.)

스크립트 이름 좀 보소; fuckadblock.js 라니;

그런데, 안티 애드블록은 결국 우리 가 다운받아서 내 컴퓨터에서 실행하게 됩니다. 그말은 뭐다? 우리 통제하에 있다 라는 겁니다.. 그럼 똑같이 우리도 프로그램 만들어서 실행하면 되죠. 어차피 자기 컴퓨터에 다운받아 실행하는 프로그램인 이상, 우리도 하지 말라는 법 없습니다.

3. fuckAdBlock.js

어쩌다보니 알게되었는데요. 우리가 해치워버리려는 광고차단 프로그램 차단기의 프로그램 소스가 공개되어 있네요.

https://github.com/sitexw/FuckAdBlock
https://github.com/sitexw/BlockAdBlock

위 웹사이트도 이걸 쓰고있습니다. (FuckAdBlock)

4. 해결방법

결국 해결하려면 우리도 저걸 무효화시키는 무언가를 실행해야 합니다.

방법은 여러가지입니다. 저야 다른 방법으로 해결했지만 몇 가지 방법이 있는데요.

4-1. 부가기능을 쓰세요.

일반 사용자에게 쉬운 방법입니다.

파이어폭스 부가기능 : 안티-애드블록 비활성화시키는 부가기능
↑ 이거 잘 안 되는 경우가 많네요; 4-2로 갑시다.

크롬 사용자는 직접 찾아보세요. 되는지 확인해볼 생각 없습니다. 크롬이 없거든요. 안 깔 거에요.

+ 2016년 추가 : FuckFuckAdblock이 파이어폭스 부가기능으로 나왔군요.

+ 2018년 추가 : https://jspenguin2017.github.io/uBlockProtector/ Nano Adblocker + Nano Defender 조합이면 된다고 합니다.

4-2. 유저스크립트를 쓰세요.

"유저스크립트" 라는 건 방문하려는 웹사이트에 포함된 "자바스크립트" 말고도 우리 맘대로 직접 만든 "자바스크립트"를 추가해서 실행할 수 있게 해주는 확장기능과, 우리가 맘대로 웹사이트에 쑤셔넣는 그 "자바스크립트" 두 가지를 총칭하는 말입니다.

"안티 애드블락"은 웹 페이지에 포함된 "자바스크립트" 입니다. 이걸 실행하기 전에 우리 "자바스크립트"를 먼저 실행해버리는 방법이 되겠습니다. 유저스크립트를 사용하면 이런 제어도 가능합니다.

다만 이 방법은 수동으로 이것저것 추가해야 하는지라 익숙하지 않다면 조금 어렵습니다. 설치만 하는 건 쉬우니 약간 아래에서 다루겠습니다.

재미있는건 깃헙에서 검색하니 바로 나오더군요....

> FuckFuckAdBlock (FuckAdBlock 만 대상으로 함)
> 안티 애드블록 킬러 << 얘가 더 나아보임 (안써봤어요)

더보기

저야 임시 해결책을 썼었습니다. 이 분 자바스크립트 고수;

// ==UserScript==
// @name        fuckfuckAdBlock
// @namespace   fuck
// @description fuck
// @include     *
// @version     1
// @grant       none
// @run-at      document-start
// ==/UserScript==

Object.defineProperty(window, 'fuckAdBlock', {value: null, configurable: false, enumerable: false, writable: false})
//window.fuckAdBlock = null;

원리는, 웹페이지 부분에서 비교하는 부분을 무력화하는건데, 한 곳만 대상으로 하다보니 굉장히 무력하고 비추천인 방법입니다. 누가 만들어놓은걸 가져다쓰는게 제일 낫죠.

5. 안티 애드블록 킬러를 설치해보자

4.2 절에서 언급했던 안티 애드블록 킬러 라는 유저스크립트를 설치해봅시다. 여기에 나와있는데, 영어가 힘드신 분들을 위해...

1. 스크립트 매니저를 설치합니다.

얘내들은 우리 맘대로 만든 "자바스크립트"를 특정 웹사이트에서 실행할 수 있게 해주고, 이 "자바스크립트" 들을 관리해주는 브라우저 확장기능입니다.

파이어폭스 >> 탬퍼몽키, 그리스몽키
크롬 >> 탬퍼몽키
오페라 >> 탬퍼몽키
크롬, 오페라 >> 닌자킷

2. 애드블록 차단 리스트에 차단 추가

http://reek.github.io/anti-adblock-killer/subscribe.html


아차, "안티-애드블록 킬러" 는 애드블록 자체의 기능도 활용합니다. 애드블록용 필터를 하나 구독해야 합니다.

subscribe 버튼을 눌러서 차단 목록에 추가하세요.

3. 스크립트 프로그램을 설치하세요.

https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer.user.js

때가 되었습니다. 광고 차단 차단 차단기 "유저스크립트" 를 설치합시다.

파이어폭스라면, 링크를 클릭하시면 이렇게 뜰 겁니다. 저 버튼을 눌러서 설치하시면 돼요. 이러면 저 "자바스크립트" 를 썰워스트 웹사이트에 삽입해서 실행하게 됩니다. 이게 실행되면 광고 차단 차단기를 무력화시키는 거죠.

그리고 테스트로 썰워스트에 들어가봅시다.

 

오 예

(이쯤되면 저 사이트의 내용 따위는 관심이 전혀 없지만서도- 일단 테스트로 들어가본거죠.)

5. 안티 애드블록은 무의미하다

어차피 사용자의 컴퓨터를 해킹할 수 없는 이상, 광고 차단 프로그램이 여기 나 설치돼있어요! 하고 웹사이트에 알려줄 일은 없습니다. 그러니 결국 여러분의 컴퓨터에 다운받아서 실행할 수 밖에 없는데, 그렇게되면 안티 애드블록이 실행되는 것조차 실행하는 컴퓨터, 즉 우리의 통제하에 있게 됩니다. 애초에 막아봤자 막는게 실행 안 되게 하면 된다는거죠.

그러니, 차라리 비침입형 광고를 하세요. 글 보는데 방해될 정도로 광고가 있으면 누가 그 광고를 볼까요.

 

  1. 자바스크립트 코드 [본문으로]