인생이란 공평하지 않다

작은 진동/명언 2013. 5. 17. 03:03
Life is not fair; get used to it. 

 

인생이란 공평하지 않다. 이 사실에 익숙해져라. (빌 게이츠)

설정

트랙백

댓글

[6] 난독화에 자주 등장하는 자바스크립트 함수 1

난독화/난독화 강좌 2013. 5. 17. 02:47

[6] 난독화에 자주 등장하는 스크립트 함수 1

 

1.      String.fromCharCode

String.fromCharCode는 아스키코드를 기준으로 숫자를 문자로 변환해주는 함수이다.

아래의 예제를 통하여 실습해 보면 쉽게 이해할 수 있을 것이다.

<script>

// -- 기본 사용 예제 1

document.write(String.fromCharCode(65));  // -- 출력 1

document.write("<br>");document.write("<br>");  // -- 단지 결과값의 줄 바꾸기 역할만!!

 

// -- 기본 사용 예제 2

s=65

document.write( String.fromCharCode(s));  // -- 출력 2

document.write("<br>");document.write("<br>");  // -- 줄 바꾸기

 

// -- 문자열로 변환하는 예제

a="104,116,116,112,58,47,47,107,119,97,110,103,103,117,101,118,97,114,97,46,116,105,115,116,111,

114,121,46,99,111,109";

b=a.split(",");  // -- a를 배열로 만드는 부분

c="";

for (i=0;i<b.length;i++)  // -- i=0 부터 b의 길이 보다 작을 때 까지 1씩 증가

  {

   c+=String.fromCharCode(b[i]);  // -- 배열 b i번재 요소를 문자화해서 c 변수에 저장

  }

document.write(c);  // -- 출력 3

 

</script>

 

## 예제 스크립트 결과  

ð  A    (출력 1)

ð  A    (출력 2)

ð  http://kwangguevara.tistory.com   (출력 3)

 

String.fromCharCode는 난독화된 데이터 복호화시 key 값을 문자열로 변환하여 저장하기 위해 많이 사용합니다. 때문에 key값이 저장된 변수를 찾는데 도움이 됩니다.

 

2.      charCodeAt

String.fromCharCode의 반대라고 생각하면 된다. 문자를 숫자로 변환해주는 함수이다

 기본형태: 변수(문자열).charCodeAt(자리수);  -- 변수(문자열)(자리수)를 숫자로 변환

 

 역시 아래의 예제를 통하여 실습해 봅시다!!

<script>

// -- 기본 사용 예제 1

a="A";

document.write(a.charCodeAt(0));    // -- 출력 1

document.write("<br>");document.write("<br>");   // -- 줄 바꾸기

 

// -- 기본 사용 예제 2

b="ABC";

document.write(b.charCodeAt(0) + ", " +b.charCodeAt(1) + ", " + b.charCodeAt(2));  // -- 출력 2

document.write("<br>");document.write("<br>");  // -- 줄 바꾸기

 

 

// -- 문자열을 변환하는 예제

c="http://kwangguevara.tistory.com";

s="";

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

{

 s+=c.charCodeAt(i)+", ";

}

document.write(s);    // -- 출력 3

</script>

 

## 예제 스크립트 결과  

ð  65          (출력 1)

ð  65, 66, 67   (출력 2)

ð  104, 116, 116, 112, 58, 47, 47, 107, 119, 97, 110, 103, 103, 117, 101, 118, 97, 114, 97, 46, 116, 105, 115, 116, 111, 114, 121, 46, 99, 111, 109,       (출력 3)

 

 

3.      parseInt

String 인자 값에서 정수로 표현 가능한 부분을 10진수로 변환하여 나타내어 주는 함수이다.  

기본형태: parseInt(string, 진수);  --  string 진수를 10진수로 변환

* 진수 부분에는 2 ~ 36의 숫자만 들어갈 수 있다.

* 진수부분을 생략했을 때 string 부분이 0으로 시작하면 8진수로, \x로 시작하면 16진수로

처리된다.

 

<script>

//parseInt(string, 진수) <---스트링(진수) 10진수로 변환

a=parseInt(1010,2);

document.write(a + "<br>");    // -- 출력 1

a=parseInt(1010,8);

document.write(a + "<br>");    // -- 출력 2

a=parseInt(1010,16);

document.write(a + "<br>");   // -- 출력 3

a=parseInt(1010,36);

document.write(a + "<br>");   // -- 출력 4

 

// parseInt를 이용하여 Hex값을 10진수로 변환하기

b="68,74,74,70,3a,2f,2f,6b,77,61,6e,67,67,75,65,76,61,72,61,2e,74,69,73,74,6f,72,79,2e,63,6f,6d";

b=b.split(",");

c="";

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

{

  c+=parseInt(b[i],16)+", ";

}

document.write(c);       // -- 출력 5

</script>

 

## 예제 스크립트 결과  

 

ð  10        (출력 1)

ð  520       (출력 2)

ð  4112      (출력 3)

ð  46692     (출력 4)

ð  104, 116, 116, 112, 58, 47, 47, 107, 119, 97, 110, 103, 103, 117, 101, 118, 97, 114, 97, 46, 116, 105, 115, 116, 111, 114, 121, 46, 99, 111, 109,     (출력 5)

 

4.      Hex값을 문자열로 변환하기

String.fromCharCode parseInt를 이용하여 hex값을 문자열로 변환하는 예제이다.

실제 악성스크립트에서 상당히 많이 사용되고 있으므로 확실히 익혀두기 바란다.

 

<script>

// 응용하기 (16진수를 문자열로 변환하기)

b="68,74,74,70,3a,2f,2f,6b,77,61,6e,67,67,75,65,76,61,72,61,2e,74,69,73,74,6f,72,79,2e,63,6f,6d";

b=b.split(",");

c="";

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

{

  c+=String.fromCharCode(parseInt(b[i],16));   // -- 16진수를 10진수로 변환 후 문자열로 변환

}

document.write(c);     // -- 출력 1

</script>

 

## 예제 스크립트 결과  

ð  http://kwangguevara.tistory.com

설정

트랙백

댓글

사쿠라 툴킷 난독화 풀이

Web Exploit Kit/ Sakura EK 2013. 5. 15. 00:48

사쿠라 툴킷 난독화 풀이

 

1.      Sakura Exploit Toolkit 이란?

악성코드 유포에 이용되는 Web exploit Toolkit 중 하나이다. 국내에서는 많이 알려져 있지 않지만, 2012년 이뤄진 사이버 공격 유형에서 2(22%)를 차지하고 있다. 블랙홀 툴킷과 마찬가지고 pdf, java 등 다양한 취약점을 이용한다.

 

[그림 1] 2012년 발생한 툴킷 유형 (ETNEWS 기사 내용 중)

 

 

2.      Sakura Toolkit의 난독화

지인을 통하여 구하게 된 사쿠라 툴킷 샘플은 JAVA 취약점을 이용한 부분만 분석이 가능하였다.

Html input tag value 값을 자바스크립트의 함수로 복호화 하는 형식을 기본적으로 가지고 있으며, 독특한 점 스크립트의 특정 데이터를 자바(.Jar)파일의 Main.Class에서 복호화하여 동작하는 것이다.

 

 

3.      Sakura Toolkit의 난독화 분석

분석한 샘플은 지인(설원)이 제공해준 것으로 사쿠라 툴킷 중 일부에 대한 것이며 분석 시 악성 URL은 재현되지 않아 가능한 부분만 분석하였다.

 

3.1 Sakura Toolkit의 구조

[그림 2] Sakura Toolkit의 구조

 

 

3.2 난독화 스크립트 분석

 

3.2.1 난독화 분석 1 (‘데이터 A’ 부분 분석)

[그림 3] ‘데이터 A’ 부분과 관련 스크립트 정리

1)    데이터 A’ 부분과 데이터 A’ 복호화 스크립트 부분만 분리한다.

2)    input 부분의 value function hyurls(n)으로 복호화하는 형태로 구성되어 있다.

3)    복호화된 데이터가 q 변수에 저장되기 때문에 그림에서 방법 또는 방법으로 값에

 저장되는 데이터를 확인 할 수 있다.

 

[그림 4] ‘데이터 A’ 부분 복호화 결과

 

3.2.2 난독화 분석 2

 

- ‘데이터 A’ 복호화된 부분 추가 분석

[그림 5] 1차 결과 추가 분석

1)    데이터 A’ 복호화 부분은 if절을 사용하여 java 버전에 따라 동작하도록 구성되어 있다

2)    document.write를 사용하고 있고, 빨간 박스 부분은 base64로 인코딩되어 있다.

 

- base64 decoding

[그림 6] malzilla를 이용한 base64 decoding

 

- document.write 적용 후 정리

[그림 7] document.write base64 디코딩 후 모습

1)    정리된 데이터를 보면 value 값 난독화된 문자로 된 것을 확인 할 수 있다.

2)    의 부분을 보고 Main.class에서 해당 부분을 복호화 한다는 힌트를 얻을 수 있었다

 

- Java Decompiler를 이용한 Main.class 분석

[그림 8] Java Decompiler Main.class 확인

1)    샘플에 포함된 자바(.jar)파일을 Java Decompiler로 확인한다.

2)    Main.class 확인 시 복호화 시 이용될 듯한 함수를 찾을 수 있었다.

3)    의 부분을 보고 Main.class에서 해당 부분을 복호화 한다는 힌트를 얻을 수 있었다

 

- Main.class 코드를 이용한 난독화 해지

[그림 9] 코드 수정

1)    자바스크립트로 복호화를 하기 위해 Main.class의 함수를 [그림 9] 처럼 수정한다.

2)    난독화된 데이터를 s 변수로 삽입하고 결과값을 alert을 이용하여 확인한다.

 

[그림 10] 최종 결과 값

확인된 URL은 재현되지 않아 추가 분석은 불가능 하였다.

 

3.3 PluginDectect (0.8.0) 정보

PluginDectect 부분은 블랙홀 툴킷에서도 자주 보았던 부분으로 java, pdf, flash 등 다양한 Plugin 정보를 수집해 주는 스크립트다. 이 수집된 정보를 통해 공격코드에서 취약점이 존재하는 부분을 공격하여 악성행위를 하게 된다.

 

해당 스크립트는 아래의 사이트에서 누구나 쉽게 원하는 부분만 포함하여 제작할 수 있다.

 

- http://www.pinlady.net/PluginDetectArchive/0.8.0/download/

 

3.4 PDF 취약점 관련 부분 (재현되지 않아, 다음 기회 ~ ㅠㅠ)

 

설정

트랙백

댓글