글
[7] 자바스크립트의 함수 이해하기
[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) 실제 악성스크립트에서는 함수 명을 애매하게 만들어 알아보기 어렵게 하는 경우가 많다
'난독화 > 난독화 강좌' 카테고리의 다른 글
[9] 스크립트의 동작 흐름으로 풀어보는 난독화 (0) | 2013.05.25 |
---|---|
[8] Dehydrating a String (보이지 않는 코드) (0) | 2013.05.23 |
[6] 난독화에 자주 등장하는 자바스크립트 함수 1 (0) | 2013.05.17 |
[5] 블랙홀 툴킷의 PDF 난독화 풀이 (2) | 2013.05.13 |
[4] 난독화 연습 문제풀이 따라하기 I (4) | 2013.05.08 |