ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [해킹] 모의해킹 워게임 "flee button" 풀이, 해설 / wargame.kr
    해킹/워게임 - wargame.kr 2021. 2. 14. 19:36
    반응형

    목차

    1. 문제 상황 파악

    2. 문제 풀이 / 정답 도출 과정

    3. 암호문 해독

    4. 이외, 알아두면 좋은 코드들

    document.onkeypress / document.oncontextmenu / document.onselectstart / document.ondragstart


     

     

     

     

     

    이번에는 두번째 문제, flee button에 대해 설명해보겠다.

    아래는 이 문제가 있는 wargame 사이트이다.

    http://wargame.kr/challenge

     

     

     

     

     

    - 1. 문제상황 파악

    이 문제는 버튼을 클릭하면 해결할 수 있으나

    버튼을 클릭하지 못하게끔 되어있다.

    자, 그러면 첫번째로

    F12를 누르자.

    버튼의 위치가 계속해서 바뀌는 것을 볼 수 있다.

    그 이유는,

    sources에 들어가서 p8.js를 확인하면,

    escdiv라는 사용자정의함수가

    물체의 위치를 계속해서 바꿔주기 때문인데,

    특히 이 부분.

    c언어의 switch문처럼

    위치가 바뀌는 규칙이 주기적으로 바뀐다.

    마우스를 계속 움직이고 굴려주다보면

    버튼이 마우스를 중심으로 시계방향 회전을 한다.

    뭐, 이것은 문제를 푸는것에 직접적인 열쇠는 아니다.

     

    - 2. 문제 풀이 / 정답 도출 과정

     

    마우스의 왼쪽쯤 왔을 때,

    파란색으로 동그라미한, 요소를 선택할 수 있는 버튼을 눌러준다.

    이 버튼은 각 요소들을 클릭해서 어떤 코드가 이 요소를 구성(?)하는지 알려준다.

    놀랍게도, 이 때 'click me!'라는 버튼은 가만히 있는다.

    버튼이 가만히 있을 때 더블클릭해준다.

    그러면 Flag가 뜬다.

     

    - 3. 암호문 해독

     

    잘 보면, 재미있는 코드도 있다.

    이것은 unescape_blue14라는 사용자 정의 함수로써,

    p8.js

    p8.js 내부 함수 정의를 잘 보면....

    규칙적으로 암호화되어있는 코드를 해독하여 리턴한다.

    규칙은 잘 모르겠다 :)

    eval은 ()안에 있는 문자열을 실제 코드로 인식해 결과값을 도출하는 코드이므로,

    온전히 저 암호문의 의미를 '우리가' 알아보기 위해 unescape_blue14이하의 코드만 콘솔(Console)창에 입력해서 엔터를 눌러보자.

    상당히 길다

    그러면 다음과 같이 결과가 나온다.

    암호를 풀었더니 또 암호를 포함하고 있다..

    그래서 이번에는 document.write 코드 이하 unescape_blue14부터를 복사하여 콘솔창에 입력해보자.

    딱 암호문 부분만!

    괄호의 개수에 주의한다.

    이런 결과가 나왔다.

    잘 보면 여기에 똑같이 적혀있다.

    위에서 해독한 부분말고 뒤쪽에는 이렇게 적혀있다.

    이것은 앞에서 살펴보았던 p8.js 내부 다양한 변수들의 정의가 숨어있다.

    p8.js

    ax나 ay같은 변수가 등장하나,

    이를 정의하는 코드는 보이지 않았는데

    그것이 암호문 속에 있었던 것이다.

    사실 암호문은 그냥 낚시용인것 같다.

     

    - 4. 이외, 알아두면 좋은 코드들

     

    p8.js

    이 함수에서 false값을 리턴하면

    다양한 치트(?)들이 막히는데,

    document.onkeypress

    키를 눌렀을 때 / flase값을 받으면 키를 눌렀을 때의 이벤트들이 실행되지 않는다.

    document.oncontextmenu

    오른쪽마우스를 눌렀을 때 뜨는 메뉴창 / false값을 받으면 메뉴창이 뜨지 않는다.

    document.onselectstart

    false값을 받으면 블럭선택이 되지 않는다.

    document.ondragstart

    false값을 받으면 드래그가 안된다.


    본문에서 오류가 있으면 댓글달아주세요!

    질문, 공감, 이웃추가는 언제나 환영입니다 :)


     

    반응형

    댓글

Designed by Tistory.