Python

Suninatas [5번]

beginner29 2019. 8. 9. 17:40

 

Source:

 

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

 

Hint: 12342046413275659

 

 

 

1. 자바스크립트 난독화 문제였다.

2. 우선 Beautiful JavaScript 를 이용하여 자바스크립트를 정렬시킨다.

3. 정렬된 스크립트를 난독화 해제 사이트를 통하여 해제함

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

 

 

4.

 

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에 어떻게 값을 넣어야 하지 고민.

- 힌트의 큰 숫자를 보고 n에 대입

- python을 통하여 result 결과 값을 구함

- 틀림. 

???????????

 

- 스크립트를 잘몰라서 풀이를 찾아보니, 밑에 스크립트가 하나더 있었다.

function init(){
document.frm.password.value = "";
document.frm.password.focus();
}

 

 

- 저기 value에다가 PASS(12342046413275659) 을 넣어주면 된다. (프록시 사용)

 

- 사실 처음에 풀이된 코드에다가 n을 힌트의 값으로 넣고 result의 값을 제대로 찾아냈으면

풀었을 문제인데, 아쉽다.

 

 

# 난독화 문제는 앞에 eval 을 alert 등으로 바꿔서 확인한 후 풀기.

# script 끝까지 읽어보기