Skriv alverdens Javascript-kommandoer med kun seks tegn

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.

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.

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.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (16)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Søren Pilgård

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

  • 4
  • 0
Søren Pilgård

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.

  • 6
  • 2
Søren Pilgård

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.

  • 1
  • 0
Lars Juul

"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"?

  • 1
  • 5
Martin Storgaard Dieu

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?

  • 1
  • 0
Søren Pilgård

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.

  • 0
  • 0
Dennis Krøger

...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.

  • 0
  • 0
Log ind eller Opret konto for at kommentere