• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Analizowanie kodu js

Object Storage Arubacloud
0 głosów
167 wizyt
pytanie zadane 23 lutego 2023 w JavaScript przez niezalogowany

Uczę się testów penetracyjnych i pomyślałem sobie aby przejść na obojętnie jaka stronę internetowa i przeanalizować co robi dany kod na stronie.

O ile rozumiem co robi ta ta pierwsza instrukcja (przynajmniej taka mam nadzieje) w funkcji eval o tyle kompletnie nie rozumiem co robi ta druga instrukcja rozpoczynajaca się od ciagu ('7 G.  

Z góry przepraszam za niesformatowany kod.

 

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7 G={j:"T+/=",S:C(5){7 8="";7 t,o,m,v,s,h,f;7 i=0;5=G.J(5);F(i<5.E){t=5.q(i++);o=5.q(i++);m=5.q(i++);v=t>>2;s=((t&3)<<4)|(o>>4);h=((o&H)<<2)|(m>>6);f=m&u;p(M(o)){h=f=z}x p(M(m)){f=z}8=8+k.j.l(v)+k.j.l(s)+k.j.l(h)+k.j.l(f)}B 8},R:C(5){7 8="";7 t,o,m;7 v,s,h,f;7 i=0;5=5.I(/[^A-P-Q-9\\+\\/\\=]/g,"");F(i<5.E){v=k.j.D(5.l(i++));s=k.j.D(5.l(i++));h=k.j.D(5.l(i++));f=k.j.D(5.l(i++));t=(v<<2)|(s>>4);o=((s&H)<<4)|(h>>2);m=((h&3)<<6)|f;8=8+d.b(t);p(h!=z){8=8+d.b(o)}p(f!=z){8=8+d.b(m)}}8=G.O(8);B 8},J:C(e){e=e.I(/\\r\\n/g,"\\n");7 a="";10(7 n=0;n<e.E;n++){7 c=e.q(n);p(c<w){a+=d.b(c)}x p((c>Y)&&(c<U)){a+=d.b((c>>6)|V);a+=d.b((c&u)|w)}x{a+=d.b((c>>N)|L);a+=d.b(((c>>6)&u)|w);a+=d.b((c&u)|w)}}B a},O:C(a){7 e="";7 i=0;7 c=W=y=0;F(i<a.E){c=a.q(i);p(c<w){e+=d.b(c);i++}x p((c>Z)&&(c<L)){y=a.q(i+1);e+=d.b(((c&X)<<6)|(y&u));i+=2}x{y=a.q(i+1);K=a.q(i+2);e+=d.b(((c&H)<<N)|((y&u)<<6)|(K&u));i+=3}}B e}}',62,63,'|||||input||var|output||utftext|fromCharCode||String|string|enc4||enc3||_keyStr|this|charAt|chr3||chr2|if|charCodeAt||enc2|chr1|63|enc1|128|else|c2|64||return|function|indexOf|length|while|Base64|15|replace|_utf8_encode|c3|224|isNaN|12|_utf8_decode|Za|z0|decode|encode|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|2048|192|c1|31|127|191|for'.split('|'),0,{}));

 

1 odpowiedź

+1 głos
odpowiedź 23 lutego 2023 przez tangarr Mędrzec (154,780 p.)

Funkcja eval przyjmuje napis. Nie ma potrzeby, żebyś ręcznie analizował funkcję która go generuje.
Wykonaj kod wewnątrz eval a dostaniesz kod który został ukryty.
Dla czytelności użyłem narzędzia https://beautifier.io do przeformatowania go do czytelnej postaci.

node / tmp / 96 VrjLnRb1.js
var Base64 = {
    _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
    encode: function(input) {
        var output = "";
        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
        var i = 0;
        input = Base64._utf8_encode(input);
        while (i < input.length) {
            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);
            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;
            if (isNaN(chr2)) {
                enc3 = enc4 = 64
            } else if (isNaN(chr3)) {
                enc4 = 64
            }
            output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4)
        }
        return output
    },
    decode: function(input) {
        var output = "";
        var chr1, chr2, chr3;
        var enc1, enc2, enc3, enc4;
        var i = 0;
        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
        while (i < input.length) {
            enc1 = this._keyStr.indexOf(input.charAt(i++));
            enc2 = this._keyStr.indexOf(input.charAt(i++));
            enc3 = this._keyStr.indexOf(input.charAt(i++));
            enc4 = this._keyStr.indexOf(input.charAt(i++));
            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;
            output = output + String.fromCharCode(chr1);
            if (enc3 != 64) {
                output = output + String.fromCharCode(chr2)
            }
            if (enc4 != 64) {
                output = output + String.fromCharCode(chr3)
            }
        }
        output = Base64._utf8_decode(output);
        return output
    },
    _utf8_encode: function(string) {
        string = string.replace(/\r\n/g, "\n");
        var utftext = "";
        for (var n = 0; n < string.length; n++) {
            var c = string.charCodeAt(n);
            if (c < 128) {
                utftext += String.fromCharCode(c)
            } else if ((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128)
            } else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128)
            }
        }
        return utftext
    },
    _utf8_decode: function(utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;
        while (i < utftext.length) {
            c = utftext.charCodeAt(i);
            if (c < 128) {
                string += String.fromCharCode(c);
                i++
            } else if ((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i + 1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2
            } else {
                c2 = utftext.charCodeAt(i + 1);
                c3 = utftext.charCodeAt(i + 2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3
            }
        }
        return string
    }
}

Dopiero ten kod zacznij analizować

komentarz 23 lutego 2023 przez niezalogowany
Nie rozumiem jaki ukryty kod?
komentarz 23 lutego 2023 przez tangarr Mędrzec (154,780 p.)
Funkcja eval tak na prawdę wykonuje kod który ci wkleiłem.

Użyta została metoda obfuskacji (zaciemniania kodu) aby ukryć ten kod przed osobą czytającą kod.
komentarz 23 lutego 2023 przez niezalogowany
Jak można wywołać funkcję w zmiennej Base64?
komentarz 23 lutego 2023 przez tangarr Mędrzec (154,780 p.)
Zmienna globalna Base64 jest prawdopodobnie używana przez inny skrypt.
komentarz 24 lutego 2023 przez niezalogowany
Nie rozumiem jedynie jak działa operator >> i <<.

Analizowałem chyba z ponad godzinę i nie rozumiem.
1
komentarz 24 lutego 2023 przez tangarr Mędrzec (154,780 p.)
A próbowałeś to wygooglować?
Operatory << i >> służą do przesunięcia bitowego
Wyjaśnienie https://pl.wikipedia.org/wiki/Przesuni%C4%99cie_bitowe.

Podobne pytania

+1 głos
2 odpowiedzi 200 wizyt
pytanie zadane 8 lutego 2020 w JavaScript przez Dev26 Nowicjusz (130 p.)
0 głosów
0 odpowiedzi 700 wizyt
0 głosów
0 odpowiedzi 226 wizyt
pytanie zadane 26 marca 2017 w JavaScript przez marcinconn Obywatel (1,560 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...