[8] Dehydrating a String (보이지 않는 코드)

난독화/난독화 강좌 2013. 5. 23. 01:01

[8] Dehydrating a String (보이지 않는 코드)

 

 

1.      Dehydrating a String 이란?

Dehydrating a String은 공격코드를 탭과 스페이스로 난독화하여 소스코드에서 공백으로만 보이도록 작성된 코드입니다. 때문에 보이지 않는 코드 또는 공백코드라고 알려져 있습니다. .

[그림 1] Dehydrating a String (보이지 않는 코드)

1) 2008 Blackhat 보안 컨퍼런스에서 최초 발표 (Hoffman)

2) 201112월에 국내에서 악성코드 유포에 이용 탐지

 

 

2.      Dehydrating a String 코드가 포함된 해킹문제 풀이 (2012 Codegate 문제)

분석에 이용된 샘플은 2012 Codegate 해킹대회에 출제되었던 문제로 tra님이 제공해 주었다.

 

2.1 샘플 구성

- 메인 페이지와 하위폴더에 이미지 및 다수의 구성파일을 가지고 있는 구조로 되어있다.

[그림 2] codegate 문제 구성

 

- 메인 페이지 실행 시 화면

[그림 3] 메인 페이지 화면

 

2.2 소스코드 확인

2.2.1 메인 페이지 소스코드

[그림 4] 메인 페이지 소스코드

1) html 종료 후 비정상적으로 의심스러운 공백스크립트가 삽입된 것을 확인 할 수 있다.

 

2.2.2 codegate.js 소스 코드

 

[그림 5] codegate.js 소스코드

1) 메인 페이지에서 codegate.js를 불러오는 것이 확인된다.

2) codegate.js 소스 확인 시 의심스러운 스크립트를 확인 할 수 있다.

 

[그림 6] 의심스크립트 디코딩

1) 의심스러운 스크립트만 분리하여 eval alert으로 수정 후 실행하면 임의코드1이 확인된다

 

[그림 7] 임의코드1 malzilla를 이용하여 보기좋게 정리

1)     임의코드1malzilla의 기능을 이용하여 정리해보면 함수의 형태를 가지고 있고, parseInt

     String.fromCharCode로 보아 난독화 데이터를 복호화하는 역할이라고 추측할 수 있다.

2)     [그림 7]처럼 eval alert으로 변환하여 실행해보면, 결과값이 나타나지 않는다. 복호화되는

     데이터 부분이 없기 때문이다.

3)     다른 어딘가에 디코딩된 데이터가 있을 것이라고 판단되어, 관련 소스코드를 모두 확인결과

     [그림 4]의 메인 페이지에 삽입된 공백스크립트가 가장 의심스러웠다

 

2.2.3 메인페이지 공백스크립트 + 임의코드1 분석

[그림 8] 임의코드1과 메인 페이지의 공백스크립트 결합

1)     임의코드1은 함수이고 공백스크립트는 함수를 실행하는 형태이므로, [그림 8]처럼 입력한다.

2)     eval alert으로 수정 후 값을 확인 해보았다.

 

[그림 9] 공백스크립트 복호화 결과

1)     임의코드1에 의해 공백코드가 임의코드2로 복호화되는 것을 확인 할 수 있었다

 

[그림 10] 임의코드2에서 인증키 값 확인

1)     임의코드2에는 인증키 값을 표시하는 듯한 authkey 값을 확인 할 수 있었다.

2)     [그림 10]처럼 alert을 이용하여 인증키 값을 확인해보자

 

[그림 11] 인증키 값 확인

 

 

3.      Dehydrating a String 부분 상세 분석

“Dehydrating a String 분석1”에서 공백코드 부분을 상세분석 해보자.

 

3.1 임의코드1 정리

[그림 12] 임의코드1 상세분석

1)     임의코드1 malzilla Format code기능으로 처럼 정리 후 어렵게 표시된 변수를 보기 쉽게

       바꾸어 주면 과 같은 함수가 된다.

 

 

3.2 공백스크립트 분석

[그림 13] 공백의 hex값 확인

1)     메인페이지의 공백스크립트의 공백 부분을 malzilla HEX값을 확인하면 09 20으로 이루어

진 것을 확인할 수 있다. (HEX값에서 09 = TAB, 20 = 스페이스바)

2)     TAB과 스페이스로 이루어져 있기 때문에 마치 아무것도 없는 것 처럼 보였던 것 이다. 

 

[그림 14] 스페이스바=1, TAB=0으로 변환

1)    스페이스바=1, TAB=0으로 변환하여 보면 01로 이루어진 것을 확인 할 수 있다.

2)     임의코드1 함수에서는 공백코드를 2진수로 변환 후 다시 문자열로 변환한다

 

3.3 공백스크립트 상세분석

공백부분을 복호화하는 함수부분을 자세히 알아보고 연습해 보자!

  분석에 사용된 공백코드는 너무 길어, 실습은 수정한 공백코드를 사용하겠습니다.

<script>

function c(s)

{

   s=s.replace(/ /g,1);           //-- 공백(스페이스바) 1로 변환

   s=s.replace(/\t/g,0);         //-- TAB 0으로 변경 ('\t' = TAB)

   var bb=s;             

   s="";

   for(i=0;i<bb.length;i++)

   {

     s=bb.substring(i,i+1)+s    //-- 순서를 거꾸로 변경 (reverse와 동일한 효과)

   };

   var cc="";

   for(i=0;i<s.length;i+=9)

   {

     cc+=String.fromCharCode(parseInt(s.substring(i,i+9),2)) 

//-- 8개자씩 끈어서 2진수를 10진수변환 후 다시 문자열로 변환하여 cc에 저장

   };

   eval(cc);                   //-- cc를 실행

}

 

c("                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ");  //-- 함수실행 부분 (s에 공백코드 삽입)

</script>

 

1)    스페이스바와 TAB 1 0으로 변환한다.

2)    substring을 사용하여 순서가 반대로 변환되도록 한다.

3)     8자리씩 잘라 2진수의 형태를 갖추게 하고, parseInt를 이용하여 10진수로 만든다.

4)     String.fromCharCode를 이용하여 문자열로 변환하여 cc 변수에 저장하고 eval로 실행한다.

 

 

설정

트랙백

댓글