Ich möchte eine JavaScript-Anwendung erstellen, die nicht quelloffen ist, und daher möchte ich lernen, wie ich meinen JS-Code verschleiern kann? Ist das möglich?
Oh, und ja, ich würde auch den Javascript-Code verschlüsseln.
Ich möchte eine JavaScript-Anwendung erstellen, die nicht quelloffen ist, und daher möchte ich lernen, wie ich meinen JS-Code verschleiern kann? Ist das möglich?
Was ich tun würde:
A. Trolle den Hacker!
Dies wird im zweiten Teil mein gefälschter/verschleierter geheimer Javascript-Code LAUNCHER sein. Der, den Sie im Quellcode sehen.
Was bedeutet dieser Code?
var ajax=function(a,b,d,c,e,f){
e=new FormData();
for(f in d){e.append(f,d[f]);};
c=new XMLHttpRequest();
c.open('POST',a);
c.setRequestHeader("Troll1","lol");
c.onload=b;
c.send(e);
};
window.onload=function(){
ajax('Troll.php',function(){
(new Function(atob(this.response)))()
},{'Troll2':'lol'});
}
B. Den Code ein wenig verwirren
Was ist das?
(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()
C Erstellen Sie eine schwer anzeigbare php-Datei mit dem eigentlichen Code darin
Was bedeutet dieser php-Code?
Wenn alles in Ordnung ist, wird Ihnen der richtige Code angezeigt, andernfalls ein gefälschter Code oder eine Sperrung der IP, Schließen der Seite was auch immer.
<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>
base64 verweiser = http://here.is/my/launcher.html
SECRET javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';
FAKE = window.open('', '_self', '');window.close();
Nun wenn Sie definieren Event-Handler in der SECRET-Javascript ist es wahrscheinlich zugänglich Sie müssen sie außerhalb mit dem Startcode zu definieren und verweist auf eine verschachtelte SECRET-Funktion.
SO... gibt es eine einfache Möglichkeit, den Code zu erhalten? document.body.appendChild(document.createElement('div')).innerText='Awesome';
Ich bin mir nicht sicher, ob das funktioniert, aber ich benutze Chrome und habe Elemente, Ressourcen, Netzwerk, Quellen, Zeitleiste, Profile, Audits überprüft, aber ich habe die Zeile oben nicht gefunden.
Anmerkung 1: Wenn Sie die Troll.php Url von Inspect element->network in Chrome öffnen, erhalten Sie den gefälschten Code.
note2: Der gesamte Code ist für moderne Browser geschrieben. polyfill braucht viel mehr Code.
EDIT
launcher.html
<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>
Troll.php
<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>
Darüber habe ich gerade nachgedacht, als ich den Cracker ansprach. Ich würde gerne so etwas sehen, ohne PHP verwenden zu müssen :)
Auch wenn das komisch ist, kann ein Webentwickler, der in der Lage ist, die Website richtig zu inspizieren, irgendwie an den Quellcode kommen. Ich glaube wirklich, dass es keine Möglichkeit gibt, irgendeine Art von Daten in dem Moment zu verstecken, in dem man sie online stellt.
Das Problem bei interpretierten Sprachen ist, dass man den Quellcode schicken muss, um sie zum Laufen zu bringen (es sei denn, man hat einen Compiler für Bytecode, aber auch dann ist es recht trivial, sie zu dekompilieren).
Wenn Sie also keine Leistungseinbußen in Kauf nehmen wollen, können Sie nur auf Variablen- und Funktionsnamen einwirken, z. B. indem Sie sie durch a, b... aa, ab... oder a101, a102 usw. ersetzen. Und natürlich sollten Sie so viele Leerzeichen/Neuzeilen wie möglich entfernen (das ist es, was die so genannten JS-Kompressoren tun).
Die Verschleierung von Zeichenketten hat einen Leistungseinbruch zur Folge, wenn Sie sie in Echtzeit ver- und entschlüsseln müssen. Plus ein JS-Debugger kann die endgültigen Werte zeigen...
Versuchen Sie JScrambler . Ich habe es vor kurzem ausprobiert und war beeindruckt davon. Es bietet eine Reihe von Vorlagen für die Obfuskation mit vordefinierten Einstellungen für diejenigen, die sich nicht so sehr um die Details kümmern und es einfach schnell erledigen wollen. Sie können auch eine benutzerdefinierte Obfuskation erstellen, indem Sie die gewünschten Transformationen/Techniken auswählen.
JScrambler Abonnement ist sehr sehr teuer... Billigste Abonnement erfordern mindestens 3 Monate Preis $145 - es ist verrückt.
Sie haben jetzt einen kostenlosen Plan. Die anderen Abonnementpläne sind immer noch so teuer.
Im Gegensatz zu den meisten anderen Antworten schlage ich vor, YUI Compressor nicht zu verwenden; Sie sollten Google Schließung .
Nicht so sehr, weil es mehr komprimiert, sondern vor allem, weil es Javascript-Fehler abfängt wie a = [1,2,3,];
die den IE durcheinander bringen.
Ich kann empfehlen JavaScript-Dienstprogramm von Patrick J. O'Neil. Es kann verschleiern/kompaktieren und komprimieren, und es scheint darin ziemlich gut zu sein. Das heißt, ich habe nie versucht, es in ein Build-Skript irgendeiner Art zu integrieren.
Was Obfuscating vs. Minifying betrifft - ich bin kein großer Fan von Ersterem. Es macht die Fehlersuche unmöglich (Fehler in Zeile 1... "warte, es gibt nur eine Zeile") und das Entpacken dauert immer länger. Aber wenn man muss... nun ja.
Die Verschleierung muss jedoch nicht unbedingt auf eine Zeile komprimiert werden, sondern kann auch durch die Änderung von Funktions- und Variablennamen oder die Umwandlung von Zeichenketten in base64 erfolgen. Beim Mining wird der gesamte Code auf eine Zeile reduziert.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
22 Stimmen
Das Argument, man dürfe nichts verschleiern, scheint mir nicht stichhaltig zu sein. Es sei denn, Sie glauben wirklich, dass Ihre Benutzer Fehler beheben/berichten könnten, dann sollten Sie es tun. Es kann die Ladezeiten durch Minifying verringern. Es wird niemals einen wirklich engagierten Hacker aufhalten, aber es wird ihn/sie verlangsamen und es wird halbherzige Hackversuche verhindern. Es ist sehr einfach zu machen und es gibt viele Tools (siehe andere Antworten), ich würde sagen, mach es auf jeden Fall, da es meistens nur Vorteile bringt, aber erwarte nicht, dass es wirkliche Sicherheit bringt oder jemanden davon abhält, deinen Code zu kopieren, wenn er es wirklich will. Die einzige Möglichkeit, dies zu tun, ist, den Code serverseitig zu halten und Ajax zu verwenden.
0 Stimmen
Der beste Javascript Obfuskator So funktioniert es bei mir. Es wird sogar nicht von js beautifier dekodiert. ;)
1 Stimmen
Die meisten der hier erwähnten Obfuskatoren können einfach durch die Einstellung
window.eval = console.log.bind(console);
bevor Sie das Skript ausführen. Im besten Fall ist das Ergebnis nach der Ausführung des Skripts dasselbe wie bei der Ausführung eines Minifizierers für das Original, daher sehe ich keine wirklichen Vorteile der Verwendung eines speziellen Obfuskators gegenüber der Verwendung eines Minifizierers. Zumal obfuskierter Code in der Regel aufgeblähter (und langsamer zu laden) ist als minifizierter Code.2 Stimmen
Zusammengefasst: Bevor Sie sich für einen Obfuskator entscheiden, versuchen Sie, ein obfuskiertes Beispiel auszuführen, nachdem Sie
var oldEval = window.eval; window.eval= function(x){console.log(x); return oldEval(x)}
. Fügen Sie dann das Ergebnis in jsbeautifier ein und prüfen Sie, ob es immer noch verschleiert aussieht. Wenn nicht, wählen Sie einen anderen Obfuskator.3 Stimmen
Oder noch einfacher: Fügen Sie das Beispiel einfach in deobfuscatejavascript.com . Die Ergebnisse von "the best javascript obfuscator" (nach @abhishekbagul) nach der Ausführung der deobfuscator ist genau das gleiche wie die ursprüngliche Quelle, auch einschließlich der Kommentare!
1 Stimmen
Dieser Online-Verschleierer ist wirklich einfach zu verwenden, oder wenn Sie Node.js verwenden oder es installiert haben, können Sie dieses Projekt verwenden: javascript-obfuscator
npm install --save-dev javascript-obfuscator
das quelloffen und wirklich gut ist.0 Stimmen
Encode.js verwenden: encodejs.devincity.com
1 Stimmen
Ich habe eine Lösung für dieses Problem gefunden: github.com/blackmiaool/decent-messup
0 Stimmen
Für jeden Obfuskator kann ein Deobfuskator erstellt werden.
0 Stimmen
Versuchen Sie, Ihren Code in Worker-Threads zu verschieben und importScripts("yourscript.js"); zu verwenden. Dann sind sie im Debugger nicht so leicht zu sehen, da sie nur verfügbar sind, wenn sie geladen (aufgerufen) werden, und standardmäßig ausgeblendet sind.
3 Stimmen
Es ist bedauerlich, dass diese Frage geschlossen ist. Es handelt sich um ein weit verbreitetes Problem mit einer Vielzahl von Lösungen, die sich alle recht gut erklären und vergleichen/gegenüberstellen lassen, ohne die Frage zu klären.
1 Stimmen
@Benjamin: Das Argument ist nicht fehlerhaft, es ist nur perfekt abgestimmt und politisch korrekt im Einklang mit der aktuellen Agenda, die besagt: "Arbeite zum Spaß und um dich zu zeigen, und lass andere dein Geld einstreichen".
0 Stimmen
Die Frage ist zwar schon etwas älter, aber vielleicht für einige von euch noch interessant: obfuscator.io macht einige anständige Verschleierungen und man muss sich wirklich anstrengen, um den Code zu verstehen.
0 Stimmen
Eine nicht einfache, aber gute Methode: Verwenden Sie kein JavaScript.