rootme - Javascript - Obfuscation 3
2021. 2. 15. 12:55ㆍWarGame/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 |