[7] 자바스크립트의 함수 이해하기

난독화/난독화 강좌 2013. 5. 19. 03:58

[7] 자바스크립트 함수 이해하기

 

1.      자바스크립트 함수

 

자바스크립트에서 함수는 난독화에서도 다양하게 이용되기 때문에 잘 이해해 두어야 한다.

자바스크립트에서 함수도 수학에 함수와 동일하다. X라는 입력 값을 넣었을 때 Z라는 출력 값이

나오도록 해주는 것을 말한다

아래의 그림을 참고하여 자바스크립트에서 함수를 표현 방법을 알아보자

[그림 1] 자바스크립트 함수

 

1)    그림에서 은 함수의 이름을 선언해 주는 것이다. 함수를 실행시킬 때 함수의 이름을 사용한다.

2)    는 연산해주는 부분이다. 실제 동작 하게하는 스크립트가 들어가는 부분이다.

3)    은 계산된 결과 값을 을 리턴 해주는 부분이다. ( x에 값이 들어오면 12를 더해 b를 리턴)

4)    는 함수를 실행하는 부분으로, 7을 넣어 kwang( )로 정의된 함수를 실행시키라는 뜻이다.

5)    함수를 실행 후 b의 값을 출력해 보면 b=19라는 결과를 얻을 수 있다.

 

 

 

2.      예제를 통하여 함수 사용법 익히기

 

아래 예제를 통하여 연습하면서 함수와 친해져 보자!

 

2.1 기본구조 연습

<script>

function kwang()                       //-- 함수이름

 {

   a="kwangguevara"+".tistory.com";    //-- 스크립트

   return a;                           //-- 출력 값 (스크립트 후 결과값)

 };

// alert(a) 이 부분에서 a값을 alert해보면 정의되지 않아 오류 발생

kwang();                              //-- 함수 실행

alert(a);                               //-- 함수가 실행 후 a 값 확인 

</script>

 

        1)    Kwang()가 실행되면 되면 a=”kwangguevara.tistory.com”가 되는 함수이다.

        2)    함수 실행 전에는 a가 정의되지 않았지만, 실행 후에는 출력이 되는 것을 알 수 있다

 

2.2 함수 속 함수 구조

<script>

function kwang()                //-- 첫 번째 함수

 {

   var a='kwang'+'guevara';

   return a;

 };

 

function sam()                 //-- 두 번째 함수

 {

   b=kwang()                 // 첫 번째 함수의 return 값을 b에 저장

   var c=b+"moc.yrotsit.".split("").reverse().join("");

   return alert(c);              // 두 번째 함수의 출력 값 (alert을 이용하여 출력)

 };

sam();                        // 두 번째 함수 실행

</script>

 

        1)    Sam()함수 실행 시 kwang()함수가 실행되고 값이 b에 저장되어 변수 c를 구하는데 사용된다.

        2)    위의 경우처럼 난독화에서도 함수를 미리 정의해 놓고 다른 함수에서 불러 쓰는 경우가 많다

 

2.3 난독화에서 함수 사용 예

 

- 아래와 같은 한 줄로 된 자바스크립트가 포함되어 있다. 동작원리를 알아보자

 

<script>function _(x,xx){var a=(x+xx).split("").reverse().join("");return a;};var t = open;function sam(s){I=_("moc.yrots","it.araveuggnawk");var c="http://"+I;s(c);};sam(t); </script>

 

- Malzilla Decoder 탭에 있는 [format code] 기능을 이용하여 보기 좋게 정리하자.

 

<script>

 function _(x,xx)                       //ß 함수

 {

   var a=(x+xx).split("").reverse().join(""); //-- x변수와 xx변수를 더해서 거꾸로

   return a;

 };

 var t = open;                        //-- t 변수 정의

 function sam(s)                      //ß 함수

 {

   I=_("moc.yrots","it.araveuggnawk");  //-- 함수를 실행하여 I 변수에 저장

   var c="http://"+I;

   s(c);                              //-- sam(s) 함수의 출력값

 };

 sam(t);                              //-- sam()함수의 s부분에 t변수를 넣어 실행

 </script>

 

        1)    스크립트를 실행하면 웹 브라우저가 실행되어 “http://kwangguevara.tistory.com/”으로 접속한다

        2)    I=_("moc.yrots","it.araveuggnawk"); function _(x,xx)를 실행하여 I에 저장한다.

ð  x 변수에 ”moc.yrots"xx변수"it.araveuggnawk" 값을 넣은 _(x,xx) 형태인 것을 알 수 있다

        3)    실제 악성스크립트에서는 함수 명을 애매하게 만들어 알아보기 어렵게 하는 경우가 많다 

설정

트랙백

댓글