[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

설정

트랙백

댓글