Vio algunos de los 200 sitios web principales (por Alexa) usando ofuscación en el código javascript. ¿Alguna idea sobre por qué lo hacen? Mi conjetura es que lo hacen para evitar el raspado de datos, pero no estoy seguro. Gracias.
Booking.com
Obtuviste buena información de la respuesta y los comentarios, pero no respondieron exactamente a la pregunta.
El motivo por el que se utiliza el código confuso depende del autor.
El autor es un imbécil : si el autor está escribiendo malware, los revisores de malware pueden analizar fácilmente el código no confuso mediante el uso de firmas, presencia de tokens, precompilación y otros métodos. En este caso, el autor quiere que el malware se propague, por lo tanto, el código está ofuscado para intentar evitar la detección.
(nota, esto no es legítimo, por lo tanto, no responde a tu pregunta, pero lo agregué para la posteridad)
El autor está utilizando un código patentado : si el autor está escribiendo un código de propiedad, ya sea en el java / vbscript o en la biblioteca de ActiveX que está usando, el código ofuscado es la manera del programador de evitar lo casual pirata informático de aprender, y posiblemente explotar, robar, obtener beneficios o revelar estos secretos.
El autor está usando funciones secretas : si el autor está escribiendo un código que usa funciones secretas (no publicadas) en las bibliotecas ActiveX, ofuscar el acceso a esas funciones puede mitigar que el pirata informático ocasional vea, use, y explotando este código. Aunque es una práctica peligrosa, a veces, los programadores usan la lógica de "puerta trasera", algo que no requiere autenticación, o cheques y balances costosos, etc. Este tipo de código a veces se llama código de "depuración" - algo temporal o algo que es deliberadamente dejados en producción, y cuales "no deberían" ser usados.
El autor está codificando una contraseña : si el autor está escribiendo un código que es información protegida por codificación rígida (una contraseña), es posible que el autor desee mantener esta información oculta al pirata informático informal o bot.
El autor está codificando un correo electrónico : si el autor está escribiendo un código que codifica un correo electrónico (por ejemplo, como parte de un enlace "contáctanos"), el autor puede querer mantener esta información está oculta a los bots que buscan correos electrónicos para enviar correo no deseado a.
El autor está utilizando un código obsoleto o beta : si el autor está escribiendo un código que utiliza funciones que no están destinadas a ser utilizadas en la producción regular, por ejemplo, el código está obsoleto o está en versión beta / alfa - entonces confuscarlo mitigará a cualquiera que intente copiar, usar, documentar o confiar en esto. Aquí, no hay ningún intento de dañar la computadora de alguien o de robar el código.
El autor utiliza un buen código que activa un falso positivo : si el autor está escribiendo un código que tiene una firma que se sabe que genera un falso positivo por parte de los virus, el autor podría intentar mitigar esto al ofuscar el código, para no activar la alarma. Esto puede parecer similar al primer escenario, excepto que en el primero, el autor es malévolo, mientras que en este caso, el autor no está tratando de subvertir el sistema de nadie.
The Casual Hacker : tenga en cuenta que cualquier pirata informático determinado verá todo esto y analizará el código fácilmente según sea necesario. La seguridad del contenido generalmente se considera un santo grial. Todo lo que se envíe a un cliente debe ser descifrado, decodificado o desenfocado antes de ser usado, y ahí radica la debilidad: una vez descifrado, decodificado o desenfocado, el contenido es accesible.
No es un script confuso. solo se minimiza la secuencia de comandos para una carga más rápida.
Estos son algunos scripts de muestra.
Script normal:
StackExchange.ready(function() {
StackExchange.using("postValidation", function() {
StackExchange.postValidation.initOnBlurAndSubmit($('#post-form'), 2, 'answer');
});
StackExchange.question.init({
showAnswerHelp: true,
totalCommentCount: 2,
shownCommentCount: 2,
highlightColor: '#F4A83D',
backgroundColor: '#FFF',
questionId: 128839
});
styleCode();
StackExchange.realtime.subscribeToQuestion('162', '128839');
StackExchange.using("gps", function() {
StackExchange.gps.trackOutboundClicks('#content', '.post-text');
});
});
Script minimizado:
StackExchange.ready(function(){StackExchange.using("postValidation",function(){StackExchange.postValidation.initOnBlurAndSubmit($('#post-form'),2,'answer')});StackExchange.question.init({showAnswerHelp:true,totalCommentCount:2,shownCommentCount:2,highlightColor:'#F4A83D',backgroundColor:'#FFF',questionId:128839});styleCode();StackExchange.realtime.subscribeToQuestion('162','128839');StackExchange.using("gps",function(){StackExchange.gps.trackOutboundClicks('#content','.post-text')})});
Secuencia ofuscada (usando mi método propio):
var _0x1fc5 = ["\x30\x2E\x38\x28\x31\x28\x29\x7B\x30\x2E\x33\x28\x22\x34\x22\x2C\x31\x28\x29\x7B\x30\x2E\x34\x2E\x39\x28\x24\x28\x27\x23\x35\x2D\x61\x27\x29\x2C\x32\x2C\x27\x62\x27\x29\x7D\x29\x3B\x30\x2E\x63\x2E\x64\x28\x7B\x65\x3A\x66\x2C\x67\x3A\x32\x2C\x68\x3A\x32\x2C\x69\x3A\x27\x23\x6A\x27\x2C\x6B\x3A\x27\x23\x6C\x27\x2C\x6D\x3A\x36\x7D\x29\x3B\x6E\x28\x29\x3B\x30\x2E\x6F\x2E\x70\x28\x27\x71\x27\x2C\x27\x36\x27\x29\x3B\x30\x2E\x33\x28\x22\x37\x22\x2C\x31\x28\x29\x7B\x30\x2E\x37\x2E\x72\x28\x27\x23\x73\x27\x2C\x27\x2E\x35\x2D\x74\x27\x29\x7D\x29\x7D\x29\x3B", "\x7C", "\x73\x70\x6C\x69\x74", "\x53\x74\x61\x63\x6B\x45\x78\x63\x68\x61\x6E\x67\x65\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x7C\x75\x73\x69\x6E\x67\x7C\x70\x6F\x73\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x7C\x70\x6F\x73\x74\x7C\x31\x32\x38\x38\x33\x39\x7C\x67\x70\x73\x7C\x72\x65\x61\x64\x79\x7C\x69\x6E\x69\x74\x4F\x6E\x42\x6C\x75\x72\x41\x6E\x64\x53\x75\x62\x6D\x69\x74\x7C\x66\x6F\x72\x6D\x7C\x61\x6E\x73\x77\x65\x72\x7C\x71\x75\x65\x73\x74\x69\x6F\x6E\x7C\x69\x6E\x69\x74\x7C\x73\x68\x6F\x77\x41\x6E\x73\x77\x65\x72\x48\x65\x6C\x70\x7C\x74\x72\x75\x65\x7C\x74\x6F\x74\x61\x6C\x43\x6F\x6D\x6D\x65\x6E\x74\x43\x6F\x75\x6E\x74\x7C\x73\x68\x6F\x77\x6E\x43\x6F\x6D\x6D\x65\x6E\x74\x43\x6F\x75\x6E\x74\x7C\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x43\x6F\x6C\x6F\x72\x7C\x46\x34\x41\x38\x33\x44\x7C\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72\x7C\x46\x46\x46\x7C\x71\x75\x65\x73\x74\x69\x6F\x6E\x49\x64\x7C\x73\x74\x79\x6C\x65\x43\x6F\x64\x65\x7C\x72\x65\x61\x6C\x74\x69\x6D\x65\x7C\x73\x75\x62\x73\x63\x72\x69\x62\x65\x54\x6F\x51\x75\x65\x73\x74\x69\x6F\x6E\x7C\x31\x36\x32\x7C\x74\x72\x61\x63\x6B\x4F\x75\x74\x62\x6F\x75\x6E\x64\x43\x6C\x69\x63\x6B\x73\x7C\x63\x6F\x6E\x74\x65\x6E\x74\x7C\x74\x65\x78\x74", "\x72\x65\x70\x6C\x61\x63\x65", "", "\x5C\x77\x2B", "\x5C\x62", "\x67"]
eval(function(_0x5f63x1, _0x5f63x2, _0x5f63x3, _0x5f63x4, _0x5f63x5, _0x5f63x6) {
_0x5f63x5 = function(_0x5f63x3) {
return _0x5f63x3.toString(_0x5f63x2)
};
if (!_0x1fc5[5][_0x1fc5[4]](/^/, String)) {
while (_0x5f63x3--) {
_0x5f63x6[_0x5f63x5(_0x5f63x3)] = _0x5f63x4[_0x5f63x3] || _0x5f63x5(_0x5f63x3)
}
_0x5f63x4 = [function(_0x5f63x5) {
return _0x5f63x6[_0x5f63x5]
}];
_0x5f63x5 = function() {
return _0x1fc5[6]
};
_0x5f63x3 = 1
};
while (_0x5f63x3--) {
if (_0x5f63x4[_0x5f63x3]) {
_0x5f63x1 = _0x5f63x1[_0x1fc5[4]](new RegExp(_0x1fc5[7] + _0x5f63x5(_0x5f63x3) + _0x1fc5[7], _0x1fc5[8]), _0x5f63x4[_0x5f63x3])
}
}
return _0x5f63x1
}
(_0x1fc5[0], 30, 30, _0x1fc5[3][_0x1fc5[2]](_0x1fc5[1]), 0, {}))
Mira, esos 3 scripts anteriores son iguales (iguales).
Lea otras preguntas en las etiquetas obfuscation javascript