CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Que fait ce code JS ? Je ne comprends pas

DébutPage précedente
1
Page suivantePage suivante
UnBrun UnBrun
MP
Niveau 9
15 avril 2021 à 22:27:12

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 ?

Message édité le 15 avril 2021 à 22:29:57 par UnBrun
UnBrun UnBrun
MP
Niveau 9
15 avril 2021 à 22:51:49

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/");

[Kakuzu]2 [Kakuzu]2
MP
Niveau 24
16 avril 2021 à 00:43:55

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 fonction
data['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.

Message édité le 16 avril 2021 à 00:45:02 par [Kakuzu]2
UnBrun UnBrun
MP
Niveau 9
17 avril 2021 à 23:07:44

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

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment