Was ist JavaScript Obfuscation und warum ist es eine Bedrohung?

Antworten:

38

Die Verschleierung ist ein Mittel, um die wahre Bedeutung und Absicht Ihres Javascript-Codes "zu verschleiern". Einige Websites verwenden es als Hindernis für Personen, die ihren Code kopieren / ausleihen möchten. Andere Websites verwenden es als Mittel, um die tatsächliche Absicht des Codes zu verbergen.

Einige Formen der Verdunkelung:

  1. Automatische Umbenennung von Variablen in kurze, bedeutungslose Namen, damit der Code weniger lesbar und schwer zu verstehen ist.
  2. Entfernen Sie alle zusätzlichen Leerzeichen und Zeilenumbrüche, damit der Code eine riesige lange Zeile ist.
  3. Teile des Codes selbst generieren, sodass ein erster Durchlauf des Codes ausgeführt wird, um den tatsächlichen Code zu erstellen, der dann ausgeführt wird, um die beabsichtigte Operation auszuführen.
  4. Verwendet Zeichencodes und Zeichenfolgenmanipulation in Kombination mit eval anstelle von normalem Javascript-Code, um den tatsächlichen Code zu erstellen, der ausgeführt werden würde.

Die Verschleierung ist an sich nicht böse, kann aber verwendet werden, um eine böse Absicht zu verbergen, und das hat AVG wahrscheinlich beanstandet. Es wurde so viel Dunkelheit entdeckt, dass es nicht erkennen konnte, ob das Javascript versuchte, etwas zu tun, das es zu verhindern versuchte. Daher wurde der Code standardmäßig als unsicher deklariert, da nicht überprüft werden kann, ob der Code in Ordnung zu sein scheint.

jfriend00
quelle
Das ist, was ich dachte, aber überprüfen wollte. Danke für die Klarstellung.
L84
Wenn AVG den Zugriff auf eine bekannte, seriöse Website blockiert, können Sie diese möglicherweise überschreiben. Ich würde nicht vorschlagen, dass, wenn Sie den Aufstellungsortrepräsentanten nicht kennen.
USlackr
4
Einige Sites verwenden die js-Komprimierung, so dass sie schneller geladen wird (also fast alle). Der Code wird verschleiert.
JCUBIC
9
1und 2werden auch von Javascript-Kompressoren durchgeführt. Kompressoren verschleiern den Code als Nebeneffekt, aber das ist nicht ihr Hauptzweck; Ihr Hauptzweck ist es, das Javascript zu verkleinern, um die Bandbreite zu reduzieren.
BlueRaja - Danny Pflughoeft
5. Es wird auch zum Komprimieren von JS-Dateien für schnellere Downloads verwendet. Yahoo hat es getan, seit sie im Web sind, und die Google-Tools zum Erstellen von Webanwendungen tun es auch (wie GMail und Kalender).
Chloe
13

Verschleierung bedeutet, die beabsichtigte Bedeutung von etwas zu verbergen.

In diesem Fall ein gut lesbares JavaScript-Snippet, wie z

window.onload = function() { alert("Hello " + username) };

kann durch ersetzt werden

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

oder auch

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

Alle drei Code-Schnipsel machen genau dasselbe, aber nur das Lesen des ersten ermöglicht es Ihnen, seine Absichten leicht zu verstehen.

Anscheinend versucht AVG, den Zweck von JavaScript-Code zu verstehen, bevor die Ausführung zugelassen wird. Wenn der Code verschleiert ist, schlägt AVG wahrscheinlich fehl. Daher die Warnung.

Allerdings verschleiern einige Websites ihr JavaScript nicht aus bösen Absichten, sondern um es schwierig zu machen, ihre Arbeit zu stehlen. Verschleierung ist normalerweise nutzlos, wenn sie für diesen Zweck verwendet wird, aber der Punkt ist, dass Verschleierung nicht unbedingt schlechte Absichten bedeutet.

Dennis
quelle
3
Wie ich oft festgestellt habe, hat das Deobustizieren von Code mir oft gezeigt, dass er schlecht codiertes Javascript verbirgt, das es nicht wert ist, gestohlen zu werden. Es ist ein Zeichen, dass der Programmierer mehr Zeit damit verbringt, sich um Diebstahl zu kümmern als um die richtige Programmiertechnik. Er kann nicht einmal die Obfustierung richtig hinbekommen, sodass sie leicht geknackt werden kann. Die einzigen Leute, die Zeit darauf verwenden, Code wirklich schwer zu enttarnen, sind Malware-Programmierer, weshalb AVG dies als guten Grund ansieht, die Site zu meiden.
Fiasko Labs
2
AVG ist eine Maschine, kein Mensch. Offensichtlich kann eine Maschine den Code verstehen, so macht dieser Code dasselbe. Außerdem schauen die Leute normalerweise nicht auf Javascript, wenn sie surfen. Dies ist einfach ein Fall von "Schuld durch Assoziation". Einige Javascript, die gefährlich ist, verwendet bestimmte Muster der Verschleierung. Daher ist anderes Javascript mit ähnlichen Mustern verdächtig.
Kaz
@Kaz: Es war nur ein Beispiel, aber es gibt ausgefeiltere Methoden zur Verschleierung, für die eine JavaScript-Engine erforderlich ist. Aus Performancegründen suchen Malware-Scanner in der Regel nach bestimmten Mustern, anstatt die Skripte auszuführen.
Dennis
Theoretisch wertlos zu sein und praktisch wertlos zu sein, ist unterschiedlich - theoretisch ist es sinnlos, Code zu verschleiern. Wenn die Kosten für die Deobuskierung jedoch ähnlich hoch sind wie die Kosten für die Erstellung von neuartigem Code (oder sogar hoch genug, um faule Diebe abzuhalten), kann eine Verschleierung zur Verhinderung von mutwilligem Diebstahl von Vorteil sein.
Ronald
Genau, es geht also nicht um Verschleierung per se , sondern um die Ähnlichkeit des Codes mit bekanntem Schadcode.
Kaz