본문 바로가기

웹/SuNiNaTaS

CTF_WEEK4_# SuNiNaTaS 5

728x90
반응형
SMALL

 

이런게 가장 먼저 나온다.

키값을 확인해라이런 뜻인것 같당.

 

 

일단 아무거나 쳐봤다.

흠 뭐 별게 안나온다.

소스를 보자.

 

 

 

이릏게 힌트가 나와있다!

 

 

이런 함수도 같이 나와있담.

 

 

그리고 이런 엄청 길고 복잡해 보이는 코드도 눈에 띈다.

 

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

 약간 요런 느낌이다....

 

이 코드는 조건문을 통해서 replace를 해 주는 역할을 하고 있는 것 같다!

소스에 나와있는 함수나 조건문 등에 아까 주어진 힌트를 넣어서 출력되는 값을 입력해주면 될 것 같다….

프록시툴을 사용해서 해결해보려구 했는데 뜻대로 잘 되지 않아서….;0;

 

이것 저것 찾아보다가 저기 소스에 있는 코드가 자바 난독화의 꽤 유명한 예제 중 하나라는 것을 알게 되었다.

 

https://m.blog.naver.com/PostView.nhn?blogId=dmbs335&logNo=10177022033&proxyReferer=https:%2F%2Fwww.google.com%2F

 

Javascript Packer 분석 [언패킹]

eval(function(p,a,c,k,e,r){  e=function(c){  return c.toString(a) } ; if(!''.replace(/^/,String)){  wh...

blog.naver.com

 

이 사이트를 참고해서 공부했다.

 

그리고 언패킹 사이트를 알게 되었고

 

https://minimonk.net/8923 참고

 

js 난독화

패킹 혹은 난독화라고 해야 하려나? 패킹은 단순하게 base62로 인코딩 한 것을 eval을 통해서 실행하는 구조인 거라 난독화라 하긴 애매한 녀석이고 짧은 녀석을 패킹하니 오히려 더 데이터가 많아

minimonk.net

 

 

이렇게 넣어주니, 뭔가 깔끔하게 떨어지는 출력값을 얻었다!

 

(약간 편법으로 푼 듯한 너낌이 없잖아 있어서…..ㅎㅎ….다음에 프록시 툴을 좀 더 공부하고 프록시 툴로 이 문제를 다시 풀어보려 한다)

 

 

일단 이런 코드를 얻었다.

 

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)

}

 

자바를 써야하나 처음에는 생각했는데...

자바에 또 막상 넣어보니 돌아가지를 않아서 개발자 도구를 켜서 위에서 얻은 값을 사용했다.

 

 

언패킹한 코드를 넣어주고

밑에

alert(PASS(12342046413275659));

이 명령을 추가해줬고, 이를 통해 값을 얻어냈다.

 

키를 얻었다!

 

728x90
LIST

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

# SuNiNaTaS 8  (0) 2021.02.16
# SuNiNaTaS 7  (0) 2021.02.10
# SuNiNaTaS 1  (0) 2021.02.10
CTF_WEEK3_# SuNiNaTaS 6  (0) 2021.02.05
CTF_WEEK3_# SuNiNaTaS 2  (0) 2021.02.05