Aller au contenu

Javascript Obfuscation 3

Lien du CTF


Solution

  1. Analyse du Javasciprt :
        function dechiffre(pass_enc){
            var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
            var tab  = pass_enc.split(',');
                    var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
                            k = j + (l) + (n=0);
                            n = tab2.length;
                            for(i = (o=0); i < (k = j = n); i++ ){o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
                                    if(i == 5)break;}
                            for(i = (o=0); i < (k = j = n); i++ ){
                            o = tab[i-l]; 
                                    if(i > 5 && i < k-1)
                                            p += String.fromCharCode((o = tab2[i]));
                            }
            p += String.fromCharCode(tab2[17]);
            pass = p;return pass;
        }
        String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));
    
        h = window.prompt('Entrez le mot de passe / Enter password');
        alert( dechiffre(h) );
    
  2. On y aperçois rapidement un message codé en bytes :

    \x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30
    

  3. Pour le déocer j'ai choisis de passer par la méthode .decode() en python :

    encMsg = b'\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30'
    print(encMsg.decode())
    
    # Output
    # 55,56,54,79,115,69,114,116,107,49,50
    

  4. En sortie de cette méthode nous obtenons une liste de nombres, qui semble correspondre à des caractère ASCII, une fois de plus j'ai choisis le python et réaslié un script pour décoder le message :

encPass = [55,56,54,79,115,69,114,116,107,49,50]
res = ""
for val in encPass:
    res = res + chr(val)

print ("Flag :", str(res))

# Output
# Flag : 786OsErtk12
5. Il ne reste plus qu'a validé le challenge !

Flag : 786OsErtk12