728x90
핵심 소스는 아래와 같다.
<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/
-난독화 해석
https://www.strictly-software.com/unpack-javascript
바로 난독화되기 전의 소스를 얻었다.
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 |