Как работает данный обфускатор на Javascript?

228
18 июня 2018, 07:00

Есть сайт, выдающий прокси, в шапке у которого есть такая странная функция

<script type="text/javascript">
    eval(function(p, r, o, x, y, s) {
        y = function(c) {
            return (c < r ? '' : y(parseInt(c / r))) + ((c = c % r) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
        };
        if (!''.replace(/^/, String)) {
            while (o--) {
                s[y(o)] = x[o] || y(o)
            }
            x = [function(y) {
                return s[y]
            }];
            y = function() {
                return '\\w+'
            };
            o = 1
        };
        while (o--) {
            if (x[o]) {
                p = p.replace(new RegExp('\\b' + y(o) + '\\b', 'g'), x[o])
            }
        }
        return p
    }('f=D^C;g=B^E;m=F^A;n=8;h=1;k=2;b=3;i=H^G;l=J^y;t=6;a=u^x;q=z^w;d=v^I;e=5;c=4;j=0;o=W^X;r=7;p=9;s=V^T;K=j^l;N=h^i;U=k^g;M=b^a;L=c^d;O=e^m;P=t^s;S=r^q;R=n^o;Q=p^f;', 60, 60, '^^^^^^^^^^Four5Two^Seven^Five^Five1Seven^Four^Seven4Five^Six5Six^Zero^Eight2Zero^Eight^Three^Zero9Three^Two4Eight^Two^EightFiveOne^Nine^Five3Nine^Six^Eight3Four^One^9298^5789^1337^3129^88^1134^80^2155^6588^5020^8000^999^8118^572^1080^6637^Seven6NineSix^ThreeSixTwoZero^Five3EightFive^OneSixZeroNine^ZeroTwoFourSeven^Six5ThreeThree^Eight1OneFour^FourFiveSixOne^FourZeroFiveTwo^443^Nine5SevenEight^8121^1777^8085'.split('\u005e'), 0, {}))
</script>

Она как-то шифрует номер порта, чтобы его нельзя было просто так спарсить. Ниже, в коде сайта, есть такая вставка

<script type="text/javascript">document.write("<font class=spy2>:<\/font>"+(OneSixZeroNine^Eight2Zero)+(Seven6NineSix^Zero9Three)+(FourFiveSixOne^EightFiveOne)+(Seven6NineSix^Zero9Three))</script>

Она преобразуется в нормальное число. Отладчик показывает, что эти константы определены примерно так:

Two = 8;
Zero = 1;
Three = 2;
Seven = 3;
Eight2Zero = 572 ^ 8118;

То есть это исключающее или с набором констант. Функция вычисляется в момент загрузки, как я понимаю. Объясните, пожалуйста, что это за хитрые регулярки и как работает такое вычисление. Спасибо.

READ ALSO
scrollIntoView съедает следующий клик

scrollIntoView съедает следующий клик

Есть кастомный дропдаун (вообще на реакте, но это не важно)

207
изменение ссылки href при помощи jQuery в таблице

изменение ссылки href при помощи jQuery в таблице

Всем привет! Делаю таблицу с товаром, в которой будет меняться количество товара и сумма заказаНа кнопку "купить" меняется ссылка подобным...

227
Запрет на ввод знака &ldquo;минус&rdquo; в input страницы (JSF)

Запрет на ввод знака “минус” в input страницы (JSF)

Нужно сделать запрет на ввод знака "минус" в поле inputСтраница написана с использованием JSF и Primefaces

197
Spring: @Configuration vs non-@Configuration classes

Spring: @Configuration vs non-@Configuration classes

В документации приведен такой пример:

205