ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Suninatas> 5번 문제
    Wargame/Suninatas 2021. 10. 29. 22:25

     

    5번 문제

    어떤 키 값을 넣으면 인증 키 값을 얻을 수 있는 것 같다.

    우선, 일반 문자나 특수 문자를 입력해 보았으나, 어떠한 동작도 하지 않았다.

    페이지 소스보기를 통해 소스코드를 살펴보겠다.

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

    딱 봐도 수상해 보이는 부분이 있다.

    이 부분은 자바스크립트가 지원하는 난독화가 적용되어있다. 구글에 자바스크립트 난독화 해제 사이트를 통해 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)
    }

    PASS() 함수를 선언하는 코드를 확인할 수 있다. 이 코드를 분석하여 답을 찾으려 했으나 PASS에 전달되는 n의 값을 알 수 없기에 이 방법으로는 풀 수 없었다.

     

    다시 페이지 소스코드를 살펴보면, 아래에 힌트가 주어져 있다.

    크롬의 개발자 도구의 콘솔 기능을 통해 PASS함수에 힌트 값을 줘보도록 하겠다.

    '9c43c20c'라는 문자열을 얻을 수 있다. 이 문자열을 키 값으로 입력하면 인증 키 값을 얻을 수 있다.

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

    <Suninatas> 7번 문제  (0) 2021.10.31
    <Suninatas> 6번 문제  (0) 2021.10.31
    <Suninatas> 4번 문제  (0) 2021.10.24
    <Suninatas> 2번 문제  (0) 2021.10.21
    <Suninatas> 1번 문제  (0) 2021.10.20
Designed by Tistory.