Comencé cambiando el nombre de algunas variables para hacer las cosas un poco más comprensibles:
function obscurify(function_input) {
var returnstring, local_counter;
returnstring = "";
for (local_counter = 0; local_counter < function_input.length; local_counter++)
{
returnstring += String.fromCharCode(function_input.charCodeAt(local_counter) + 2 - local_counter % 14);
}
return returnstring
}
Esta es la primera función, cuando ejecutamos la cadena oscura pdqvgvxFtpuj~tmmFscpi
a través de ella, recibimos la palabra requestAnimationFrame
como se muestra en esta bandeja (alertbox por delante).
La función h()
me molestó un poco, así que empecé a buscar por razones por las que la gente usa la función requestanimationframe
.
Fue entonces cuando encontré esta página :
Limitar la velocidad de fotogramas mientras se utiliza requestAnimationFrame puede ser una
deseo común, especialmente cuando codificas juegos donde quieres tu
Animaciones y mecánica para no exceder una marca particular de cuadros por
segundo. Veamos dos formas de hacerlo.
La primera forma que describe el autor es a través de setTimeOut
, pero luego escribe esto:
Ok, los navegadores no pueden optimizar setTimeout o setInterval. Así que es un poco
mejor hacer nuestros propios cálculos y restringir la velocidad de fotogramas. Vamos a
mira cómo.
Y luego procede con el siguiente código:
var fps = 30;
var now;
var then = Date.now();
var interval = 1000/fps;
var delta;
function draw() {
requestAnimationFrame(draw);
now = Date.now();
delta = now - then;
if (delta > interval) {
// update time stuffs
// Just 'then = now' is not enough.
// Lets say we set fps at 10 which means
// each frame must take 100ms
// Now frame executes in 16ms (60fps) so
// the loop iterates 7 times (16*7 = 112ms) until
// delta > interval === true
// Eventually this lowers down the FPS as
// 112*10 = 1120ms (NOT 1000ms).
// So we have to get rid of that extra 12ms
// by subtracting delta (112) % interval (100).
// Hope that makes sense.
then = now - (delta % interval);
// ... Code for Drawing the Frame ...
}
}
draw();
Que se parece mucho a los cálculos que se realizan en nuestro código.
Pero, ¿por qué aparece esto en Skype sin que yo haga nada?
Porque los navegadores y Javascript están literalmente en todas partes.
Acabo de iniciar Skype y no me dio ningún error, pero me muestra anuncios.
Mi instinto me dice que el navegador integrado que carga el anuncio no tiene manejador de URL de datos en su caso, por lo que Skype parece dar ese error.
El código es simplemente agregar un administrador de eventos, y asegurarse de que el FPS no se rompa cada vez que se llama al evento. (Cambiar entre anuncios, hacer que los anuncios se ejecuten sin problemas, hacer que el icono de carga se ejecute sin problemas, ...)
Si los anuncios superan o superan su tiempo de visualización en 1 000 000 impresiones de 30 segundos, una diferencia de 10 ms puede escalar increíblemente rápido y, por lo tanto, otorga a sus anunciantes más o menos tiempo de visualización del que pagan.
Pero, ¿por qué está oscuro?
Según el comentario de @dandavis, de hecho no hay ninguna razón aparente para ofuscar este código, está disponible de forma gratuita en Internet (como he vinculado anteriormente).
Sin embargo, el mismo navegador integrado que ejecuta este código, también podría albergar un marco de inicio de sesión, por ejemplo.
No vamos a volver a escribir un controlador para el código oscuro y el no oscuro cuando es mucho más fácil y menos propenso a errores simplemente ejecutar todo el código a través de un ofuscador si lo necesitamos una vez.
Es muy probable que la razón por la que se ofusque esto sea una Regla general: ofuscar todo el Código JS.