Hoe kan ik JavaScript of beschermen (beschermen)?

Ik wil een JavaScript-applicatie maken die geen open source is en dus wil ik leren hoe ik mijn JS-code kan ontsnappen? Is dit mogelijk?


1, Autoriteit 100%

obfuscation:

Probeer yui compressor . Het is een zeer populaire tool, gebouwd, verbeterd en onderhouden door het Yahoo UI-team.

U kunt ook gebruiken:

UPDATE: This question was originally asked on 2008, and The mentioned technologies are deprecated. you can use:

Private String-gegevens:

Stringwaarden houden Private is een andere zorg en obfuscation zal niet echt van veel voordeel zijn. Natuurlijk, door je bron in een verminkte, geminialiseerde puinhoop te verpakken, heb je een lichte versie van Security via Discurity . Het grootste deel van de tijd is het uw gebruiker die de bron bekijkt, en de tekenreekswaarden op de client zijn bedoeld voor hun gebruik, zodat een soort privéstringwaarde niet vaak nodig is.

Als u echt een waarde had waarvan u niet wilde dat een gebruiker deze zou zien, zou u een aantal opties hebben. Ten eerste zou je een soort codering kunnen doen, die wordt gedecodeerd bij het laden van de pagina. Dat zou waarschijnlijk een van de veiligste opties zijn, maar ook veel werk dat misschien niet nodig is. Je zou waarschijnlijk een aantal tekenreekswaarden met base64 kunnen coderen, en dat zou gemakkelijker zijn… maar iemand die die tekenreekswaarden echt wilde, zou ze gemakkelijk kunnen decoderen. Versleuteling is de enige manier om echt te voorkomen dat iemand toegang krijgt tot uw gegevens, en de meeste mensen vinden dat meer beveiliging dan ze nodig hebben.

Sidenote:

Het is bekend dat verduistering in Javascript een aantal bugs veroorzaakt. De verduisteraars worden er een beetje beter van, maar veel outfits besluiten dat ze genoeg voordeel zien van verkleinenen gzippen, en de toegevoegde besparingen van verduistering is niet altijd de moeite waard. Als je je bron probeert te beschermen, besluit je misschien dat het de moeite waard is, alleen maar om je code moeilijker leesbaar te maken. JSMinis een goed alternatief.


Antwoord 2, autoriteit 33%

Het verbaast me dat niemand de Closure Compilervan Google heeft genoemd. Het verkleint/comprimeert niet alleen, het analyseert om ongebruikte code te vinden en te verwijderen, en herschrijft voor maximale verkleining. Het kan ook typen controleren en waarschuwt voor syntaxisfouten.

JQuery is onlangs overgestapt van YUI Compresser naar Closure Compiler en zag een “solide verbetering


Antwoord 3, autoriteit 30%

obfuscatie kan nooit echt werken. Voor iedereen die echt in uw code wil komen, is het slechts een snelheidsbump. Erger, het houdt uw gebruikers vast van het bevestigen van bugs (en verzendt de fixes terug naar u) en maakt het moeilijker voor u om problemen in het veld te diagnosticeren. Het is een verspilling van uw tijd en geld.

Praat met een advocaat over het recht van intellectuele eigendom en wat uw juridische opties zijn. “open source” betekent niet “Mensen kunnen de bron lezen”. In plaats daarvan is Open Source een specifieke licentiemodel die toestemming verlenen om uw code vrijelijk te gebruiken en aan te passen. Als u een dergelijke licentie niet verleent, zijn mensen die uw code kopiëren en (in de meeste van de wereld) heeft u juridische opties om ze te stoppen.

De enige manier waarop u uw code echt kunt beschermen, is het niet verzenden. Verplaats de belangrijke code-serverzijde en laat uw openbare JavaScript-code AJAX erop roepen.

Zie mijn volledige antwoord over obfuscators hier.


4, Autoriteit 11%

U kunt de JavaScript-bron al het wat u wilt, maar het zal altijd omgekeerd zijn, gewoon op grond van het vereisen van alle broncode die daadwerkelijk op de client-machine kan worden uitgevoerd … de beste optie die ik kan bedenken Uw verwerking uitgevoerd met Server-Side-code, en alle clientcode JavaScript wordt verzoeken om verzoeken om verwerking naar de server zelf. Anders kan iedereen altijd alle bewerkingen bijhouden die de code aan het doen is.

iemand noemde Base64 om snaren veilig te houden. Dit is een vreselijk idee. Base64 is onmiddellijk herkenbaar aan de soorten mensen die uw code willen omkeren. Het eerste wat ze zullen doen is buidel het en te zien wat het is.


5, Autoriteit 10%

Er zijn een aantal JavaScript-obfuscatietools die vrij beschikbaar zijn; Ik denk echter dat het belangrijk is om op te merken dat het moeilijk is om JavaScript te obseren op het punt waar het niet omgekeerd is.

Daartoe zijn er verschillende opties die ik op enige diploma overuren heb gewend:

  • YUI-compressor . Yahoo! ‘S JavaScript-compressor doet een goede taak van het condenseren van de code die de laadtijd zal verbeteren. Er is een klein niveau van obfuscatie dat relatief goed werkt. In wezen zal de compressor functienamen veranderen, witte ruimte verwijderen en lokale variabelen wijzigen. Dit is wat ik het vaakst gebruik. Dit is een op open source op Java gebaseerde tool.

  • jsmin is een tool geschreven door Douglas Crockford die u probeert te mineren JavaScript-bron. In de eigen woorden van Crockford, “is JSmin niet verduisterd, maar het doet lelijker.” Het primaire doel is om de grootte van uw bron te bemoeien voor sneller laden in browsers.

  • gratis JavaScript obfuscator . Dit is een op het web gebaseerde tool die probeert uw code te verslaan door het daadwerkelijk te coderen. Ik denk dat de afwegingen van de vorm van codering (of obfuscation) kunnen komen ten koste van de kosten van het bestand; Dat is echter een kwestie van persoonlijke voorkeur.


6, Autoriteit 6%

wat ik zou doen:

a. Troll The Hacker!

Dit is in het tweede deel mijn nep / obfusceerde geheime JavaScript-codewerper.
Degene die u in de broncode ziet.

Wat doet deze code?

  1. Laadt de echte code
  2. Stelt een aangepaste koptekst in
  3. berichten een aangepaste variabele

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. verduisteren de code een beetje

Wat is dat?

  1. gene dezelfde code als hierboven base64
  2. dit is niet de SECRET javascript code

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C Een harde display php bestand met de echte code binnen

Wat betekent deze php code?

  1. Controles op het juiste verwijzer (domein / dir / code van uw launcher)
  2. Controles op het aangepaste koptekst
  3. De controles voor de aangepaste POST variabele

Als het goed is zal het je laten zien de juiste code anders een nep-code of een IP-ban, dicht pagina .. wat dan ook.

<?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 referrer = http://here.is/my/launcher.html

SECRET javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

FAKE = window.open('', '_self', '');window.close();

Nu .. als je event handlers definieert in het SECRET javascript is het waarschijnlijk toegankelijk.. je moet ze buiten definiëren met de launchcode en verwijzend naar een geneste SECRET functie.

DUS… is er een gemakkelijke manier om de code te krijgen?
document.body.appendChild(document.createElement('div')).innerText='Awesome';

Ik weet niet zeker of dit werkt, maar ik gebruik Chrome en heb Elements, Resources, Network, Sources, Timeline, Profiles, Audits aangevinkt, maar ik heb de bovenstaande regel niet gevonden.

note1: als je de Troll.php url van Inspect element->network in chrome opent, krijg je de nepcode.

opmerking2: de hele code is geschreven voor moderne browsers. polyfill heeft veel meer code nodig.

BEWERKEN

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=';}; ?>

7, Autoriteit 5%

Probeer jscrambler . Ik gaf het onlangs een spin en was onder de indruk.
Het biedt een reeks sjablonen voor obfuscation met vooraf gedefinieerde instellingen voor diegenen die niet veel om de details geven en het gewoon snel willen krijgen. U kunt ook aangepaste obfuscation maken door te kiezen welke transformaties / technieken die u wilt.


8, Autoriteit 4%

Het probleem met geïnterpreteerde talen, is dat je de bron om ze werkend te krijgen sturen (tenzij je een compiler om bytecode, maar nogmaals, het is heel triviaal om decompileren).

Dus, als je niet wilt om de prestaties op te offeren, kunt u alleen werken op variabele en functienamen, bv. ze te vervangen door a, b … aa, ab … of a101, a102, enz. En, natuurlijk, verwijder zoveel ruimte / newlines als je kunt (dat is wat zo JS compressoren genoemd doen).
Verdoezelen strings zal een performance hit hebt, als je ze coderen en decoderen van hen in real time. Plus een JS debugger kan de uiteindelijke waarden weer te geven …


9, autoriteit 4%

In tegenstelling tot de meeste andere antwoorden die ik stel tegen YUI Compressor; u moet gebruiken Google Closure .

Niet veel, omdat het comprimeert meer, maar vooral omdat het javascript fouten, zoals a = [1,2,3,];die IE go haywire maken


10, Autoriteit 3%

Een niet-open-source Javascript-gebaseerde applicatie is vrij dom. Javascript is een client-side geïnterpreteerde taal .. Obfuscation is niet veel bescherming ..

JS vertroebeling wordt meestal gedaan om de grootte van het script te verlagen, in plaats van “beschermen” is. Als je in een situatie waar je niet wilt dat uw code publiek, Javascript is niet de juiste taal ..

Er zijn tal van instrumenten rond, maar de meeste hebben het woord “compressor” (of “minifier”) in zijn naam niet voor niets ..


11, autoriteit 3%

U kunt niet beveiligde client-side code: gewoon druk op F12 op Google Chrome, pauzeren javascript uitvoering en u zult alle strings, zelfs die gecodeerd te krijgen. Beautify het en hernoemen variabelen en u zal bijna de originele code te krijgen.

Als u javascript aan de serverzijde schrijft (dwz NodeJS) en u bang bent dat iemand uw server hackt en u wilt de hacker moeilijker laten werken, zodat u meer tijd heeft om uw toegang terug te krijgen, gebruik dan javacript-compilers :

U moet Closure Compiler gebruiken voor geavanceerde compilatie, omdat dit de enige tool is die al uw variabelen hernoemt, zelfs als deze in meerdere bestanden/modules worden gebruikt. Maar het heeft gewoon een probleem: het werkt alleen als je schrijft in de coderingsstijl.


Antwoord 12, autoriteit 3%

Ik kan JavaScript Utilityvan Patrick J. O’Neil aanbevelen. Het kan verduisteren/compacten en comprimeren en het lijkt hier redelijk goed in te zijn. Dat gezegd hebbende, ik heb nooit geprobeerd het te integreren in een bouwscript van welke aard dan ook.

Wat betreft verduisteren versus verkleinen: ik ben geen grote fan van het eerste. Het maakt debuggen onmogelijk (Fout op regel 1… “wacht, er is maar één regel”) en ze nemen altijd de tijd om uit te pakken. Maar als het moet… nou.


Antwoord 13

Ik raad aan om eerst te verkleinen met iets als YUI Compressor, en dan alle tekenreeksen en getallen om te zetten naar HEX-waarden met iets als http ://www.javascriptobfuscator.com/

Hiermee zou de code bijna onmogelijk te begrijpen zijn en ik denk dat het in dit stadium meer tijd zal kosten voor een hacker om uw code opnieuw in te voeren dan wanneer hij helemaal opnieuw zou schrijven. Herschrijven en klonen is wat je eigenlijk niet kunt stoppen. We zijn tenslotte vrije mensen!


Antwoord 14

Dean Edward’s Packer is een uitstekende obfuscator, hoewel het voornamelijk de code verduistert, niet alle string-elementen die je in je code hebt.

Zie: Online Javascript-compressietoolen selecteer Packer (Dean Edwards) in de vervolgkeuzelijst


Antwoord 15

Ik heb de indruk dat sommige bedrijven (bijv.: JackBe) versleutelde JavaScript-code in *.gif-bestanden plaatsen, in plaats van JS-bestanden, als een extra maatregel van verduistering.


Antwoord 16

Ik gebruik Jasobal jaren en het is zonder twijfel de beste versluier die er is.

Het heeft een geavanceerde gebruikersinterface, maar is nog steeds intuïtief en gemakkelijk te gebruiken.
Het zal ook HTML- en CSS-bestanden verwerken.

De beste manier om het te gebruiken is om al uw privatevariabelen vooraf te laten gaan met iets als een onderstrepingsteken, en vervolgens de functie sortte gebruiken om ze allemaal te groeperen en vinkze af als doelwitten voor verduistering.

Gebruikers kunnen je bron nog steeds bekijken, maar het is veel moeilijker te ontcijferen wanneer je privévariabelen worden geconverteerd van bijvoorbeeld _sUserPreferredNickNamenaar a.

De engine telt automatisch het aantal doelvariabelen op en geeft ze prioriteit om de maximale compressie te krijgen.

Ik werk niet voor Jasob en ik heb er niets aan om ze te promoten, alleen wat vriendelijk advies te geven.
Het nadeel is dat het niet gratis is en een beetje prijzig, maar nog steeds de moeite waard als je het vergelijkt met alternatieven – de ‘gratis’ opties komen niet eens in de buurt.


Antwoord 17

Heb je Bananascriptgeprobeerd? Het produceert sterk gecomprimeerde en volledig onleesbare code.


Antwoord 18

Ik gebruik het hulpprogramma Closure-Compiler voor de verduistering van java-scripts. Het verkleint de code en heeft meer opties voor verduistering.
Dit hulpprogramma is beschikbaar via Google-code op onderstaande URL:
Hulpprogramma’s voor sluiting

Maar tegenwoordig hoor ik veel van UglifyJS. U kunt verschillende vergelijkingen vinden tussen Closure Compiler en UglifyJS waarin Uglify een winnaar lijkt te zijn.
UglifyJS: een snelle nieuwe JavaScript-compressor voor node .js Dat komt overeen met sluiting

Binnenkort zou ik UglifyJS een kans geven.


Antwoord 19

Als JavaScript/HTML/CSS-obfuscator/compressor kunt u ook Patu Diguaproberen.


Antwoord 20

Deze verkleintmaar verdoezelt niet. Als u geen Java op de commandoregel wilt gebruiken, kunt u uw javascript in een webformulier plakken.


Antwoord 21

Je zou zeker moeten overwegen om Obfuscriptorte bekijken.

Ik ga verder dan de typische Javascript-verkleiningstrucs die we hebben gezien van andere tools zoals YUI Compressorof Google Sluiting.

De versluierde code lijkt meer op versleuteld. In tegenstelling tot alles wat ik eerder heb gezien.


Antwoord 22

Als je een JavaScript-bibliotheek gebruikt, overweeg dan Dojo Toolkit die compatibel is (na kleine aanpassingen) met de compilatie van de Geavanceerde modus van de Closure Compiler.

Dojo – de enige JavaScript-bibliotheek
Compatibel met The Closure Compiler

Code gecompileerd met Closure Advanced-modus is bijna onmogelijk te reverse-engineeren, zelfs niet door een verfraaiing, omdat de gehelecodebasis (inclusief de bibliotheek) versluierd is. Het is ook gemiddeld 25% klein.

JavaScript-code die alleen verkleind is (YUI Compressor, Uglify etc.) is gemakkelijk te reverse-engineeren nadat deze door een verfraaiing is gegaan.


Antwoord 23

Ik heb dit in het verleden gebruikt en het werkt goed. Het is niet gratis, maar je moet zeker een kijkje nemen.
JavaScript Obfuscator & Encoder

Other episodes