Sólo unas pocas cosas pequeñas, no he descubierto la cosa por completo. Siéntase libre de expandir y comentar sobre esto.
Después de que embellecemos el código, obtenemos: enlace
Vemos:
var C4 = new Array(0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74...
Y luego una función
function DC() {
var Wb = C4.length,
_yu = new Array(Wb),
i;
for (i = 0; i < Wb; i++) _yu[i] = String.fromCharCode(C4[i]);
document.open();
document.clear();
document.write(_yu.join(""));
document.close();
};
Por lo tanto, esto solo realiza HEX - > La conversión ASCII y escribe la cadena decodificada en el documento. Esto a su vez evalúa a
<script>
function _ii(Cc) {
var Dc, yx, _099, _ln, o, _x02, _jh;
Dc = new Array(4);
_jh = XF();
_ln = _jh.length;
yx = _r0(Cc, _s88n(_jh[_ln - (0x4c ^ 0x4e)]), 0x03e8);
_099 = ZZ(_xsii(_jh[_ln - (0x2b ^ 0x2f)]), yx);
_x02 = ZZ(_xsii(_jh[_ln - (0x98 ^ 0x9B)]), yx);
o = JJ(_jh, _099, _x02, Dc);
if ((Dc.join("")) == _jh[_ln - 1]) {
document.write(o.join(""));
document.close();
} else {
msg.innerHTML = " ";
alert('Senha inválida!');
};
_ip = false;
};
</script>
Aquí es donde se pone interesante, porque se llaman otras funciones ofuscadas. Aquí es donde se está utilizando la matriz mágica devuelta por "XF ()":
function XF() {
return new Array('0cd0a85cd816....6ec24dde78ca48', 'd6860accfa237d675ba73acc5e486168', 'f81845c6e66b62e5fc758da50dc73d68', 'a96751384baa020ef306acaed4e7851683989674', 'eb3494af236b53ec970b830e308ff41d');
};
Ya que solo necesitamos capturar la cadena descifrada que está escrita nuevamente en document
, podemos modificar fácilmente el código para generar la cadena en su lugar.
Pero, para eso necesitamos el objeto "cc" que se usa dentro de _ii()
. Vemos que hay una función que llama a _ii()
:
function A0(Cc) {
if (!_ip) {
msg.innerHTML = ms2;
window.setTimeout(function() {
_ii(Cc);
}, 0);
_ip = true;
};
};
Pero entonces, ¿quién llama a A0
en su lugar y con qué argumento? Miramos el HTML y lo vemos
<form name="F1" onsubmit="A0(document.F1.P1.value)" action="javascript:A0(document.F1.P1.value)">
Y también
<a href="javascript: A0(document.F1.P1.value);">
Por lo tanto, necesitamos el valor de la forma F1
y el subobjeto P1
para eso
Sin embargo, no he descubierto el argumento correcto para eso en este momento. Tal vez un valor codificado en algún lugar dentro. Cuando ejecuto la versión modificada de la función con el argumento "abc"
para que salga la cadena que está escrita en el documento, solo obtengo basura ahora mismo
Siresolvemoselargumentocorrecto,estoprobablementesedescifrecorrectamenteaunanuevapiezademalware.ElcódigoquehevistohastaahoraessoloHashing(MD5oSHA1)ycosasdecifrado.ElmalwarerealdebeestardentrodelamatrizenlafunciónXF()
.
(Funciónmodificada:)
function_ii(Cc){console.log("inside");
var Dc, yx, _099, _ln, o, _x02, _jh;
Dc = new Array(4);
console.log("good");
_jh = XF();
console.log("outside");
_ln = _jh.length;
console.log("good");
yx = _r0(Cc, _s88n(_jh[_ln - (0x4c ^ 0x4e)]), 0x03e8);
_099 = ZZ(_xsii(_jh[_ln - (0x2b ^ 0x2f)]), yx);
_x02 = ZZ(_xsii(_jh[_ln - (0x98 ^ 0x9B)]), yx);
o = JJ(_jh, _099, _x02, Dc);
console.log(o.join(""));
/*if ((Dc.join("")) == _jh[_ln - 1]) {
document.write(o.join(""));
document.close();
} else {
msg.innerHTML = " ";
alert('Senha inválida!');
};*/
_ip = false;
};
Es seguro abrir el formulario, ya no existe ninguna de las imágenes vinculadas. Tenemos la siguiente página:
Eltextoquesedejaenelcuadrodetextoparecedecir"Por favor ingrese su contraseña". Entonces, esto parece que realmente tenemos que saber la contraseña para descifrar el texto. Pero ¿cuál es la contraseña? Pensé que esto era una estafa? Hasta que se sepa, la contraseña no parece ser enviada a un servidor de terceros. Solo la contraseña correcta descifra otra cosa (o estoy fallando en descifrar el código y hace otra cosa)