Bonjour,
J'ai reçu un virus je pense, un lien pointant vers un site web avec ce script à l'intérieur :
var _0x254b=['replace','3349FyuwPx','1559500mgUZWU','1598674LOIaYp','619033iwKfqe','3KUMJxm','550HgMbBx','455mKGeGH','509837gfHrHO','2427SfkVYT','211598ewmLwH'];
var _0x3c1f = function(_0x3fd789,_0x438e16)
{
_0x3fd789=_0x3fd789-0x183;
var _0x254b3f=_0x254b[_0x3fd789];
return _0x254b3f;
};
var _0x4f8f1a=_0x3c1f;
(function(_0x3cb9be,_0x121a32){
var _0x358e9e=_0x3c1f;
while(!![]){
try{
var _0x3c7a29=-parseInt(_0x358e9e(0x18c))+-parseInt(_0x358e9e(0x18a))+parseInt(_0x358e9e(0x18b))+-parseInt(_0x358e9e(0x185))*-parseInt(_0x358e9e(0x18d))+parseInt(_0x358e9e(0x186))*parseInt(_0x358e9e(0x183))+parseInt(_0x358e9e(0x187))+-parseInt(_0x358e9e(0x184))*parseInt(_0x358e9e(0x189));
if(_0x3c7a29===_0x121a32)
break;
else
_0x3cb9be['push'](_0x3cb9be['shift']());
}
catch(_0xed1741){
_0x3cb9be['push'](_0x3cb9be['shift']());
}
}
}(_0x254b,0xed611),window['location'][_0x4f8f1a(0x188)]('https://www.bbc.com/'));
Cependant je n'arrive pas à comprendre ce qu'il fait,
Vous auriez une idée pour décrypter ?
Code dé uglifié :
'use strict';
/** @type {!Array} */
var _0x254b = ["replace", "3349FyuwPx", "1559500mgUZWU", "1598674LOIaYp", "619033iwKfqe", "3KUMJxm", "550HgMbBx", "455mKGeGH", "509837gfHrHO", "2427SfkVYT", "211598ewmLwH"];
/**
* @param {number} level
* @param {?} ai_test
* @return {?}
*/
var _0x3c1f = function(level, ai_test) {
/** @type {number} */
level = level - 387;
var rowsOfColumns = _0x254b[level];
return rowsOfColumns;
};
/** @type {function(number, ?): ?} */
var _0x4f8f1a = _0x3c1f;
(function(data, oldPassword) {
/** @type {function(number, ?): ?} */
var toMonths = _0x3c1f;
for (; !![];) {
try {
/** @type {number} */
var userPsd = -parseInt(toMonths(396)) + -parseInt(toMonths(394)) + parseInt(toMonths(395)) + -parseInt(toMonths(389)) * -parseInt(toMonths(397)) + parseInt(toMonths(390)) * parseInt(toMonths(387)) + parseInt(toMonths(391)) + -parseInt(toMonths(388)) * parseInt(toMonths(393));
if (userPsd === oldPassword) {
break;
} else {
data["push"](data["shift"]());
}
} catch (_0xed1741) {
data["push"](data["shift"]());
}
}
})(_0x254b, 972305), window["location"][_0x4f8f1a(392)]("https://www.bbc.com/");
Tu as ce tableau de valeurs :
var array_var =['replace','3349FyuwPx','1559500mgUZWU','1598674LOIaYp','619033iwKfqe','3KUMJxm','550HgMbBx','455mKGeGH','509837gfHrHO','2427SfkVYT','211598ewmLwH'];
Et une fonction qui te renvoie la valeur d'un élément du tableau à un index donné :
var at_index= function(index, useless)
{
index = index- 387;
var arrayVal =array_var[index];
return arrayVal;
};
Ensuite tu as la fonction principale qui est une fonction self invoked :
(function(data,oldPsd){
while(!![]) {
try{
var userPsd = -parseInt(at_index(396)) + -parseInt(at_index(394)) + parseInt(at_index(395)) + -parseInt(at_index(389)) * -parseInt(at_index(397)) + parseInt(at_index(390)) * parseInt(at_index(387)) + parseInt(at_index(391)) + -parseInt(at_index(388)) * parseInt(at_index(393));
if(userPsd === oldPsd)
break;
else
data['push'](data['shift']());
}
catch(bug){
data['push'](data['shift']());
}
}
}(array_var, 972305), window['location'][at_index(392)]('https://www.bbc.com/')););
Pour commencer, on a une boucle while infinie, !![]
vaut toujours true (!!
= permet d'avoir un booléen)
Dans cette boucle while on va remplir la variable userPsd
par des multiplications/additions/soustractions de résultats de la fonction at_index
appliqué à un parseInt()
. La fonction at_index
renvoie la valeur à l'index passé en paramètre moins 387, donc par exemple :
at_index(394) équivaut à renvoyer la valeur à l'index 7, soit la valeur '455mKGeGH'.
Ensuite on effectue un parseInt
sur cette valeur, ce qui va garder seulement les entiers, donc avec '455mKGeGH' on trouve 455
En faisant le calcul une 1ère fois on obtient NaN à cause du parseInt('replace')
.
Quand on passe à la condition (if (userPsd === oldPsd))
, on compare Nan === 972305 ce qui est faux, on passe donc dans le else.
data['push'](data['shift']())
data['shift']() => on prend la 1ère valeur du tableau et on l'enlève du tableau, en la renvoyant en retour de cette fonctiondata['push'](data['shift']())
=> on pousse la valeur renvoyé juste avant à la fin du tableau (on prend donc la 1ère valeur et on la pousse à la dernière position)
En faisant ça le tableau fait une "rotation" au niveau de ses éléments, la question qu'on se pose c'est de savoir comment on sort de cette boucle ?
Et bien si on regarde les index qu'on appelle pour instancier notre variable userPsd
, on voit qu'il n'y a jamais at_index(392
), donc qu'est ce qu'il se passe si on arrive à placer notre valeur 'replace' à cet index ?
Pour se faire il faut faire 6 "rotation" (6 fois le data push/shift), on obtient cet arrangement :
["550HgMbBx", "455mKGeGH", "509837gfHrHO", "2427SfkVYT", "211598ewmLwH", "replace", "3349FyuwPx", "1559500mgUZWU", "1598674LOIaYp", "619033iwKfqe", "3KUMJxm"]
Si on remplace chaque valeur par le résultat de la fonction at_index
on trouve
var userPsd = -parseInt("619033iwKfqe") + -parseInt("1559500mgUZWU") + parseInt("1598674LOIaYp") + -parseInt("509837gfHrHO") * -parseInt("3KUMJxm") + parseInt("2427SfkVYT") * parseInt("550HgMbBx") + parseInt("211598ewmLwH") + -parseInt("455mKGeGH") * parseInt("3349FyuwPx");
Ce qui donne 972305, soit 972305 === 972305, on sort donc du while, et on exécute la dernière fonction en sortie :
window['location'][at_index(392)]('https://www.bbc.com/'));
=window['location']['replace'](' https://www.bbc.com/ '));
Soit une redirection vers la bbc
Maintenant la question de savoir à quoi ça sert, je ne sais pas, tu as enlevé quelque chose dans le if ? En tout cas je ne pense pas que dans l'état ce programme fasse quoi que ce soit de dangereux.
wow merci de ta réponse que je vais lire attentivement plusieurs fois pour la comprendre !
Je n'ai rien enlevé au code non,
Il n'y avait que ce code sur la page malicieuse qui était envoyée par le pirate