Skriv alverdens Javascript-kommandoer med kun seks tegn

13. september 2013 kl. 15:5116
Med bare seks forskellige tegn, nemlig ()+[] og !, kan man skrive Javascript. En tysk udvikler har lavet en oversætter, der gør det nemt at obfuskere sin Javascript.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Vil du helst undgå, at andre kan forstå din Javascript-kode? Eller er du minimalistisk anlagt og går op i god feng shui i din kode?

Brugsscenarierne er måske lidt søgte - men nu er det i hvert fald muligt at få oversat almindelig Javascript-kode til en ordentlig smøre af kun seks tegn: To slags paranteser, () og [], samt plus-tegnet og udråbstegn.

Den tyske udvikler Martin Kleppe har udviklet værktøjet JSfuck til formålet, og han beskriver kode-stilen som ’esoterisk og undervisende’.

En simpel kommando som ’alert(1)’ bliver oversat til 1669 tegn, men så kan den også både køre i browseren og serverside i for eksempel Node.js.

Artiklen fortsætter efter annoncen

Skal dialogboksen i stedet rumme beskeden ’Version2’, eksploderer længden af koden til 43.660 tegn, så det er nok ikke tilrådeligt at forsøge at oversætte en kompleks Javascript-webapplikation som Gmail med JSfuck.

Prøv oversætteren på JSfuck.com.

16 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
13
16. september 2013 kl. 13:01

JavaScript er selvobfuskerende efter følgende proces:

  1. Skriv noget i JavaScript
  2. Vedligehold det løbende
  3. Enjoy

Nu er der så en tysker, der har opfundet noget der kan accelerere processen hurtigere end jQuery.

Fedt.

14
16. september 2013 kl. 13:36

Man kunne forestille sig at man bruger "normal" JavaScript i development/test fasen, og når det så skal ud kan man obfuskere sin kode med JSFuck (hvorefter man vel tester igen?). Hvis man skal vedligeholde gør man det i ren JavaScript brugt til at obfuskere.

Nu har jeg ikke sat mig ind i det, men hvis JSFuck oversætter tilbage til JavaScript for at køre det, hvad er så formålet? Kan enhver der vil have JavaScript koden ud fra JSFuck så ikke gøre det? Eller?

15
16. september 2013 kl. 15:17

Pointen er at du f.eks. har en hjemme side med et stykke javascript på. Du vil dog ikke have at andre kigger i det, så du bruger jsfuck på det og får et "sløret" stykke kode som du deler ud hver gang nogen besøger din side. Hvis du har nogle ændringer til funktionaliteten retter du i den originale javascript kode og genoversætter det med jsfuck.

Jsfuck er altså en oversætter fra javascript til javascript, så der ændres ikke på hvor og hvad der kan køre det, men fordi der bruges et subset af javascript der er røv besværligt at læse opnår man den egenskab ved sin kode at den også bliver svær at læse.

16
16. september 2013 kl. 20:21

...Til gengæld bliver scriptet så mange gange større, mere eller mindre det omvendte af hvad man kunne tænke sig...

Og spørgsmålet er om det ikke er ret simpelt at oversætte tilbage igen, i det mindste til noget der ikke er mere besværligt end hvad JSMin gør ved koden (der også gør hvad man godt kunne tænke sig: Gør scriptet mindre).

Alt i alt en rimeligt underholdende idé, men nok ikke noget der har nogen praktisk fordel.

9
14. september 2013 kl. 23:09

"Danglish"

The language spoken by an individual who begins mixing both the Danish and English languages. This language can also include a Dane speaking broken English with a heavy Danish accent. This language can only be understood by those individuals who understand both English and Danish language and grammar proficiently.

Hvad er der nu i vejen med udtrykket "at sløre"?

12
15. september 2013 kl. 21:57

Hvad er der nu i vejen med udtrykket "at sløre"?

Verbet "at sløre" kommer af substantivet "slør" som igen kommer fra ældre plattyske (nedertysk) ord "sloier". Så der er i begge tilfælde tale om fremmedord hvilket må betyde, at det ene vel er lige så godt som det andet!

5
13. september 2013 kl. 19:19

Det er vel mest dem, der gerne vil gemme koden.

8
13. september 2013 kl. 19:50

Det kan også være interessant hvis man har et stykke javascript som man ikke vil have at andre kopierer og ændrer til deres eget formål. Da javascript er et fortolket sprog kræver det at man distribuerer sin kildekode for at scriptet kan køres. Hvis man er tilhænger af open source er det helt fint men hvis man foretrækker en lukket kode kan denne form for obfuskering være vejen frem.

4
13. september 2013 kl. 19:11

mon ikke der skulle stå "alert('version2')"

6
13. september 2013 kl. 19:22

Nej det er ikke brainfuck. Brainfuck er et ret elegant (tro det eller ej) sprog med en række instruktioner der definere en "maskine" der bevæger sig over et array af tal. Brainfuck drager derfor klare paralleler til en Turing maskine.

JSfuck er tro det eller ej ganske almindeligt javascript. Det viser sig at man kun ved at bruge symbolerne ()[]+! stadig har et turingkomplet sprog. Basalt set går det ud på at javascripts typesystem (eller mangel på samme) gør at man kan lave nogle utrolige hacks. Se evt. nogle af eksemplerne i bunden af jsfuck.com

1
13. september 2013 kl. 16:19

Med bare to tegn, 0 og 1, kan alle tænkelige programmeringssprog repræsenteres..

10
15. september 2013 kl. 11:40

Der er vidst nogen der ikke har humor

7
13. september 2013 kl. 19:43

Det har ikke noget med noget at gøre, jsfuck er javascript men kun med brug af symbolerne ()[]!+ Disse symboler er blot det, symboler. Symboler kan repræsenteres på mange måder, som streger på et papir, som pixels på en skærm, som tallene 40, 41, 91, 93, 33, 43 som de er i ascii definitionen der siger noget om en relation mellem tal og symboler. Disse tal kunne også repræsenteres i base 2 format som 101000, 101001, 1011011, 1011101, 100001, 101011. Igen, det er blot repræsentationer af symboler. I en computer er det praktisk at arbejde med binære tal da det er nemt at arbejde med, 1 kan repræsenteres ved at der er strøm og 0 kan repræsenteres ved at der er slukket, dermed kan man lave et stykke elektronik der arbejder med strøm, som repræsentere tal der repræsentere symboler.

Vi kan altså repræsentere symboler på mange forskellige måder, men det i sig selv er egentligt ikke særligt interessant, det interessante er hvordan symbolerne fortolkes. F.eks. vil du sikkert fortolke symbolerne "kage" som bogstaver der tilsammen danner et ord, det ord er igen blot et symbol men din fortolkning vil formentlig handle om et stykke bagværk, da det er sådan symbolet kage fortolkes i sproget Dansk. På samme måde kan symboler og tal fortolkes på forskellige måder af programmeringssprog.

Så ja alle programmeringssprog kan repræsenteres med 0 og 1. Men det er ikke særligt interessant for denne debat, det interessante er at der er en person der har fundet 6 forskellige symboler der hvis de sættes sammen korrekt kan forstås af en helt almindelig javascript fortolker, Herefter har han lavet en oversætter fra et sprog, i dette tilfælde javascript, til dette subset af javascript.