이번 문제는 자바스크립트 레이싱? 게임이다. 좌우로 움직이며 31337점까지 올리면 클리어되는 문제인데,


소스 자바스크립트가 난독화 되어 있다. 사실 나는 자바스크립트를 분석하는 정공법이 아니라 아주 쉽게 


편법으로 풀었는데(패킷을 살펴보고 패킷조작) 그래도 푼 뒤에 상세히 분석을 해 보았다.






위와 같이 난독화 되어 있으며, eval로 난독화 소스를 실행시켜 주고 있다. 


주로 악성코드에서 많이 보이는 패턴이다.


어쨌든 이 상태로는 알아볼수가 없기 때문에 난독화 소스부터 deofuscation 해주어야 한다.


간단히  eval 대신 document.write 로 찍어보았다.  




 deofuscation 은 되었으나 여전히 보기 어렵다. 


jsbeautifier.org 를 통해 보기 좋게 indent를 조정해서 보자.



이제 조금 알아 볼 수 있게 생겼다. 코드를 살짝 보면 게임을 시작해서 좌우측벽을 움직이고 점수를 


업데이트 하는 소스코드가 보인다. 첫번째 줄에는 출력할 메시지, 소스코드 등이 섞여 있으므로 


첫번째 헥스코드를 보기 좋게 다시 찍어보자. 파이썬을 이용했다.




키워드를 보니 어느정도 감이 온다. post 방식으로 ajax를 이용하여 점수를 보내는 것이라 


예측이 가능하며, token.php 에서 토큰을 받아온 후 "high-scores.php?token=토큰&score=점수" 


와 같은 형식으로 점수가 날아갈 것이다. 실제로 풀이는 이 점수를 바로 조작하여 보내서 클리어 했다. 


하지만 조금 더 소스코드를 분석해 보도록 하자.




아래쪽을 살펴보면 전형적인 ajax 코드가 보인다. 첫번째 줄을 이용해서 난독화를 해 두었지만 


위의 문자열로 치환한 것을 살펴보면 이 부분이 바로 점수를 전송하는 부분임을 알 수 있다.  




함수를 조금 더 쫓아가 보면 score() 함수는 0x8618x6 변수값을 가져오는 것을 확인할 수 있다. 


결론. 0x8618x6 을 31337 로 미리 변조하거나, 


패킷이 전송될 때 score변수의 값을 31337 로 변조해주면 된다.  










'wargame > wargame.kr' 카테고리의 다른 글

wargame.kr - Crypto Crackme Basic  (0) 2017.10.24
wargame.kr - web chatting (650p)  (0) 2017.09.13
wargame.kr - Simpleboard(600)  (0) 2017.09.12
wargame.kr - Easy CrackMe(500p)  (1) 2016.01.11
wargame.kr - login filtering(450)  (0) 2016.01.06

+ Recent posts