Question:
Analyse de JavaScript hautement obscurci
Adam Caudill
2013-04-01 08:27:20 UTC
view on stackexchange narkive permalink

J'ai récemment analysé une page Web contenant du JavaScript très obscur. Il est clair que l'auteur avait fait pas mal d'efforts pour la rendre aussi difficile à comprendre que possible. J'ai vu plusieurs variantes de ce code - il y a suffisamment de similitudes pour qu'il soit clair qu'elles ont la même source, mais suffisamment différentes pour que la solution pour désobfusquer change à chaque fois.

J'ai commencé par exécuter l'URL via VirusTotal, qui a obtenu un score de 0/46 - c'était donc quelque chose d'intéressant et qui n'était pas détecté par le logiciel antivirus (au moins statiquement). Ensuite, j'ai essayé de l'exécuter via jsunpack pour voir si cela pouvait avoir un sens - pas de chance, cela a cassé l'analyseur.

En regardant le code, il y avait quelques méthodes qui ont été conçus pour prêter à confusion, puis plusieurs Ko de chaînes comme celle-ci qui seraient finalement décodées en javascript et exécutées:

  22 = "; 4kqkk; 255ie; 35bnh; 4mehn; 2lh3b; 7i29n ; 6m2jb; 7jhln; 562ik ... " 

Après avoir fouillé pendant quelques minutes, j'ai pu déterminer que le morceau de code sur lequel je parlais vraiment était le suivant:

  try {document.body -} catch (dgsdg) {e (a);}  

Dans ce cas, e avait un alias eval et a était une chaîne qui avait été manipulée par les différentes fonctions au début du fichier (et transmise via une série d'affectations trompeuses).

Pour obtenir rapidement la valeur de a j'ai modifié le code en Base64, je l'ai encodé et sorti la valeur, puis j'ai ouvert le fichier HTML dans Chrome sur une VM (déconnecté en om le réseau):

  document.write (window.btoa (a))  

Cela m'a permis d'obtenir la valeur que je cherchais, mais le processus a pris trop de temps - et si j'avais manqué un autre eval , il est possible que j'aie pu exécuter ce qui était clairement du code malveillant. J'ai donc pu obtenir ce dont j'avais besoin et identifier le malware qu'il essayait de supprimer, mais le processus était trop lent et trop risqué.

Existe-t-il de meilleures façons d'exécuter du javascript comme celui-ci dans un bac à sable sécurisé pour minimiser les risques liés à son exécution? Je ne vois aucun moyen de créer un outil pour désobfusquer de manière générique ce type de code, donc je ne vois aucun moyen de l'exécuter (ou de créer des outils ponctuels, ce qui prend également du temps).

Je serais intéressant d'entendre parler d'autres outils et techniques pour traiter ce type de code.

[Cette réponse] (http://reverseengineering.stackexchange.com/questions/64/what-is-a-good-tools-to-reverse-the-effects-of-minify-on-javascript/115#115) peut être pertinent par rapport à vos intérêts.
Je vote pour fermer cela parce que cela semble être une dupe exacte, de plus il est difficile de vous donner des conseils sans code.
Duplication possible de [Quels sont les bons outils pour inverser les effets de Minify sur JavaScript?] (Https://reverseengineering.stackexchange.com/questions/64/what-is-a-good-tools-to-reverse-the- effets-de-minification-sur-javascript)
Neuf réponses:
#1
+36
svent
2013-04-04 02:46:12 UTC
view on stackexchange narkive permalink

Je suis l'auteur de JSDetox, merci à Jurriaan Bremer pour l'avoir mentionné!

Comme déjà dit, chaque schéma d'obscurcissement est différent. JSDetox n'essaie pas de tout désobfusquer automatiquement - le but principal est de prendre en charge l'analyse manuelle.

Il a deux caractéristiques principales: l'analyse statique tente d'optimiser le code qui est "gonflé", par exemple instructions comme

  var x = - ~ - ~ 'bp' [720094129.0.toString (2 << 4) + ""] * 8 + 2;  

peut être résolu en

  var x = 34;  

car il n'y a pas de dépendances externes.

La deuxième fonctionnalité est la possibilité d'exécuter du code JavaScript avec émulation HTML DOM: on peut charger un document HTML (facultatif) et un fichier JavaScript, exécuter le code et voir ce qui se passerait. Bien sûr, cela ne fonctionne pas toujours immédiatement et des corrections manuelles peuvent être nécessaires.

JSDetox intercepte les appels comme "eval ()" ou "document.write ()" (ce que vous avez fait à la main) et affiche ce qui serait exécuté, permettant une analyse plus approfondie. L'émulation HTML DOM permet l'exécution de code qui interagit avec un document HTML, par exemple:

  document.write ('<div id = "AU4Ae" >212< / div> '); var OoF2wUnZ = parseInt (document.getElementById ("AU4Ae"). innerHTML); if (OoF2wUnZ == 212) {...  

Veuillez consulter http : //relentless-coding.org/projects/jsdetox/samples pour plus d'échantillons ou regardez les screencasts: http://relentless-coding.org/projects/jsdetox/screencasts

JSDetox n'exécute pas le code JavaScript analysé dans le navigateur, il utilise V8 (moteur JS du navigateur chrome) sur le backend - néanmoins il doit être exécuté dans une machine virtuelle isolée.

Svent désolé de faire remonter un vieux fil. Tout d'abord merci pour cet outil génial. J'ai un problème où btoa () n'est pas reconnu. Peut-être que je fais quelque chose de mal. J'essaye de faire ceci: data = btoa (junk); document.write (données); Merci
@k0ng0 Le problème est que btoa () est une fonction de l'objet window dans les navigateurs et non une fonctionnalité du langage JavaScript. JSDetox émule actuellement uniquement les fonctions sélectionnées de l'objet fenêtre. Merci pour l'indice, j'examinerai plus en détail dans la prochaine version.
Tout d'abord, merci pour le travail sur votre outil, cependant, chaque fois que j'y mets du code obscurci et que j'appuie sur "analyser", cela dit simplement "chargement ..." et ne charge jamais rien. Je l'ai laissé pendant environ 10 minutes.
#2
+17
Mick
2013-04-04 09:13:39 UTC
view on stackexchange narkive permalink

Je suis fan de Malzilla et de son moteur SpiderMonkey JS intégré qui vous permet de décoder du javascript malveillant.

enter image description here

Voici un tutoriel utilisant Malzilla pour décoder une attaque LuckySploit.

Vous pouvez télécharger le binaire pré-construit pour Malzilla sur SourceForge, ici.

C'est peut-être une vieille réponse, mais pour sauver n'importe qui d'autre confusion totale et inutile, tous les binaires sont d'une sorte d'outil appelé "InnoBF" même s'ils sont dans les chemins Malzilla sur la Source Forge liée. Vous devez en fait construire à partir des sources, mais c'est écrit en Delphi / Kylex / peu importe, alors oui, vraiment amusant.
Tu te trompes. Le binaire malzilla est pré-construit et peut être téléchargé à partir de Sourceforge (comme lié ci-dessus): https://sourceforge.net/projects/malzilla/files/Malzilla%20Win32%20Binary%20package/Malzilla%201.2.0/
#3
+11
peter ferrie
2013-04-01 09:26:24 UTC
view on stackexchange narkive permalink

Votre meilleur pari est d'utiliser un environnement (par exemple FireFox) dans lequel eval () peut être écrasé en utilisant une fonction proxy, et la fonction imprime simplement la sortie. De cette façon, il n'y a aucun risque à manquer quoi que ce soit, même si le malware l'aliase. Malheureusement, eval () n'est pas conçu pour être remplacé (et je pense que c'est explicitement interdit par les récentes spécifications ECMAScript), mais au pire, il échouera.

Vous êtes le meilleur moyen ... "Malheureusement, eval () n'est pas conçu pour être remplacé" ... aucune suggestion sur la façon de le remplacer ou avec quoi le remplacer?
#4
+9
Denis Laskov
2013-04-01 19:15:16 UTC
view on stackexchange narkive permalink

Eh bien, après les outils en ligne, vous pouvez utiliser Revelo by KahuSecurity http://www.kahusecurity.com/tools/Revelo_v0.5.1.zip Le processus est moins automatisé, mais plus puissant dans désobfuscation de js personnalisés. La documentation est incluse dans ZIP, vous pouvez également voir des exemples de son utilisation sur le blog Kahu: http://www.kahusecurity.com/ p.s. n'oubliez pas d'utiliser VM!

#5
+7
Jurriaan Bremer
2013-04-03 00:56:24 UTC
view on stackexchange narkive permalink

Vous aurez peut-être de la chance d'essayer JSDetox, http://www.relentless-coding.com/projects/jsdetox, qui est un décompresseur automatisé javascript + html dans Ruby, ou ma propre bibliothèque qui est en cours de développement et ne prend en charge que JavaScript (mais fait un peu plus que JSDetox), https://github.com/jbremer/jsunpck.

Pour JSDetox, vous pouvez donnez le html comme entrée via l'interface Web, je pense, et il crachera ensuite du code modifié (c'est-à-dire, désobfusqué.) Mon jsunpck, cependant, accepte simplement un fichier javascript sur la ligne de commande.

Comme toujours , le succès avec l'un ou l'autre des outils n'est pas garanti, mais qui sait. En fin de compte, vous pourriez être plus intéressé par une approche dynamique, telle que la mise à jour eval comme décrit ci-dessus.

#6
+6
Gunther
2013-04-06 19:22:49 UTC
view on stackexchange narkive permalink

Personnellement, j'utiliserais JSDetox ( http://relentless-coding.org/projects/jsdetox) si je me sens paresseux pour l'analyser manuellement.

C'est probablement l'un des meilleurs outils disponibles.

#7
+5
thisismalicious
2013-04-03 01:03:42 UTC
view on stackexchange narkive permalink

Vous pouvez essayer http://jsunpack.jeek.org/ qui fonctionne pour certaines choses. Personnellement, j'utilise simplement la console JS intégrée de Chrome dans une VM, en remplaçant les eval () s.

Cela peut également être utile, bien que ce soit davantage pour améliorer la lisibilité.

#8
+4
api pota
2017-11-06 13:54:32 UTC
view on stackexchange narkive permalink

En plus des autres liens utiles ici, je recommande d'essayer Malware-Jail

Sandbox pour l'analyse semi-automatique des malwares Javascript, la désobfuscation et l'extraction de la charge utile. Écrit pour Node.js

malware-jail est écrit pour le sandbox 'vm' de Node. Implémente actuellement le contexte WScript (Windows Scripting Host) env / wscript.js, du moins la partie fréquemment utilisée par les logiciels malveillants. Le contexte du navigateur Internet est partiellement implémenté env / browser.js.

Consultez le référentiel Github pour en savoir plus et voir son utilisation et son exemple de sortie.

#9
+1
Giulio Muscarello
2017-09-22 05:07:12 UTC
view on stackexchange narkive permalink

Depuis un an, j'ai développé box-js, et j'ai trouvé que c'était l'outil le plus précis pour analyser les droppers JScript. En interne, il utilise UglifyJS2 pour exécuter une analyse statique et simplifier de nombreuses techniques d'obfuscation; le reste est réalisé grâce à l'émulation dans un bac à sable V8.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...