난독화/난독화 강좌

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

kwangguevara 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로 실행한다.