웹해킹 12번 문제풀이
12번 문제를 누르면 javascript challenge 라는 문구가 써 있다.
F12를 누르면
이런 코드가 나온다.
코드를 해석하면 WorkTimeFun이라는 변수는 위에 잔뜩 써 있는 숫자들을 모두 아스키코드 표로 원래 문자로 바꾸라는 뜻이고
eval(WorkTimeFun);은 WorkTimeFun을 실행하라는 뜻이다.
숫자를 어떻게 변환할지 몰라서 한글을 켜서 아스키코드 표를 보며 하나씩 바꾸었다(콘솔에 입력하여 한번에 바꿀 수 있다는걸 알고 샷건을 쳤다)
코드를 전부 변환하면
이런 코드가 나온다.
이것저것 찾아보며 알아낸 것은
var ck=document.URL.substr(document.URL.indexOf('='));에서
http://webhacking.kr/challenge/codeing/code3.html에는 =이 없으므로
var ck=document.URL.substr(-1);이 되고 substr(-1)은 맨 오른쪽부터 문자 하나를 추출하는 것이므로 l을 추출하여 ck=l이 된다.
for(i=1;i<122;i++)
{
enco=enco+String.fromCharCode(i,0);
}
에서 enco는 1~121번에 해당하는 아스키코드를 나열한 문자열이 된다.
function enco_(x)
{
return enco.charCodeAt(x); ->
}
에서 enco_(x)값은 x에 넣은 문자를 아스키코드로 바꾼 값을 출력한다.
문제는 if문인데
if(ck=="="+String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3))에서
위의 설명대로라면 enco_(240)은 240번의 아스키코드 문자를 출력해야 하는데
아스키코드는 127번까지밖에 존재하지 않다.
여기서 더 이상 풀이를 진행하지 못했고 결국 인터넷의 도움을 받았다.
인터넷에서는
String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3)
을 복사하여 콘솔에 출력하라고 하였고
이렇게 값이 나왔다.