끝나지 않는 프로그래밍 일기


6번 문제를 풀기위해 http://webgame.wowhacker.com/AnTsGam3에 접속합시다. 접속하자마자, 마우스 커서쪽으로 개미가 달려드는 모습을 볼 수 있습니다.



마우스 커서를 개미에게 옮기면 개미가 사라지면서 포인트가 1씩 오릅니다. 포인트 옆에는 타겟 포인트가 있는데 아마 포인트가 4294967296과 같거나 그 이상이여야 답이 나오나 봅니다. 우선 소스를 봅시다.


<script language=javascript>document.write(unescape('%3C%73%63%72%69%70%74%20%6C%61%6E%67%75%

61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%66%75%6E%63%74%69%6F%6E%20

%64%46%28%73%29%7B%76%61%72%20%73%31%3D%75%6E%65%73%63%61%70%65%28%73%2E%73%

75%62%73%74%72%28%30%2C%73%2E%6C%65%6E%67%74%68%2D%31%29%29%3B%20%76%61%72%2

0%74%3D%27%27%3B%66%6F%72%28%69%3D%30%3B%69%3C%73%31%2E%6C%65%6E%67%74%68%3

B%69%2B%2B%29%74%2B%3D%53%74%72%69%6E%67%2E%66%72%6F%6D%43%68%61%72%43%6F%6

4%65%28%73%31%2E%63%68%61%72%43%6F%64%65%41%74%28%69%29%2D%73%2E%73%75%62%73

%74%72%28%73%2E%6C%65%6E%67%74%68%2D%31%2C%31%29%29%3B%64%6F%63%75%6D%65%6E

%74%2E%77%72%69%74%65%28%75%6E%65%73%63%61%70%65%28%74%29%29%3B%7D%3C%2F%73%

63%72%69%70%74%3E'));dF('%264Dtdsjqu%2631mbohvbhf%264Ekbwbtdsjqu%264Fepdvnfou/xsjuf%2639vo

ftdbqf%2639%2638%26364D%263684%263674%263683%26367%3A%263681%263685%263631%26367D%263672

%26367F%263678%263686%263672%263678%263676%26364E%263633%26367B%263672%263687%263672%263

684%263674%263683%26367%3A%263681%263685%263633%26364F%263677%263686%26367F........%2636372

C%2636372F%2636372C2%2638%263%3A%264D0tdsjqu%264F1')</script>


소스를 봤더니 괴상한 문자들만 보입니다. 여기서 unescape 괄호 안에 위치하는 문자열은 escape 함수로 문자열을 어떠한 컴퓨터에서도 읽을 수 있게 인코딩 한 값입니다. escape이 인코딩을 하는 함수니 반대로 unescape 함수는 디코딩을 하는 함수임을 알 수 있습니다. 그리고 document.write는 document 객체 내의 write 메소드를 이용하여 브라우저에 문자열을 띄워주는 역할을 합니다.


크롬, 인터넷 익스플로러를 쓰신다면 F12를 눌러 개발자 도구를 엽니다. 아래로 내려보면 정상적인 코드가 보이시죠? moveLayerTo, hideLayer, getWindowWidth, getPageScrollX 등과 같은 자바스크립트 함수가 보이시면, 그 아래로 쭉쭉 내리면서 포인트 값을 증가시키는 역할을 하는 함수를 찾아봅시다.



내리면서 확인하다보니 updateAnts 함수 내에 있는 포인트를 증가시키는 부분을 발견하셨나요?


...

function updateAnts() {

var i, dx, dy, theta, d;


d = 3;


for (i = 0; i < ants.length; i++) {

dx = mouseX - getLeft(ants[i]);

dy = mouseY - getTop(ants[i]);

theta = Math.round(Math.atan2(-dy, dx) * 180 / Math.PI);

if (theta < 0)

theta += 360;


if (Math.abs(dx) < d && Math.abs(dy) < d) {

initAnt(i);

var point = document.wow.WoWPoInT.value;

<!-- 변수 point에 포인트 값이 들어가고 있다. -->

point++;


if (point > 5)

document.wow.MSG.value = 'T_T~';


if (point > 10)

document.wow.MSG.value = 'Oh~ no';


if (point > 20)

document.wow.MSG.value = 'No hint!';


if (point > 100)

document.wow.MSG.value = 'Oops neodal';


if (point > 500)

document.wow.MSG.value = 'ha~~ak ha~~ak';


if (point > 1000)

document.wow.MSG.value = 'Fighting~!';


if (point > 100000)

document.wow.MSG.value = 'FireFox Good~!';


if (point >= 4294967296) { <!-- 포인트가 4294967296와 같거나 클 경우에 -->

var o = "";

o += document.b.a.value;

o += document.e.a.value;

o += document.c.a.value;

o += document.a.a.value;

o += document.d.a.value;

<!-- 여기서 document 객체 하위에 있는 form이란 내장 객체를 이용하여 폼 형식의 내용을 가져올 수 있습니다. 여기서 document.b.a.value로 치면 b가 폼의 이름이 되고 a는 속성명으로, b라는 폼에 있는 속성 a의 값을 o에 덧붙이는 역할을 하는 것입니다. -->

document.wow.MSG.value = "Bingo!";

location.href="wOwLevel6.php?msg=" + o + "!"; <!-- 다음의 경로로 이동 -->

}

document.wow.WoWPoInT.value = point;

}

else if (theta > 22.5 && theta <= 67.5) {

...


주목해야 할 부분의 옆에 주석을 달고 글을 진하게 표시해두었습니다. 그렇다면 우리가 이제부터 할 것은 document.wow.WoWPoInT.value가 가지고 있는 값을 늘려주거나 아래로 내려서 b, e, c, a, d라는 이름을 가진 폼을 확인하며 a 라는 속성명을 가진 속성의 값을 찾아주시면 됩니다. 우선 전자의 경우는 이렇습니다.


주소창에 간단히,

javascript:document.wow.WoWPoInT.value=4294967296;

라고만 치시면 됩니다. 아니면 콘솔으로 들어가서 수정하셔도 상관은 없습니다.


후자의 경우는 폼을 다 찾아주시면 됩니다. 아래와 같이 말이죠.

<FORM name=a><INPUT name=a value=Crazy type=hidden></FORM>

<FORM name=b><INPUT name=a value=I type=hidden></FORM>

<FORM name=e><INPUT name=a value=dont type=hidden></FORM>

<FORM name=c><INPUT name=a value=Like type=hidden></FORM>

<FORM name=d><INPUT name=a value=Cow type=hidden></FORM>


주목하셔야 할건 속성값입니다. a.a는 Crazy, b.a는 I, e.a는 dont, c.a는 Like, d.a는 Cow입니다. 다시 위의 소스로 돌아가서 변수 o의 값은,

b.a + e.a + c.a + a.a + d.a = IdontLikeCrazyCow


그리고 location.href 부분을 보시면 o 옆에 !가 또 붙습니다. 속성값 다 얻었으니 이것을 모두 조합하고 뒤에 !를 붙이고 이 값을 msg로 넘겨봅시다. 아래의 링크로 가보면 무언가 결정적인 힌트나 답을 얻을 수 있겠죠?



next key is IhateCrazyCow.too!


답이 나왔죠? 답은 'IhateCrazyCow.too!' 입니다.