본문 바로가기
Blog Adsense Youtube/Blog & Adsense

애드센스 무효클릭 방지코드 자바스크립트

by 아ZN2 2024. 10. 9.

목차

    애드센스 무효클릭 방지코드

    이게 효과가 있을지는 모르겠지만 학습을 위해 뷰티파잉 해봤습니다.

    이 코드의 기능은 주로 웹 페이지에서의 무효 클릭 공격을 감지하고, 이를 차단하기 위해 블랙리스트를 관리하는 것입니다. 사용자의 클릭 수를 추적하고 특정 조건을 만족하면 경고 메시지를 보여주는 방식으로 작동합니다.

    애드센스 무효클릭 방지코드 자바스크립트

    // 함수 이름을 해독하여 접근
    function _0x4ffd(_0x4c1cd1, _0x552e56) {
        const _0x9ea11e = _0x9ea1(); // 초기화된 데이터 배열
        return _0x4ffd = function (_0x4ffdd9, _0x80c11b) {
            _0x4ffdd9 = _0x4ffdd9 - 0x130; // 인덱스 조정
            let _0x455d58 = _0x9ea11e[_0x4ffdd9]; // 배열에서 값 가져오기
            return _0x455d58;
        }, _0x4ffd(_0x4c1cd1, _0x552e56);
    }
    
    const _0x37126c = _0x4ffd;
    
    // 즉시 실행 함수로 데이터를 초기화하고 체크하는 역할 수행
    (function (_0x2cbc21, _0x291f8d) {
        const _0x378776 = _0x4ffd;
        const _0x3eaa3c = _0x2cbc21();
    
        while (true) {
            try {
                // 복잡한 수식으로 특정 값 확인
                const _0x318f1b = -parseInt(_0x378776(0x139)) / 1 +
                    -parseInt(_0x378776(0x145)) / 2 * (-parseInt(_0x378776(0x14b)) / 3) +
                    -parseInt(_0x378776(0x13c)) / 4 +
                    parseInt(_0x378776(0x130)) / 5 * (-parseInt(_0x378776(0x143)) / 6) +
                    parseInt(_0x378776(0x138)) / 7 * (parseInt(_0x378776(0x140)) / 8) +
                    parseInt(_0x378776(0x148)) / 9 * (parseInt(_0x378776(0x13a)) / 10) +
                    parseInt(_0x378776(0x13f)) / 11 * (-parseInt(_0x378776(0x147)) / 12);
    
                if (_0x318f1b === _0x291f8d) break; // 조건 충족 시 반복 종료
                else _0x3eaa3c.push(_0x3eaa3c.shift()); // 배열 요소 순환
            } catch (_0x14640a) {
                _0x3eaa3c.push(_0x3eaa3c.shift()); // 오류 발생 시 배열 요소 순환
            }
        }
    }(_0x9ea1, 0x2dab5));
    
    // 블랙리스트 접근을 관리하는 함수
    function arosBlacklistAccess() {
        const _0x1a44dc = _0x4ffd;
        const _0x2db158 = new Date(); // 현재 시간 생성
        const _0x32bd9a = JSON.parse(localStorage[_0x1a44dc(0x131)](_0x1a44dc(0x133)) || '[]'); // 블랙리스트 데이터 가져오기
        _0x2db158.setHours(_0x2db158.getHours() + 1); // 1시간 후로 설정
    
        // 현재 URL과 시간 제한 객체 생성
        const _0x19ee31 = { 'url': window.location.href, 'timeLimit': _0x2db158 };
        _0x32bd9a.push(_0x19ee31); // 데이터 추가
        localStorage.setItem(_0x1a44dc(0x133), JSON.stringify(_0x32bd9a)); // 로컬스토리지에 저장
        showAlert(); // 경고창 표시
    }
    
    // 데이터 배열을 초기화하는 함수
    function _0x9ea1() {
        const _0x1cf1b8 = [
            '310602jqsggF', '무효트래픽 감시 중\n무효 광고 클릭 차단합니다.\n',
            '1429548oRJGMX', '24831xlNGzB', '애드센스 무효 클릭 공격 감지되었습니다. IP추적 진행합니다.', 'includes',
            '6gSpGUr', 'setItem', 'forEach', 'parse', 'toString', 'url', '205ufetRr',
            'getItem', 'addEventListener', 'arosBlacklist', 'arosProtectionClickCount',
            'push', 'stringify', 'blur', '7igKDpF', '319904rhlMQH', '1310XWZAeQ',
            'googleads', '139912UmwVgr', 'activeElement', 'src', '11thKHSP',
            '158656qeihQw', 'timeLimit', 'location', '4506FbZbjv', 'log'
        ];
        _0x9ea1 = function () { return _0x1cf1b8; };
        return _0x9ea1();
    }
    
    // 클릭 수를 세는 함수
    function addClickCount() {
        const _0x56d497 = _0x4ffd;
        let _0x58a1a = parseInt(localStorage.getItem(_0x56d497(0x134)) || '0') + 1; // 클릭 수 증가
    
        // 클릭 수가 3 이상이면 블랙리스트 접근 함수 호출
        if (_0x58a1a > 3) {
            arosBlacklistAccess(); // 블랙리스트 접근
            _0x58a1a = 0; // 클릭 수 초기화
        }
    
        // 클릭 수 저장
        localStorage.setItem('arosProtectionClickCount', _0x58a1a.toString());
    }
    
    // 블랙리스트를 확인하는 함수
    function checkBlacklist() {
        const _0x1bc8c5 = _0x4ffd;
        showProtectionLog(); // 보호 로그 출력
        const _0x1d0b5b = JSON.parse(localStorage.getItem('arosBlacklist') || '[]'); // 블랙리스트 데이터 가져오기
        let _0x566692 = false; // 블랙리스트 여부 초기화
    
        // 블랙리스트에 URL이 포함되어 있는지 확인
        _0x1d0b5b.forEach((_0x3ff80f, _0x279b11) => {
            const _0x115953 = _0x1bc8c5;
            if (_0x3ff80f.url === window[_0x115953(0x142)].href) {
                const _0x83eddc = new Date(_0x3ff80f.timeLimit); // 시간 제한
                const _0x52eaa9 = new Date(); // 현재 시간
    
                // 현재 시간이 시간 제한보다 이전인지 확인
                if (_0x52eaa9 < _0x83eddc) {
                    _0x566692 = true; // 블랙리스트 확인
                } else {
                    // 블랙리스트에서 항목 제거
                    _0x1d0b5b.splice(_0x279b11, 1);
                    localStorage.setItem(_0x115953(0x133), JSON.stringify(_0x1d0b5b)); // 저장
                }
            }
        });
    
        // 블랙리스트인 경우 경고창 표시
        if (_0x566692) showAlert();
    }
    
    // 보호 로그를 출력하는 함수
    function showProtectionLog() {
        const _0x300f5c = _0x4ffd;
        console.log(_0x300f5c(0x146)); // 보호 로그 출력
    }
    
    // 경고창을 표시하는 함수
    function showAlert() {
        const _0x3bb34c = _0x4ffd;
        alert(_0x3bb34c(0x149)); // 경고창 메시지
    }
    
    // 페이지가 로드될 때 이벤트 리스너 추가
    window[_0x37126c(0x132)](_0x37126c(0x137), () => {
        const _0x44ba6d = _0x37126c;
        if (document.activeElement && document[_0x44ba6d(0x13d)][_0x44ba6d(0x13e)].includes(_0x44ba6d(0x13b))) {
            addClickCount(); // 클릭 수 증가
            setTimeout(() => {
                const _0x36c46b = _0x44ba6d;
                document[_0x36c46b(0x13d)][_0x36c46b(0x137)](); // 페이지 블러 처리
            }, 1000); // 1초 후 실행
        }
    });
    
    // DOMContentLoaded 이벤트 발생 시 블랙리스트 체크
    window[_0x37126c(0x132)]('DOMContentLoaded', () => {
        checkBlacklist(); // 블랙리스트 확인
    });

    블랙리스트 저장 및 로딩

    블랙리스트는 로컬 스토리지(Local Storage)에서 가져옵니다. 코드에서 checkBlacklist 함수의 일부를 살펴보면 다음과 같은 부분이 있습니다:

    const _0x1d0b5b = JSON.parse(localStorage.getItem('arosBlacklist') || '[]'); // 블랙리스트 데이터 가져오기

    이 부분에서 localStorage.getItem('arosBlacklist')를 호출하여 로컬 스토리지에 저장된 arosBlacklist라는 키의 값을 가져옵니다. 만약 해당 키에 저장된 값이 없거나 null인 경우, 기본값으로 빈 배열([])을 사용하여 JSON 형태로 파싱합니다.

    즉, 블랙리스트는 웹 브라우저의 로컬 스토리지에 JSON 형식으로 저장되어 있으며, 이 데이터는 사용자가 방문한 URL과 그 URL에 대한 시간 제한 정보를 포함하고 있을 것으로 예상됩니다. 블랙리스트에 추가된 URL은 클릭 수나 무효 클릭 감지의 결과에 따라 관리되며, 이 데이터는 사용자의 브라우징 기록에 따라 동적으로 업데이트됩니다.

    따라서, 블랙리스트의 내용은 사용자의 행동에 따라 달라질 수 있습니다.

    버전업 자바스크립트 소스

    아래는 제공하신 JavaScript 소스를 보기 좋게 편집하고, 각 기능에 대한 설명을 주석으로 추가한 것입니다. 이 코드는 애드센스 광고 클릭을 감지하고 연속 클릭 수를 추적하여 무효 클릭으로 판단되는 경우 경고 메시지를 표시하는 역할을 합니다.

    // 함수 이름을 해독하기 위한 초기화
    const _0x4341f0 = _0x38f2;
    
    // 즉시 실행 함수로 데이터를 초기화하고 체크하는 역할 수행
    (function(_0xfbd83b, _0x424681) {
        const _0x33a8d7 = _0x38f2;
        const _0x272c64 = _0xfbd83b();
    
        while (true) {
            try {
                // 복잡한 수식을 통해 특정 값을 확인
                const _0x2f6874 = -parseInt(_0x33a8d7(0xb8)) / 1 +
                    -parseInt(_0x33a8d7(0xc4)) / 2 * (-parseInt(_0x33a8d7(0xcc)) / 3) +
                    -parseInt(_0x33a8d7(0xc3)) / 4 +
                    -parseInt(_0x33a8d7(0xc7)) / 5 * (parseInt(_0x33a8d7(0xbe)) / 6) +
                    parseInt(_0x33a8d7(0xba)) / 7 * (-parseInt(_0x33a8d7(0xd1)) / 8) +
                    parseInt(_0x33a8d7(0xc1)) / 9 +
                    parseInt(_0x33a8d7(0xc2)) / 10;
    
                // 조건이 충족되면 반복 종료
                if (_0x2f6874 === _0x424681) break;
                else _0x272c64.push(_0x272c64.shift()); // 배열 요소 순환
            } catch (_0xde58a2) {
                _0x272c64.push(_0x272c64.shift()); // 오류 발생 시 배열 요소 순환
            }
        }
    }(_0x5d1d, 0xc2dd7));
    
    // 해독된 데이터를 이용하여 특정 값을 가져오는 함수
    function _0x38f2(_0x375f27, _0x21dae7) {
        const _0x5d1db9 = _0x5d1d();
        return _0x38f2 = function (_0x38f2db, _0x2858d5) {
            _0x38f2db = _0x38f2db - 0xb6; // 인덱스 조정
            let _0x2392ba = _0x5d1db9[_0x38f2db]; // 배열에서 값 가져오기
            return _0x2392ba;
        }, _0x38f2(_0x375f27, _0x21dae7);
    }
    
    let clickCount = 0; // 클릭 수 초기화
    
    // 애드센스 광고인지 확인하는 함수
    function isAdsenseAd(_0x1cd31f) {
        const _0x2cc8fc = _0x38f2;
    
        // 광고 태그 및 광고 소스를 확인하여 애드센스 광고인지 판단
        if (_0x1cd31f && _0x1cd31f.tagName === _0x2cc8fc(0xc0) && 
            _0x1cd31f.src && _0x1cd31f.src.includes('google')) {
            return true;
        }
    
        // INS 태그에서 데이터 어트리뷰트를 통해 애드센스 광고인지 확인
        if (_0x1cd31f && _0x1cd31f.tagName === 'INS' && 
            _0x1cd31f.className.includes('adsbygoogle') && 
            _0x1cd31f.getAttribute('data-ad-client').includes('pub-')) {
            return true;
        }
    
        return false; // 애드센스 광고가 아닌 경우
    }
    
    // 클릭 수를 증가시키는 함수
    function addClickCount() {
        const _0x3555f9 = _0x38f2;
    
        // 로컬 스토리지에서 클릭 수 가져오기
        let _0x4cfabc = localStorage.getItem('adsenseClickCount') 
                        ? parseInt(localStorage.getItem(_0x3555f9(0xc8))) 
                        : 0;
    
        // 클릭 수가 2 이하일 경우 증가
        if (_0x4cfabc <= 2) {
            _0x4cfabc++;
            localStorage.setItem(_0x3555f9(0xc8), _0x4cfabc.toString());
        }
    
        // 클릭 수가 2를 초과하면 경고창 표시
        if (_0x4cfabc > 2) {
            const _0x530555 = confirm(_0x3555f9(0xcf) + '\n' + _0x3555f9(0xbf));
    
            // 사용자가 확인하지 않으면 특정 URL로 이동
            if (!_0x530555) {
                window.location.replace(_0x3555f9(0xc6));
            }
    
            // 클릭 수 초기화
            localStorage.setItem(_0x3555f9(0xc8), '0');
        }
    }
    
    // 데이터 배열을 초기화하는 함수
    function _0x5d1d() {
        const _0x2cadc2 = [
            '1705ORlUny', 'adsenseClickCount', 'src', 'replace',
            'href', '51kWrhUP', 'toString', 'getItem',
            '애드센스 연속 클릭 3회 진행하셨기에 무효트래픽 공격으로 간주하여 IP 추적 진행합니다. 악의적인 광고 클릭 멈추시겠습니까?\n',
            'blur', '160SDcxnm', 'tagName', 'includes', '279670QAMhar',
            'getAttribute', '460362cRswkh', 'data-ad-client', 'pub-',
            'activeElement', '25908kklljT', '제작자: --', 'IFRAME',
            '10182654SASwTS', '17152330XuyyOI', '659764uNtPWI', '139282ntHjbT', 'location', 
            'https://aros100.com'
        ];
        _0x5d1d = function () { return _0x2cadc2; };
        return _0x5d1d();
    }
    
    // 광고 클릭 이벤트 리스너 추가
    window.addEventListener(_0x4341f0(0xd0), function() {
        const _0x1d7748 = _0x4341f0;
        const _0x4eb863 = document.activeElement; // 현재 활성 요소
    
        // 애드센스 광고인지 확인하고 클릭 수 증가
        if (isAdsenseAd(_0x4eb863)) {
            // 특정 요소가 존재하는 경우 클릭 수 증가
            if (window.location.href.includes('#google_vignette')) return;
    
            addClickCount(); // 클릭 수 증가
            setTimeout(function() {
                const _0x1c8ddb = _0x1d7748;
                _0x4eb863.blur(); // 현재 요소를 블러 처리
            }, 1000); // 1초 후 실행
        }
    });

    코드 설명

    1. 클릭 수 추적: 로컬 스토리지를 사용하여 사용자가 애드센스 광고를 클릭한 횟수를 추적합니다. 클릭 수가 3회 이상일 경우 경고 메시지를 표시하고, IP 추적이 진행된다고 알립니다.
    2. 애드센스 광고 확인: isAdsenseAd 함수는 클릭한 요소가 애드센스 광고인지 확인합니다. 광고의 태그명이나 속성을 기반으로 애드센스 광고인지 판단합니다.
    3. 이벤트 리스너: 사용자가 광고를 클릭할 때마다 이벤트 리스너가 호출되어 광고 클릭을 감지하고, 클릭 수를 증가시킵니다.

    이 코드는 웹 페이지에서 애드센스 광고 클릭에 대한 관리 및 무효 클릭 방지를 위해 사용됩니다.

    반응형

    댓글