보안 전공생의 공부

wargame.kr #6 fly me to the moon | javascript 난독화 본문

Wargame/web

wargame.kr #6 fly me to the moon | javascript 난독화

수잉 2021. 1. 15. 10:58

start를 눌러주니 웬 게임창이 뜬다.

비행기가 형관선에 안 닿게 유의하면서 조종하여 점수가 31337점이 나와야 게임이 성공한다.

javascript 구문을 우회하여 게임에 성공해야 되는 것 같다.

소스코드의 스크립트 구문은 도통 뭘 말하는 건지 알 수 없게 난독화되어 있다.

▶ 자바스크립트 난독화

자바스크립트는 클라이언트(Client)에서 실행되도록 하는 언어여서 사용자가 웹사이트에 접근하게 되면 해당 스크립트를 그대로 볼 수 있게 된다. 이를 방지하고자 적용하는 기법이다.

(출처 : https://kkamikoon.tistory.com/165 )

 

 

이 난독화 된 스크립트 구문을 해독해야 문제의 단서가 보일 것이다.

문제에서 난독화 수준은 문자열로 치환한 정도로,

이를 해독하는 사이트가 있다.

beautifier.io/

 

엄청 긴 코드지만 앞부분에서 var _0x8618x6 = 0; 이 부분이 왠지 의심스러워 이 부분만 파보려고 한다.

함수이름들이 이해하기 어렵게 되어있어서 쉽게 납득은 안가지만 저렇게 0이라고 초기화 시켜놓은 것이 왠지 점수를 나타내는 변수일 것 같다.

function secureGame() {

var _0x8618x2 = this;

var _0x8618x3 = true;

function _0x8618x4() {

_0x8618x3 = false;

return true

};

function _0x8618x5() {

return _0x8618x3

};

this['killPlayer'] = function() {

_0x8618x4();

return true

};

this['checkLife'] = function() {

return _0x8618x5()

};

var _0x8618x6 = 0;

변수 _0x8618x6을 선언한다.

function _0x8618x7() {

return _0x8618x6

};

function _0x8618x8() {

if (_0x8618x3) {

_0x8618x6++

};

true(_0x8618x3)이면 변수 _0x8618x6값이 1씩 증가한다.

return true

};

this['getScore'] = function() {

return _0x8618x7()

};

getScore 변수가 _0x8618x6을 리턴하는 _0x8618x7() 함수이다.

this['BincScore'] = function() {

_0x8618x8();

return true

};

true(_0x8618x3)이면 변수 _0x8618x6값이 1씩 증가한다.

이 정도면 이 변수가 점수를 나타내는 것이라고 간주할 수 있을 것 같다.

이 변수값을 31337으로 변경해주고 다시 스크립트문에 넣어주었다.

바로 원래 있던 스크립트 문을 바꿔주었다.

그랬더니 적용되지 않는다. (페이지 소스를 변경할 수 없게 한 걸까 ? 이유는 잘 모르겠다.)

구글링해보니 다들 console창에서 수행을 한다. 원본 소스를 변경하지 않고도 console창에 소스를입력만 해도 실행이 가능하다고 한다.

+) 피드백

개발자 도구 Element에는 이미 정의된 난독화 코드에 대한 값이 있다.

그래서 Element에 값을 아무리 바꿔주어도 이미 저장되어 있는 요소이고, 동적으로 페이지가 작동하기 때문에 게임을 다시 실행해도 초기 상태로 돌아갈 수 없다. (정적인 페이지면 변수가 바뀌었을 수도 있다)

그래서 콘솔 창에서 수정을 해야한다.

소스를 입력하고 다시 게임을 시작하면 바로 게임에 성공했다고 뜨고, 플래그값을 얻을 수 있다.

+) 피드백

난독화는 Javascript가 아니더라도 CTF에서 간혹 쓰이는 기법이다.

난독화는 Beautify라는 툴을 이용하면 해독할 수 있다.

난독화가 되어 있다는 힌트 : 처음에 eval(function(p, a, c, k, e, d) 이다.

CTF에서 난독화 기법이 의심되는 문제가 나오면, [언어이름] Beautifier을 치면 관련된 툴을 더 쉽게 찾을 수 있다.

 

 

Comments