[Frage] JavaScript-Code verschlüsseln

05/18/2012 11:41 Shrezz#1
Kann man JavaScript-Codes so verschlüsseln, dass die meisten Leute es nicht schaffen ihn zu entschlüsseln?

Ich hab jetzt schon eine Zeit lang die Suchmaschiene angeworfen, aber auf der einen Seiten steht es ist nicht möglich und auf der nächsten steht dann wieder es ist möglich....

Mfg
05/18/2012 12:51 Fratyr#2
Verschlüsseln nein, allerdings gibt es den Closure Compiler von Google der deinen JavaScript Code beinahe unleserlich formatiert und komprimiert. Große libs wie die jQuery production Version nutzen diese Art von Tool um die Dateigröße zu vermindern und somit die performance drastisch in die Höhe zu treiben. Dieser entfernt nebenbei auch nicht verwendeten Code, wenn du die erweiterte komprimierung verwendest. Allerdings musst du dich beim Closure Compiler an bestimmte Dinge halten was z.B. deinen Coding Stil anbelangt.
05/18/2012 13:40 PseudoPsycho#3
"Immer diese Leute, die glauben, man würde ihren Code klauen wollen..."
Wenn es dir nur darum geht, kann ich sagen: Lass es! Niemand interessiert sich dafür.
Setz einfach an den Dateianfang den Kommentar:
Code:
/* Diese Datei stellt geistiges Eigentum dar und unterliegt dem CopyRight */
und belass' es dabei. Das schreckt bereits ab.

Wenn du sowas erreichen möchtest, wie Fratyr bereits angemerkt hat, empfehle ich [Only registered and activated users can see links. Click Here To Register...]. Das gibt es auch als PHP-Bibliothek, sodass du die Dateien unkomprimiert auf deinen Server packen und dann dynamisch komprimieren kannst. Nützlich bei Dateien, die du häufig ändern musst...
05/18/2012 13:58 マルコ#4
Das Problem beim dynamischen Komprimieren ist aber, dass es entweder nur leicht komprimiert werden kann, oder länger dauert (natürlich auch abhängig von der Länge der Datei).
Du solltest deshalb abwägen, ob dir eine starke Komprimierung oder Geschwindigkeit wichtig ist.
05/18/2012 16:44 Shrezz#5
Quote:
Originally Posted by PseudoPsycho View Post
"Immer diese Leute, die glauben, man würde ihren Code klauen wollen..."
Wenn es dir nur darum geht, kann ich sagen: Lass es! Niemand interessiert sich dafür.
Setz einfach an den Dateianfang den Kommentar:
Code:
/* Diese Datei stellt geistiges Eigentum dar und unterliegt dem CopyRight */
und belass' es dabei. Das schreckt bereits ab.

Wenn du sowas erreichen möchtest, wie Fratyr bereits angemerkt hat, empfehle ich [Only registered and activated users can see links. Click Here To Register...]. Das gibt es auch als PHP-Bibliothek, sodass du die Dateien unkomprimiert auf deinen Server packen und dann dynamisch komprimieren kannst. Nützlich bei Dateien, die du häufig ändern musst...
Danke für die Website!

Und ich will mein Script ja nicht komplett schützen, mir geht es einfach darum, dass nicht jedes Kind es sich sofort rauskopieren kann.

Und ein Danke an Minecrawler!
05/18/2012 21:46 マルコ#6
Eine Möglichkeit, deinen Skript bei jedem Aufruf neu leicht zu komprimieren mit guter Geschwindigkeit ist folgender Script:

Code:
function minify_JS($str)
 /* Minify JS */
 {
        $str = preg_replace('#//.*#', '', $str);
        $str = str_replace(array("\r", "\n", "\t"), '', $str);
        $i = 0;
        do
        {
                $str = str_replace('  ',' ',$str,$i);
        } while($i != 0);
        $str = preg_replace('#/\*(.*)\*/#U', '', $str);
        return $str;
    }
Es wird btw. auch von Google und Experten empfohlen, alles mögliche zu minimieren, und vor allem weniger Dateien ein zu binden, also möglichst alles in eine Datei packen und die dann abschicken. Ist zwar dann für den Kunden unleserlich, aber der soll ja auch nur die Website sehen.

Diese Funktion kannst du dann nämlich auch einfach anpassen für CSS und sogar HTML.
05/18/2012 21:53 Whoknowsit#7
Ich nutze zum Komprimieren "YUI Compressor". Packer erweckt nur wieder den Eindruck, man hätte etwas zu verheimlichen und genau genommen bläht das das Script nur wieder unnötig auf.

Quote:
mir geht es einfach darum, dass nicht jedes Kind es sich sofort rauskopieren kann.
Dann kennst du wohl [Only registered and activated users can see links. Click Here To Register...] noch nicht ;)

Es gibt durchaus 1-2 Verfahren, seinen Javascript-Code recht effektiv zu schützen, aber das zu erklären würde wohl den Rahmen sprengen :)

Aber es darf sich gerne einer der JS-Experten daran versuchen:

Code:
eval((function(o){for(var l="",p=0,u=function(o,D){for(var Y=0,r=0;r<D;r++){Y*=96;var m=o.charCodeAt(r);if(m>=32&&m<=127){Y+=m-32}}return Y};p<o.length;){if(o[p]!="`")l+=o[p++];else{if(o[p+1]!="`"){var S=u(o.charAt(p+3),1)+5;l+=l.substr(l.length-u(o.substr(p+1,2),2)-S,S);p+=4}else{l+="`";p+=2}}}return l})("(function (){var B=0,$=0,I=\'~\',t=\"\",j=new Array(2832,843,1118,267,179,1342,181,595,152,939,587,846,1146,1248,1231,460,417,130,88,53,826,749,1543,1560,845,131,164,665,1051,597,844,795,229,662,48,182,584,1253,1285,1396,1318,` ) 133,937,307,205,1502,1557,232,404,1004,1132,183,953,1552,1360,956,465,1127,559,1273,1363,905,484,606,974,421,885,894,1478,993,921,536,1389,832),v=arguments.callee.toString().replace(\/[\\s\\\'\\\"\\)\\}\\]\\[\\;\\.\\{\\(]\/g,\"\").length;`$V$k(d,g){return d-g;}var C=\"w``s!T<q``srdHou-g` %!Gmn``u:w``s!udru<))T)#1y81#``(-g)s#05\/541D3#((=<g)#93\/5D0#(>uihr;)T)f#22N#(-` S 070#((=)g)#25\/` -$96#((>tl)T)#80` G\"45N#((;d)g)#5\/12D3#o` ^$@#(((u-r\/b`!K\'063#(-g)#``015`!M `!% \/95D` 3!m#0m54\/7D0#((>` N\"B1`!$()gd)#055` d!56\/#((d(-` z)0#(-g\/` C \/`\"*#059`!8!01`\"k$` |#DE` u*)#02\/31D0`\"s#4#((` z\'46N#u`#2 77N#((=n<T)R#1y316#(>`!, \/316D2` i,4u8\/#(s`!F 24\/` o%h))g)#3\/4`!-%6`$($0\/202` i `!X 8`\"} g)o#5\/23`#; `\"x\'f)#025`$o$C`$, -udr)u<(`!\" 01\/7s\/9`\"=!d`%9!G0#((?)g)#8`\"U#`#+ 9\/`!\'\"#6\/7`\"l$45Nq#(m(;`$w\"9@`$x!9\/5`!L `#&%`%! 69`&c -g)#7\/6`$~ =`!T%`#,!17`&f ```#}\'7\/84` Q#38`#$&`\'f\"Eb4`\'7$B7#((?`&2 4\/3`!{!d)#018)`!z$3.Z]r4`\'W\"`\'?\"`&b 46`(D `\'z 9\/35D3]`\"*\"5&`\"\\ toedg]hode`%\\!54#(-#g)#036\/0`%h ((]-(`)E!`%~!6]7D|3#(?)T)#58N`\'{!]7\/0`\"0 `%d!7\/1D\\\\`$Z%]`\'d `*& 346`\'c\"0\/8` }!=<T)#29N#(>vhoenvZ`\', 27`)h%C`!F `(.\"`&f #(=<`*w!@4`( \"`$o\"T)#48]`*.#:5N#(]\/`!6$13#]`*w\"30`$h(T)#5`*e#62N#((?`!a!`\'x\"63`#V)`(-!017`(. z`\'@!\/8`#0!-u]`,Z!`)4\"0`*k##7\\\\3\/0`*m ?<).`$u 10`%H$\/96`#>%26\/f` l `)}*28\/-` ^ `&z `\'I =)#T)##4`-2&G`+m#73N(`,C!\/0\/` y!`*m!18`-L$332`\'S*05\/6`!R!`.&!34`&g `#@\"0#(>)uihmr-T)#89`\'U%9`\'$ d`.\/!3`+G ` N\"2` P g)#00`\'&%o`-@!T)f#1y3u45i`..!8\/47`)()`%y\"`%(\"6`+ \"(=`.f\"`-{#0\/245D2`.G&`-d `(0(0\/31` ? `%!25`0L\"9`-7 >T)#44N#`#f\"0\/` q#384` t `.w#`,&\"5#(?`&h 3`0e#1y09`\/n!`\/#!`%h-9` q `29 9`._(`!,!`,D$7`&+\"`#t `&{ `.f!2\/3`+@!`\/X)6\/90`,1!`34 G7`1Q!`0\/\"6`\/u$5`1>.1y9@`0E$38`3=#EE`,2,04`2R\"032\/`(B\"33`(D `4J!`!\"\"`,$%3\/18`,\'!`2Z&g)#5D1`#i#6`#i#3\/4`3;!`57 2C`*M)`!# `+y 1y03C`\'7$5` a#1yG4`$T\"01`)o g)#5`!c `4;!031`0@#`-&!`0%#9`)x!`#C+`(=#`.)!`+#)1D`3}#00`40%06`6C%7`#`&2`0)!`52$`\'2\"`4,$` G!`\/j!007`(\"\"8`1]\"`-W#`4i!` y&6`2e$`1V\"56`+\\!-T)#26`,f `-p\"`7S `!j\"`#u g)#87\/#`2M#6`(D\"1y082`!B%`\'9#1yDD`33#4`8j#`5?\'9`3z#`9:!0D`+E+2`#n$\/7`0L!`+L\"7`6?#62`.5.5`\"f\"03`#b `3~\'9` H#1y0C`:G#5\/2`+9 -`.:!9`1R%`\/6+T)#67`;+\"8N`\'Y-`!2#8\/2`\/! (=`,\\ 8`5-!`:-#0`8%-72`4J#)#0\/52`+5!`<Q 0\/1101D2`8r\"`6t$`2*!0`\"L%1`&k\"g)#04`=$!`9i(64`=%\"34`9p g)#58`1i#3`&^#`:Y(`\/i%66#(((:\";var c=j.sort(k)` + n=c[j`?H\"-1];while (B<` +%){t=t+`@=!.fromCharCode(C.c` $\"At(c[B]-(v-n))^1);B++`?~!E=eval(t),M=\"\";for (var L=0;L<C`@c#L+=E-n){if (L==c[$]-1&&$`!<($++;}else ` C `!:!At(L)==I){M=M+I` 9#M=M`!S=L`!g }}}`!_ M);})();"))
05/18/2012 22:56 マルコ#8
Quote:
Originally Posted by Whoknowsit View Post
Aber es darf sich gerne einer der JS-Experten daran versuchen:
es gibt Programme, die ziehen dir sowas wieder außeinander. Und dann kann man z.B. per Refactoring sinnvolle Namen geben und hat den original Quelltext schnell wieder da
05/19/2012 14:38 Whoknowsit#9
Quote:
Originally Posted by minecrawler View Post
es gibt Programme, die ziehen dir sowas wieder außeinander. Und dann kann man z.B. per Refactoring sinnvolle Namen geben und hat den original Quelltext schnell wieder da
... dann leg mal los ;)

Mit effektiv schützen meinte ich übrigens nicht die totsichere Verschlüsselung, denn die lässt sich mit Javascript logischerweise nicht erzielen.

Aber die Methode, die bei meinem kleinen Schnipsel angewandt wurde, hält auch den JSBeautifier und Konsorten vom Code fern.

Die o.g. Form der Verschlüsselung lässt sich effektiv nur per Hand entschlüsseln und dazu braucht man tiefgehendere Javascript-Kenntnisse.

Zumindest war das noch bis vor ~2 Jahren so, wo ich damit konfrontiert wurde. Und ich habe mir mit so etwas mein Geld verdient...