SuNiNaTaS의 5번문제 풀이입니다.
[WEB]
key 값을 확인한다
페이지 소스를 봅시다.
난독화된 JS코드
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 -->
<!-- M@de by 2theT0P -->
난독화된 코드를 언패킹해봐야 알 수 있을 것 같네요.
위에 처럼 패킹된 코드는 콘솔창에서 console.log로 언패킹할 수 있다.
언패킹한 코드를 정렬
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()함수의 인자로 힌트에 나온 정수를 넣어보았다.
9c43c20c 라는 값이 나왔다. 이 값을 폼에 넣었더니 key가 나왔다.