[SuNiNaTaS(써니나타스)] 5번 문제


오늘은 'Suninatas(써니나타스)' 문제를 풀기로 했다. 매번 100점 문제들만 풀다 보니 실력이 늘지 않는 것 같아서, 오늘은 4번 옆에 있는 301 point 5번 문제를 풀기로 했다. 1번부터 5번까지 보면 4번까지는 100점대인데 5번만 300점대이다. 처음에는 살짝 겁이 났지만 그래도 할 수 있을 거라 생각했다.

(문제 목록)

 

 

5번 문제를 들어가면 아래의 사진처럼 'Check key Value' 라고만 나와있었다. 문제를 처음 접했을 때 생각은 네모 박스 안에 올바른 key 값을 넣으면 되는 것 같았다. 그럼 이제 키값을 넣어야 하는데 화면에는 아무것도 없으니 'F12'을 눌러 화면 자체의 코드를 확인해보았다.

(5번 문제)

 

 

소스코드를 확인해보니(아래의 사진) 힌트로 숫자 '12342046413275659'가 보였다. 이것을 이용해서 문제를 해결하는 것 같다.

(사실 이 값을 그대로 네모박스에 넣어봤다.... 힌트라고 그래서.... 하지만 아무 일도 일어나지 않았다ㅜㅜ)

(힌트~)

 

 

주석으로 힌트처리된 거 말고 제대로 된 소스코드를 확인해보고자 숨겨져 있는 코드들을 확인하기 시작했다. 그랬더니 아래의 사진처럼 복잡해 보이는 스크립트가 존재했다. 이것을 보고 해석하려고 했지만 실력이 없어서 무슨 소리인지 한참을 들여다보았다.

(스크립트 소스코드)

 

 

한참을 봐도 무슨 소리인지 몰라서 머리가 지끈거릴 때, 아래에 'Authkey'값에서 힌트를 얻었다. 'Unpacking JavaScript'라는 힌트를 통해 해당 소스코드가 'Packing'되어 있다는 걸 깨닫고 문제를 풀었다.

(Unpacking JavaScript)

 

 

해당 스크립트가 'Packing' 되어 있으니 'Unpacking'을 시도해줘야 한다. 나는 그래서 대신 'Unpacking' 해주는 사이트를 이용하기로 했다. 아래 사이트가 대신해주는 사이트이다.

https://www.strictly-software.com/unpacker#unpacker

 

Unpack Javascript - Strictly Software

// Create a get elements by class name function document.getElementsByClassName = function(clsName){ var retVal = new Array(); var elements = document.getElementsByTagName("*"); for(var i = 0;i < elements.length;i++){ if(elements[i].className.indexOf(" ")

www.strictly-software.com

 

 

스크립트에 있는 소스코드를 긁어와서 'Unpack'을 눌러주면 숨겨져 있는 소스코드를 확인할 수 있다.

('Unpakcing' 하는법)

 

'Unpacking'한 소스코드는 아래와 같다. PASS함수를 이용하라고 하는데, 5번 문제 소스코드에서는 PASS함수가 보이지 않았다. 그러면 PASS함수 안에 힌트 값을 넣으면 문제가 풀리지 않을까 생각했다.

var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
function PASS(n) {
	var result = '';
	var start = true;
	for (var i = 32; i > 0;) {
		i -= 4;
		var digit = (n >> i) & 0xf;
		if (!start || digit != 0) {
			start = false;
			result += digitArray[digit]
		}
	}
	return (result == '' ? '0': result)
}

 

 

그래서 'F12'을 눌러서 'Console'창에 들어갔다. 그다음에 내가 임의로 값을 만들어서 "PASS(12342046413275659)" 입력했다. 출력 값으로 난수 값이 출력되었고, 이 값을 그대로 네모 박스 안에 넣었다.

(PASS 안에 값 넣은 화면)

 

전체적으로 보면 아래의 사진과 같이 되는데, 난수 값을 넣어주면 'Authkey'값이 출력되는 것을 확인할 수 있다.

(키값 입력 화면)

 

 

나온 Auth 값을 메인 화면에 넣어주면 아래와 같이 점수가 올라가는 것을 확인 할 수 있다!

(점수 향상!)

 

 

 

[문제 해결]


이번 문제는 5번 문제를 풀면서 어려울 줄 알았다. 사실 'Unpacking JavaScript'가 아니었으면 문제 접근을 하기 힘들었을 것이다. 다행히 넓게 봐서 문제를 풀 수 있었던 것 같았다.

그리고 언패킹에 관해서 살짝 언급되어서 이 부분에 대해서 공부가 아주 조금 된 것 같기도 하다.

또 콘솔 창에서 작업을 이번이 처음인데 아직 많이 어색하다. 좀 더 익숙해질 수 있도록 연습해야겠다.

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

+ Recent posts