상세 컨텐츠

본문 제목

[suninatas] 5번

write up/suninatas

by ユンジ 2022. 7. 10. 23:55

본문

 

문제만 봐서는 알 수가 없어서 페이지 소스를 살펴 보았다.

 

 

하단에 힌트가 적혀 있고 중간에 eval로 시작하는 코드가 길게 적혀 있다.

eval이 뭔지 몰라 구글링을 해 보니 자바 스크립트에서 문자열을 코드로 인식하게 하는 함수라고 한다.

 

eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('g l=m o(\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'a\',\'b\',\'c\',\'d\',\'e\',\'f\');p q(n){g h=\'\';g j=r;s(g i=t;i>0;){i-=4;g k=(n>>i)&u;v(!j||k!=0){j=w;h+=l[k]}}x(h==\'\'?\'0\':h)}',34,34,'||||||||||||||||var|result||start|digit|digitArray|new||Array|function|PASS|true|for|32|0xf|if|false|return'.split('|'),0,{}))

 

아무리 해석해 보려고 해도 내가 할 수 있는 건 아닌 것 같아 function(p,a,c,k,e,r)를 구글링 하다 unPacker(https://matthewfl.com/unPacker.html)라는 사이트를 발견했다. 

 

 

사이트에 본래 적혀 있는 코드가 아까 페이지 소스 코드에서 발견한 코드랑 형식이 같았다. 

 

 

그래서 아까 발견한 코드를 넣고 Unpack을 했더니 코드가 해석되었다.

 

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)
}

 

아까 페이지 소스 코드에 힌트가 있었는데 그걸 n에 넣으면 될 것 같다.

 

 

콘솔 창에서 PASS 함수에 힌트로 주어진 숫자를 넣으니 key가 나왔다.

 

 

위에서 얻은 키를 입력하니 Authkey 값이 떴다.

 

 

문제 해결 성공!

'write up > suninatas' 카테고리의 다른 글

[suninatas] 4번  (0) 2022.07.10
[suninatas] 3번  (0) 2022.07.10
[suninatas] 2번  (0) 2022.07.06
[suninatas] 1번  (0) 2022.07.04

관련글 더보기

댓글 영역