Wargame/Root-me = Web - Client

<Root-me> Javascript - Obfuscation 3

지우친구 웅이 2021. 12. 20. 22:53

비밀번호를 입력하라고 한다.

 

페이지 소스 코드를 보면

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) );

코드를 하나 하나 따라가면서 풀어도 답이 나오지 않았다.

 

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"));

위 부분은 정상적인 코드가 아닌 것 같아 문자열을 유니코드 텍스트 디코딩해보니

55,56,54,79,115,69,114,116,107,49,50가 나왔다.

이를 이용해 String.fromCharCode(55,56,54,79,115,69,114,116,107,49,50) 해보니

"786OsErtk12" 비밀번호같은 값을 획득할 수 있었다.

 

이 값을 문제 페이지에 입력하니 문제를 해결할 수 있었다.