2013-09-27 9 views
12

Ich muss meinen Quellcode so gut wie möglich verschleiern, also entschied ich mich, uglifyjs2 zu verwenden. Jetzt habe ich die Projektstruktur, die verschachtelte Verzeichnisse hat, wie kann ich es durch uglifyjs2 laufen lassen, um das ganze Projekt zu machen, anstatt alles zu geben Eingabedateien?UglifyJs für das gesamte Node-Projekt verwenden?

ich habe nichts dagegen, wenn es das gesamte Projekt in eine einzelne Datei oder etwas

+1

Warum schreiben Sie nicht ein Shell-Skript, um eine Schleife durch alle Dateien und rufen Sie Ihren obfuscater für jeden? – WiredPrairie

+0

@WiredPrairie Ich wollte sie alle in einer einzigen Datei kombinieren .. Auch Obfuscating anders wird brechen die Referenzen der einzelnen Dateien zueinander Ich denke, da der Name der Dateien ändern –

+0

Wie werden Sie Knoten richtig funktionieren, wenn Sie habe alle Dateien zusammengelegt? ('require ('../mylib/lib1')') – WiredPrairie

Antwort

5

ich etwas minimiert sehr ähnlich wie diese in einem Projekt gemacht habe ich gearbeitet. Sie haben zwei Möglichkeiten:

  1. Lassen Sie die Dateien in ihrer Verzeichnisstruktur.

    Dies ist bei weitem der einfacheren Option, bietet aber ein viel niedrigeres Niveau von Verschleierungs da jemand interessiert genug, um in Ihrem Code im Grunde eine Kopie der logischen Organisation von Dateien hat.

    Ein Angreifer kann einfach alle Dateien hübsch drucken und die verschleierten Variablennamen in jeder Datei umbenennen, bis sie verstanden haben, was vor sich geht.

    Verwenden Sie dazu fs.readdir und fs.stat, um rekursiv Ordner zu durchsuchen, jede .js-Datei einzulesen und den entstellten Code auszugeben.

  2. Kompilieren Sie alles in eine einzige JS-Datei.

    Das ist viel schwieriger für Sie zu implementieren, aber macht ein Angreifer das Leben schwerer, da sie nicht mehr die Vorteile der Organisation Ihres Projekts haben.

    Ihr Hauptproblem ist die Abstimmung Ihrer Anrufe mit Dateien, die nicht mehr existieren (da jetzt alles in der gleichen Datei ist).

    Ich tat dies, indem ich Uglify verwendete, um statische Analyse meines Quellcodes durchzuführen, indem ich die AST für Anrufe zu require analysierte. Ich habe dann den Quellcode der benötigten Datei geladen und wiederholt.

    Sobald alle Code geladen wurde, ersetzte ich die require Aufrufe durch Aufrufe an eine benutzerdefinierte Funktion, umhüllt den Quellcode jeder Datei in einer Funktion, die how node's module system works emuliert und dann alles gemangelt und kompiliert es in einer einzigen Datei.

    Meine benutzerdefinierte require-Funktion benötigt die meisten Anforderungen von Knoten, außer dass die Festplatte nicht nach einem Modul durchsucht wird, sondern nach den Wrapper-Funktionen.

Leider kann ich nicht wirklich Code teilen für # 2, da es Teil eines proprietären Projekts war, aber das Wesentliche ist:

  • Analysieren Sie den Quelltext in ein AST mit UglifyJS.parse.
  • Verwenden Sie den TreeWalker jeden Knoten des AST zu besuchen und überprüfen, ob

    node instanceof UglifyJS.AST_Call && node.start.value == 'require' 
    
5

Wie ich gerade ein großes reines NodeJS Projekt in 80+ Dateien abgeschlossen habe ich das gleiche Problem wie OP hatte.Ich brauchte zumindest einen minimalen Schutz für meine harte Arbeit, aber es scheint, dass dieses grundlegende Bedürfnis nicht von der NPMjs-OS-Community abgedeckt wurde. Fügen Sie Salz zur Verletzung der JXCore-Paket-Verschlüsselungssystem wurde letzte Woche in wenigen Stunden geknackt, also zurück zur Verschleierung ...

Also habe ich die komplette Lösung, die Datei zusammenführen, hässlich behandelt. Sie haben die Möglichkeit, bestimmte Dateien/Ordner auch nicht zusammenzuführen. Diese Dateien werden dann an den neuen Ausgabeort der zusammengeführten Datei kopiert und Verweise auf sie werden automatisch umgeschrieben.

NPMjs link of node-uglifier

Github repo of of node-uglifier

PS: ich froh wäre, wenn Menschen beitragen würde, um es noch besser zu machen. Dies ist ein Krieg zwischen Dieben und hart arbeitenden Programmierern wie dir. Lasst uns unseren Kräften beitreten, den Schmerz des Reverse Engineering verstärken!

1

Ich hatte die gleiche Notwendigkeit - für die ich node-optimize und grunt-node-optimize erstellt.

https://www.npmjs.com/package/grunt-node-optimize

+0

weiß jemand, ob es eine gute Schluck-Lib für dieses Problem gibt? – puppeteer701

+0

Ich arbeite nicht mit Gulp, es ist weniger intuitiv für mich. Aber du solltest in der Lage sein, 'node-optimize' in eine Schluck-Bibliothek einzubinden. Wenn Sie das tun - ich füge eine Notiz darüber in 'node-optimize''s Readme hinzu. –