IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Ludique] Coder en Javascript avec seulement 3 caract�res


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut [Ludique] Coder en Javascript avec seulement 3 caract�res
    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...

  2. #2
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut
    Citation Envoy� par SylvainPV Voir le message
    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


    Chacun trouve son petit plaisir comme il peut, mais il est clair que l'on ne pratique pas les m�mes m�thodes.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Expert confirm�
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par d�faut
    Avec Infinity tu as le "i" en majuscule et minuscule. Peut-�tre peux-tu trouver une fonction qui te permettrait de r�aliser des conversions majuscules / minuscules et inversement ?

    Tu as aussi "d", "e", "f" il doit bien y avoir une relation logique entre ces lettres, non ? Et ainsi trouver les lettres manquantes ?

  4. #4
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    D�tails du profil
    Informations personnelles :
    �ge : 53
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par d�faut
    g�nial, tout simplement g�nial !

    tu peux recup NaN plus simplement : {}+

    avec ca tu peux avoir "[object Object]" : ({})+[]
    --> tu peux ensuite r�cup�rer les lettres : (({})+[])[1]
    --> ca fait 6 lettres en +

    -----------
    une piste possible avec les op�rateurs binaires ?

  5. #5
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    @Auteur: j'aimerais bien pouvoir faire un toLowerCase ou toUpperCase, ou m�me juste un charcodeAt, mais c'est loin d'�tre facile avec les �l�ments � disposition. Si je pouvais j'aurais de quoi faire l'objet Date.

    @Lorenzo: ha oui mais en utilisant les signes { } et ( ) c'est trop facile

  6. #6
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par d�faut
    Salut Sylvain !
    Haha je vois que je ne suis pas le seul fou � bord. J'avais commenc� � m'amuser avec �a y'a quelques mois.

    Le 1, tu peux l'avoir plus facilement ++[[]][+[]].
    Idem donc pour les autres chiffres, tu peux gagner un caract�re (le +).

    ++[+[]][+[]] === ++[[]][+[]]

  7. #7
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Merci Kaamo
    J'en suis pas encore � l'�tape d'optimisation, j'aimerais vraiment d�bloquer d'autres lettres, apr�s quoi �a laisserait porte ouverte � tout et n'importe quoi

Discussions similaires

  1. [Article] Coder en JavaScript avec seulement six caract�res
    Par vermine dans le forum G�n�ral JavaScript
    R�ponses: 9
    Dernier message: 05/06/2016, 22h02
  2. R�ponses: 3
    Dernier message: 04/05/2014, 14h27
  3. [PHP-JS] var javaScript avec test php
    Par lepierre dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 01/12/2004, 12h58
  4. Requete avec chaine de caract�re commence par
    Par jazzes_dean dans le forum Langage SQL
    R�ponses: 7
    Dernier message: 02/08/2004, 13h07
  5. [imprecis]R�aliser a^n avec seulement l'op�rateur d'addition
    Par Amon dans le forum Algorithmes et structures de donn�es
    R�ponses: 18
    Dernier message: 08/11/2002, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo