한참을 봐도 무슨 소리인지 몰라서 머리가 지끈거릴 때, 아래에 'Authkey'값에서 힌트를 얻었다. 'Unpacking JavaScript'라는 힌트를 통해 해당 소스코드가 'Packing'되어 있다는 걸 깨닫고 문제를 풀었다.
해당 스크립트가 'Packing' 되어 있으니 'Unpacking'을 시도해줘야 한다. 나는 그래서 대신 'Unpacking' 해주는 사이트를 이용하기로 했다. 아래 사이트가 대신해주는 사이트이다.
https://www.strictly-software.com/
스크립트에 있는 소스코드를 긁어와서 'Unpack'을 눌러주면 숨겨져 있는 소스코드를 확인할 수 있다.
스크립트에 있는 소스코드를 긁어와서 'Unpack'을 눌러주면 숨겨져 있는 소스코드를 확인할 수 있다.
'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)" 입력했다. 출력 값으로 난수 값이 출력되었고, 이 값을 그대로 네모 박스 안에 넣었다.
전체적으로 보면 아래의 사진과 같이 되는데, 난수 값을 넣어주면 'Authkey'값이 출력되는 것을 확인할 수 있다.