Wargame/SuNiNaTaS

SuNiNaTaS 5 (WEB 301pt)

마띠(쥔장) 2020. 3. 29. 17:20

핵심 소스는 아래와 같다.

 <script>
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,{}))		
</script>

<!--Hint : 12342046413275659 -->

음.. eval함수로 감싸져있는데 도대체 무슨 소린지 알 수가 없다. 난독화 코드다.

이를 난독화된 코드를 어떻게 해석할 수 있는지가 이 문제의 관건인 것 같다.

코드 마지막엔 Hint도 있는데 이후에 어떻게 활용할 지도 알아봐야 할 것 같다.

아마 저 password 폼에 넣는게 아닐까 싶다.

 

일단 자바 스크립트 코드 난독화 / 난독화 해석 사이트를 찾았다.

-난독화

http://dean.edwards.name/packer/

 

/packer/

Copyright © 2004-2020 Dean Edwards. All rights reserved.

dean.edwards.name

-난독화 해석

https://beautifier.io/

 

Online JavaScript beautifier

 

beautifier.io

https://www.strictly-software.com/unpack-javascript

 

Javascript Unpacker Tool - Strictly Software

This Javascript unpacker tool has now been upgraded to allow it to unpack multiple eval statements. So if your packed code has itself been packed a few times it will loop through until it finds the original source code. If you want to test this multiple ev

www.strictly-software.com

바로 난독화되기 전의 소스를 얻었다.

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

PASS() 함수를 정의하고 있다. 마지막 return 부분을 보면 공백일 때 0을 반환하라고 한다.

그래서 콘솔 창에 PASS()라고, PASS함수에 공백을 인자로 보내봤다.

예상대로 0을 반환한다. 그래서 소스 마지막 주석에 있던 값을 넣어봤다.

9c43c20c라는 문자열이 반환되었다.

이를 넣어보니 AuthKey를 얻을 수 있었다.

728x90

'Wargame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS 16 (SYSTEM 155pt)  (0) 2020.03.29
SuNiNaTaS 9 (REVERSING 144pt)  (0) 2020.03.29
SuNiNaTaS 4 (WEB 122pt)  (2) 2020.03.22
SuNiNaTaS 18 (FORENSICS 153pt)  (2) 2020.03.22
SuNiNaTaS 3 (WEB 133)  (0) 2020.03.22