rootme - Javascript - Obfuscation 3

2021. 2. 15. 12:55WarGame/Rootme

 

 

해당문제의 코드를 보면

위와 같은데 js beauty 를 이용해서 보기 편하게 만들었다.

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

최 상단의 pass가 패스워드인줄 알고 처음에 시도했으나,

a = [70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65]


tmp = ""
for i in a :
    tmp += chr(i)
print(tmp)

 

처음에 출력되는 부분을 나타내는 코드였고, 하단에 있는  String 부분을 다시 문자열로 변환해보았다.

 

a = [0x35,0x35,0x2c,0x35,0x36,0x2c,0x35,0x34,0x2c,0x37,0x39,0x2c,0x31,0x31,0x35,0x2c,0x36,0x39,0x2c,0x31,0x31,0x34,0x2c,0x31,0x31,0x36,0x2c,0x31,0x30,0x37,0x2c,0x34,0x39,0x2c,0x35,0x30]

tmp = ""
for i in a :
    tmp += chr(i)
print(tmp)

 

이런 문자열이 나오고 이를 한번 더 돌려보니

 

a = [55,56,54,79,115,69,114,116,107,49,50]

tmp = ""
for i in a :
    tmp += chr(i)
print(tmp)

 

password를 구할 수 있었습니다.

'WarGame > Rootme' 카테고리의 다른 글

rootme - Javascript - Webpack  (0) 2021.02.18
rootme - XSS - Stored 1  (0) 2021.02.17
rootme - Javascript - Native code  (0) 2021.02.14
rootme - Javascript - Obfuscation 2  (0) 2021.02.10
rootme - HTML - disabled buttons  (0) 2021.02.10