본문 바로가기

Webhacking.kr

[Webhacking.kr] Challenge 16

Challenge 16

 

문제에 접속해보면 별을 볼 수 있다(뭐지?)

 

우리가 지금 화면에서 할 수 있는건 없으니 F12를 눌러보자!

 

개발자 모드

 

흠..

 

뭔가 길다..

 

일단 스크립트 부분을 가져와보겠다.

 

document.body.innerHTML+="<font color=yellow id=aa style=position:relative;left:0;top:0>*</font>";
function mv(cd){
  kk(star.style.left-50,star.style.top-50);
  if(cd==100) star.style.left=parseInt(star.style.left+0,10)+50+"px";
  if(cd==97) star.style.left=parseInt(star.style.left+0,10)-50+"px";
  if(cd==119) star.style.top=parseInt(star.style.top+0,10)-50+"px";
  if(cd==115) star.style.top=parseInt(star.style.top+0,10)+50+"px";
  if(cd==124) location.href=String.fromCharCode(cd)+".php"; // do it!
}
function kk(x,y){
  rndc=Math.floor(Math.random()*9000000);
  document.body.innerHTML+="<font color=#"+rndc+" id=aa style=position:relative;left:"+x+";top:"+y+" onmouseover=this.innerHTML=''>*</font>";
}

 

이번에도 하나하나 알아보자

 

document.body.innerHTML+="<font color=yellow id=aa style=position:relative;left:0;top:0>*</font>";

 

일단 첫부분에는 color, style 등이 적혀있는걸로 보아 문제 푸는데 도움이 안될것같다.

 

function mv(cd)

 

이 함수는 우리가 지난번에 알아봤으니 pass(이렇게 하나하나 알아가는것!)

 

kk(star.style.left-50,star.style.top-50);

 

이번에도 star.style이 적혀있는걸로 보아 페이지에 나오는 별 관련 함수인것같다.

 

if(cd==100) star.style.left=parseInt(star.style.left+0,10)+50+"px";
if(cd==97) star.style.left=parseInt(star.style.left+0,10)-50+"px";
if(cd==119) star.style.top=parseInt(star.style.top+0,10)-50+"px";
if(cd==115) star.style.top=parseInt(star.style.top+0,10)+50+"px";
if(cd==124) location.href=String.fromCharCode(cd)+".php"; // do it!

 

여기서도  star.style이 적혀있다..

.

.

.

.

어라? 마지막 부분만 조금 다르다.

 

자세히 알아보자(정답과 관련이 있을것같은 예감이..?)

 

if(cd==124) location.href=String.fromCharCode(cd)+".php"; // do it!

 

일단 cd 가 124이면 어떤 페이지로 이동시키는것같다(이것도 지난번에 배웠다!).

 

주석으로 do it! 이 적혀있는걸로 보아 여기가 중요한 부분인것같다.

 

일단 cd부터 알아봐야겠는데..

 

어떻게 cd에 124라는 값을 줘야할 지 생각해보아야한다.

 

그렇게 찾아보는 와중 body 부분에 뭐가 적혀있다.

 

 

중간에 onkeypress가 있는데 여기에 mv가 적혀있다!

 

mv(event.keyCode), mv(cd)

 

흠..

 

설마 event.keyCode = cd ??

 

일단 onkeypress라는게 있으니 키보드를 한번 눌러보자.

 

 

 

누르니 별들이 막 생기고 큰 별은 이동한다 ㄷㄷ

 

아마 누르면 어떤 값이 cd값으로 들어가 별을 이동시키는것같다.

 

이제 그 어떤 값이 124이면 좋겠는데..

 

다시 한번 소스코드를 보자

 

if(cd==124) location.href=String.fromCharCode(cd)+".php"; // do it!

 

여기서 fromCharCode를 발견할 수 있다.

 

fromCharCode란 아스키코드 번호를 받아 문자열로 바꿔주는 함수인데...

 

아스키코드??

 

설마 cd 값이 아스키코드인가?

 

아스키코드 표

일단 표에서 124를 변환하면 |임을 알수있다.

 

그러면 키보드 | 를 입력해본다면?

 

 

역시!

 

우리가 추측하던게 맞았다.

 

이렇게 문제 해결 :)

 

더보기

사실 문제를 처음 풀때 키 입력하는것을 못봤다..

 

그래서 어떻게 풀어야하지 생각하는 도중

 

if(cd==124) location.href=String.fromCharCode(cd)+".php"; // do it!

 

이 구문에서 "현재 위치에 |(124의 아스키코드 변환).php를 적으면 풀리지 않을까 생각하여

 

현재 위치 뒤에 |.php를 붙이니 클리어가 되었다..

 

 

 


 

확실히 문제를 여러개를 푸니 코드가 조금씩 보이기 시작했다(물론 아직 배워야할게 많다.)!

 

이런식으로 하나하나 쌓아가자!

 

"인생은 한 번뿐이지만 제대로만 살면 한 번이면 충분하다." - 메이 웨스트

'Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] Challenge 6  (0) 2024.10.06
[Webhacking.kr] Challenge 17  (0) 2024.10.06
[Webhacking.kr] Challenge 14  (0) 2024.10.05
[Webhacking.kr] Challenge 1  (0) 2024.10.05
[Webhacking.kr] Challenge 3  (0) 2024.10.04