Salut � tous,

En me renseignant sur les techniques d'obfuscation en Javascript j'ai appris que certains outils savaient remplacer les String en dur dans le code par des �quivalents illisibles � bases de cast douteux entre Array, String et Number.
J'ai creus� un peu pour savoir jusqu'o� on pouvait aller. Je me suis aper�u que simplement avec les caract�res "[", "+" et "]", on pouvait d�j� aller tr�s loin !

+[] donne 0 par cast de l'op�rateur +
Pour avoir 1, on pourrait essayer +[]++ mais on ne peut appliquer qu'un seul op�rateur � la fois.
Cependant, si on place le tout dans une array dont on r�cup�re le premier �l�ment pour ensuite l'incr�menter, l� �a fonctionne :
1: [+[]][0]++
Et comme on sait �crire 0, on arrive � :

1: ++[+[]][+[]]

qu'on peut �crire de mani�re plus courte par :

1: ++[[]][+[]] (merci Kaamo)

En suivant le m�me principe d'incr�mentation � r�p�tition, on arrive � r�cup�rer tous les chiffres.

Maintenant les lettres !

"" : []+[]
"1" : []+1
"0" : []+0
undefined : [][+[]]
"undefined" : undefined + []

G�nial, undefined en string, un tableau de caract�res dont on va pouvoir r�cup�rer certaines lettres via les index num�riques (qu'on sait d�j� coder)

On peut faire la m�me chose pour NaN : +[][+[]] pour r�cup�rer le N majuscule et le a.

Derni�re d�couverte de la soir�e, on pourrait se servir de l'objet Infinity. Incr�menter de un � un jusqu'� l'infini est �vid�mment bien trop long, mais il existe une autre technique: caster le nombre en notation exponentielle. Comme on a le "e" gr�ce � "undefined", on peut �crire "1e1000" qui cast� en nombre d�passe Number.MAX_VALUE, et donne Infinity. Bingo, des lettres en plus

Je n'ai pas d'autres id�es pour le moment, mais j'ai d�j� de quoi faire des trucs sympas. Par exemple l�chez �a en console Javascript :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
[[]+[][+[]]][+[]][++[++[++[++[+[]][+[]]][+[]]][+[]]][+[]]]+[[]+[][+[]]][+[]][+[]]+[[]+[][+[]]][+[]][++[+[]][+[]]]+[[]+[][+[]]][+[]][++[+[]][+[]]]+[+[++[+[]][+[]]+[]+[[]+[][+[]]][+[]][++[++[++[+[]][+[]]][+[]]][+[]]]+[++[+[]][+[]]+[]][+[]]+[+[]]+[+[]]+[+[]]][+[]]+[]][+[]][++[++[++[++[++[++[++[+[]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]]
Voil� la liste des caract�res que j'ai trouv� et leur traduction en [+] :

0: +[]
1: ++[[]][+[]]
2: ++[++[[]][+[]]][+[]]
3: ++[++[++[[]][+[]]][+[]]][+[]]
4: ++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]
5: ++[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]
6: ++[++[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]
7: ++[++[++[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]
8: ++[++[++[++[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]
9: ++[++[++[++[++[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]

undefined : [][+[]]
NaN : +[][+[]]
Infinity : +[++[[]][+[]]+[]+[[]+[][+[]]][+[]][++[++[++[[]][+[]]][+[]]][+[]]]+[++[[]][+[]]+[]][+[]]+[+[]]+[+[]]+[+[]]][+[]]

"" : []+[]
[]+1 : "1"
[]+0 : "0"
undefined + []: "undefined"

a: [+[]+[][+[]]+[]][+[]][++[[]][+[]]]
d: [[]+[][+[]]][+[]][++[++[[]][+[]]][+[]]]
e: [[]+[][+[]]][+[]][++[++[++[[]][+[]]][+[]]][+[]]]
f: [[]+[][+[]]][+[]][++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]]
i: [[]+[][+[]]][+[]][++[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]]
n: [[]+[][+[]]][+[]][++[[]][+[]]]
t: [+[++[[]][+[]]+[]+[[]+[][+[]]][+[]][++[++[++[[]][+[]]][+[]]][+[]]]+[++[[]][+[]]+[]][+[]]+[+[]]+[+[]]+[+[]]][+[]]+[]][+[]][++[++[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]]
u: [[]+[][+[]]][+[]][+[]]
y: [+[++[[]][+[]]+[]+[[]+[][+[]]][+[]][++[++[++[[]][+[]]][+[]]][+[]]]+[++[[]][+[]]+[]][+[]]+[+[]]+[+[]]+[+[]]][+[]]+[]][+[]][++[++[++[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]][+[]]]

I: [+[++[[]][+[]]+[]+[[]+[][+[]]][+[]][++[++[++[[]][+[]]][+[]]][+[]]]+[++[[]][+[]]+[]][+[]]+[+[]]+[+[]]+[+[]]][+[]]+[]][+[]][+[]]
N: [+[][+[]]+[]][+[]][+[]]

Bon on est bien d'accord que tout cela ne sert strictement � rien, ce n'est absolument pas performant en termes d'obfuscation, mais je trouve �a assez fun

Donc si vous avez d'autres id�es pour aller trouver d'autres lettres, balancez !

L� j'ai peut-�tre une piste en cherchant avec les lettres dont je dispose une fonction dans le prototype de Array / String / Number / Object, puis caster cette fonction en String pour en r�cup�rer une forme litt�rale. Quelque-chose comme �a :

[""][0]["big"]+[] --> "function big() { [native code] }"

Mais je ne trouve pas de fonction dont je dispose de toutes les lettres. Je pourrais aussi peut-�tre essayer de choper l'objet Date, mais il me manque le D majuscule...