Nerd tshirts met obfuscated javascript
This post was originally published on Coding Glamour.
Het begin:
Het resultaat (uitvoeren in Chrome of Firefox console):
Geinspireerd door deze blogpost nu zelf maar eens bezig geweest met het (expres) obfuscaten van javascript. Wat willen we tonen
In dit geval moet 'cloud9' op het scherm komen, dat betekent dat we 5 chars nodig hebben: 'c', 'l', 'o', 'u', 'd', plus het getal 9. Omdat in javascript elke string een char array is kunnen met '[n]' elk karakter uit een string halen. We hebben dus strings nodig waar deze letters in voor komen. Gelukkig zijn hier een paar trucjes voor:
Set up
In deze strings zitten alle chars die we nodig hebben, dus tijd om ze toe te wijzen:
Om hier 'cloud9' van te maken doen we dit:
Pielen met getallen
Dat kan onduidelijker! Gelukkig hebben we met '$' een var die we als 0 kunnen misbruiken. Eerste job: van 0 -> 5 komen.
In javascript bestaat er de tilde (~) operator (ook bij mij onbekend tot vorige week ), die '-(n+1)' evalueert. ~5 wordt dan -6. Vooral praktisch bij werken met 'indexOf' die -1 teruggeeft wanneer er niets gevonden is, want ~-1 geeft 0. De reden hiervoor gaf ACM:
ACM schreef op maandag 24 oktober 2011 @ 15:30:
De tilde is ook wel bekend als de "binary not", oftewel geef de inverse van de bits in de variabele waar je het op uitvoert... En toevallig is idd de bitrepresentatie van integers zodanig dat ~n = -(n+1), maar dat is dus eerder bijzaak dan het doel van de operator
Leuk is dat je '-~' dus (n+1) wordt. Praktisch, want we hebben alleen nog +1 over in ons 'van 0 naar 5' stukje.
De rest
$ heeft op dit moment de waarde '1', en we moeten naar __[2]:
Daarna '$_[1]', en die is dan heel simpel:
Nu van 1 naar 0, en ook hier komt de tilde operator van pas:
Voor de 'd' van 1 naar 2:
En nu naar 9
Wat we nu hebben is "cloud":
$ heeft de waarde '2' en we moeten naar 9. Dit kan via:
En klaar!
Binnenkort in de betere modezaak
There are 8 comments on this article, read them on Coding Glamour.