Frage:
Analyse von stark verschleiertem JavaScript
Adam Caudill
2013-04-01 08:27:20 UTC
view on stackexchange narkive permalink

Ich habe kürzlich eine Webseite analysiert, die stark verschleiertes JavaScript enthielt. Es ist klar, dass der Autor einige Anstrengungen unternommen hat, um das Verständnis so schwer wie möglich zu machen. Ich habe verschiedene Variationen dieses Codes gesehen - es gibt genug Ähnlichkeiten, so dass klar ist, dass sie dieselbe Quelle haben, aber so unterschiedlich, dass sich die Lösung zum Deobfuscieren jedes Mal ändert.

Ich habe mit dem Durchlaufen der URL begonnen VirusTotal, das 0/46 erzielte - es war also etwas von Interesse und wurde von der Anti-Virus-Software (zumindest statisch) nicht erkannt. Als nächstes habe ich versucht, es durch jsunpack zu führen, um zu sehen, ob es irgendeinen Sinn ergibt - kein Glück, es hat den Parser kaputt gemacht.

Beim Betrachten des Codes gab es einige Methoden das war so konzipiert, dass es verwirrend war, und dann mehrere KB solcher Zeichenfolgen, die schließlich als Javascript dekodiert und ausgeführt wurden:

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

Nachdem ich ein paar Minuten herumgegraben hatte, konnte ich feststellen, dass das Codebit, über das ich wirklich kardierte, folgendes war:

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

In diesem Fall wurde e mit einem Alias ​​versehen eval und a war eine Zeichenfolge, die von den verschiedenen Funktionen am Anfang der Datei manipuliert wurde (und über eine Reihe irreführender Zuweisungen weitergegeben wurde).

Um schnell den Wert von a zu erhalten, habe ich den Code so geändert, dass er Base64 codiert und den Wert ausgibt. Anschließend habe ich die HTML-Datei in Chrome auf einer VM geöffnet (getrennt von fr aus dem Netzwerk):

  document.write (window.btoa (a))  

Dadurch konnte ich den Wert erhalten, den ich suchte. Aber der Vorgang hat zu lange gedauert - und wenn ich eine weitere -Evalue verpasst hätte, hätte ich möglicherweise einen eindeutig bösartigen Code ausführen können. So konnte ich das bekommen, was ich brauchte, und die Malware identifizieren, die gelöscht werden sollte - aber der Prozess war zu langsam und riskant.

Gibt es bessere Möglichkeiten, Javascript wie dieses in einer sicheren Sandbox auszuführen, um die mit der Ausführung verbundenen Risiken zu minimieren? Ich sehe keine Möglichkeit, ein Tool zu erstellen, um diese Art von Code generisch zu deobfuscieren. Daher sehe ich keine Möglichkeit, ihn auszuführen (oder einmalige Tools zu erstellen, was ebenfalls zeitaufwändig ist).

Es würde mich interessieren, andere Tools und Techniken für den Umgang mit dieser Art von Code zu hören.

[Diese Antwort] (http://reverseengineering.stackexchange.com/questions/64/what-is-a-good-tools-to-reverse-the-effects-of-minify-on-javascript/115#115) kann für Ihre Interessen relevant sein.
Ich stimme dafür, dies zu schließen, weil es wie ein exakter Betrüger erscheint. Außerdem ist es schwierig, Ihnen ohne Code Ratschläge zu geben.
Mögliches Duplikat von [Was ist ein gutes Werkzeug, um die Auswirkungen von Minify auf JavaScript umzukehren?] (Https://reverseengineering.stackexchange.com/questions/64/what-is-a-good-tools-to-reverse-the- Auswirkungen von Minify auf Javascript)
Neun antworten:
#1
+36
svent
2013-04-04 02:46:12 UTC
view on stackexchange narkive permalink

Ich bin der Autor von JSDetox, danke an Jurriaan Bremer für die Erwähnung!

Wie bereits gesagt, ist jedes Verschleierungsschema anders. JSDetox versucht nicht, alles automatisch zu deobfuscieren - der Hauptzweck ist die Unterstützung der manuellen Analyse.

Es hat zwei Hauptmerkmale: Die statische Analyse versucht, Code zu optimieren, der "aufgebläht" ist, z. Anweisungen wie

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

kann gelöst werden mit

  var x = 34;  

, da keine externen Abhängigkeiten bestehen.

Das zweite Merkmal ist das Möglichkeit, JavaScript-Code mit HTML-DOM-Emulation auszuführen: Man kann ein HTML-Dokument (optional) und eine JavaScript-Datei laden, den Code ausführen und sehen, was passieren würde. Natürlich funktioniert dies nicht immer sofort und möglicherweise sind manuelle Korrekturen erforderlich.

JSDetox fängt Aufrufe wie "eval ()" oder "document.write ()" (was Sie von Hand getan haben) und ab Zeigt an, was ausgeführt werden würde, und ermöglicht eine weitere Analyse. Die HTML-DOM-Emulation ermöglicht die Ausführung von Code, der mit einem HTML-Dokument interagiert, z. B.:

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

Siehe http : //relentless-coding.org/projects/jsdetox/samples für weitere Beispiele oder sehen Sie sich die Screencasts an: http://relentless-coding.org/projects/jsdetox/screencasts

JSDetox führt den analysierten JavaScript-Code nicht im Browser aus, sondern verwendet V8 (JS-Engine des Chrome-Browsers) im Backend - sollte jedoch in einer isolierten virtuellen Maschine ausgeführt werden.

Es tut mir leid, einen alten Thread aufzurufen. Zunächst einmal vielen Dank für ein großartiges Tool. Ich habe ein Problem, bei dem btoa () nicht erkannt wird. Könnte sein, dass ich etwas falsch mache. Ich versuche dies zu tun: data = btoa (Junk); document.write (Daten); Vielen Dank
@k0ng0 Das Problem ist, dass btoa () eine Funktion des Fensterobjekts in Browsern ist und keine Funktion der JavaScript-Sprache. JSDetox emuliert derzeit nur ausgewählte Funktionen des Fensterobjekts. Vielen Dank für den Hinweis, ich werde dies mit der nächsten Veröffentlichung weiter untersuchen.
Zunächst einmal vielen Dank für die Arbeit an Ihrem Tool. Jedes Mal, wenn ich verschleierten Code einfüge und auf "Analysieren" drücke, heißt es nur "Laden ..." und lädt nie etwas. Lasse es für etwa 10 Minuten.
#2
+17
Mick
2013-04-04 09:13:39 UTC
view on stackexchange narkive permalink

Ich bin ein Fan von Malzilla und seiner eingebetteten SpiderMonkey JS-Engine, mit der Sie bösartiges Javascript entschlüsseln können.

enter image description here

Hier ist ein Tutorial, in dem Malzilla zum Entschlüsseln eines LuckySploit-Angriffs verwendet wird.

Sie können die vorgefertigte Binärdatei für Malzilla auf SourceForge hier herunterladen.

Dies mag eine alte Antwort sein, aber um allen anderen völlige, unnötige Verwirrung zu ersparen, handelt es sich bei allen Binärdateien um ein Tool namens "InnoBF", obwohl sie sich in Malzilla-Pfaden in der verknüpften Quellschmiede befinden. Sie müssen tatsächlich aus dem Quellcode erstellen, aber es ist in Delphi / Kylex / was auch immer geschrieben, also ja, wirklich Spaß.
Du liegst falsch. Die Malzilla-Binärdatei ist vorgefertigt und kann von Sourceforge (wie oben verlinkt) heruntergeladen werden: 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

Verwenden Sie am besten eine Umgebung (z. B. FireFox), in der eval () mithilfe einer Proxy-Funktion überschrieben werden kann und die Funktion nur die Ausgabe druckt. Auf diese Weise besteht kein Risiko, etwas zu verpassen, selbst wenn die Malware es aliasisiert. Leider ist eval () nicht dafür ausgelegt, überschrieben zu werden (und ich glaube, dass dies durch die aktuelle ECMAScript-Spezifikation ausdrücklich verboten ist), aber im schlimmsten Fall wird es nicht ausgeführt.

Du bist der beste Weg ... "Leider ist eval () nicht dafür ausgelegt, überschrieben zu werden" ... keine Vorschläge, wie man es überschreibt oder womit man es überschreibt?
#4
+9
Denis Laskov
2013-04-01 19:15:16 UTC
view on stackexchange narkive permalink

Nun, nach Online-Tools können Sie Revelo von KahuSecurity verwenden. http://www.kahusecurity.com/tools/Revelo_v0.5.1.zip Es ist weniger automatisiert, aber leistungsfähiger De-Verschleierung von kundenspezifischen js. Die Dokumentation ist in ZIP enthalten. Beispiele für die Verwendung finden Sie auch im Kahu-Blog: http://www.kahusecurity.com/ p.s. Vergessen Sie nicht, VM zu verwenden!

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

Vielleicht haben Sie Glück, wenn Sie JSDetox, http://www.relentless-coding.com/projects/jsdetox, einen automatisierten Javascript + HTML-Entpacker in Ruby, oder meine eigene Bibliothek ausprobieren ist in Arbeit und unterstützt nur Javascript (aber etwas mehr als JSDetox), https://github.com/jbremer/jsunpck.

Für JSDetox können Sie Geben Sie das HTML als Eingabe über das Webinterface, denke ich, und es wird dann einen optimierten Code ausspucken (dh deobfusciert). Mein jsunpck akzeptiert jedoch einfach eine Javascript-Datei in der Befehlszeile.

Wie immer Der Erfolg mit beiden Tools ist nicht garantiert, aber wer weiß. Am Ende interessieren Sie sich möglicherweise mehr für einen dynamischen Ansatz, z. B. das Patchen von eval wie oben beschrieben.

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

Nun, persönlich würde ich entweder JSDetox ( http://relentless-coding.org/projects/jsdetox) verwenden, wenn ich mich faul fühle, es manuell zu analysieren.

Es ist wahrscheinlich eines der besseren Tools da draußen.

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

Sie könnten http://jsunpack.jeek.org/ ausprobieren, was für einige Dinge funktioniert. Ich persönlich verwende nur die in Chrome integrierte JS-Konsole in einer VM und ersetze eval ().

Dies kann ebenfalls hilfreich sein, obwohl es eher zur Verbesserung der Lesbarkeit beiträgt.

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

Zusätzlich zu den anderen nützlichen Links hier empfehle ich, Malware-Jail

Sandbox für die halbautomatische Javascript-Malware-Analyse, Deobfuscation und Payload-Extraktion zu versuchen. Geschrieben für Node.js

Malware-Gefängnis ist für Node 'vm' Sandbox geschrieben. Implementiert derzeit den WScript-Kontext (Windows Scripting Host) env / wscript.js, zumindest den Teil, der häufig von Malware verwendet wird. Der Kontext des Internetbrowsers ist teilweise in env / browser.js implementiert.

Überprüfen Sie das Github -Repository, um mehr zu erfahren und dessen Verwendung und Beispielausgabe zu sehen.

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

Im letzten Jahr habe ich box-js entwickelt und festgestellt, dass es das genaueste Tool für die Analyse von JScript-Droppern ist. Intern wird UglifyJS2 verwendet, um eine statische Analyse durchzuführen und viele Verschleierungstechniken zu vereinfachen. Der Rest wird durch Emulation in einer V8-Sandbox erreicht.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...