Back

Javascript 코드 난독화(Code Obfuscation)와 JS Packing

코드 난독화란 코드를 쉽게 알아볼 수 없도록 만드는 기술이다. 쉽게 생각하면 “int a = 123” 이란 코드를 “int a = ((123+34+350-34-350)*0)+123” 같이 좀 더 알아보기 어렵게 만드는 기술이다. 물론 위의 대충 쓴 코드는 쉽게 볼 수 있지만 escape, unescape 함수 등을 이용해서 코드가 눈에 잘 들어오지 않도록 만들 수 있다.

난독화 방법도 매우 많고 난독화를 도와주는 프레임워크, 툴도 매우 많다. 그 중 아주 가볍게 몇개만 적어보았고, 쉽게 Packing 을 할 수 있는 사이트 하나를 더 소개하도록 하겠다.

1. escape, unescape 함수(URL 인코딩)

escape 함수는 url 인코딩을 지원하는 함수이다.

#Output : CODE%3D%3DBLACK

2. eval 함수를 이용한 Decimal 난독화

eval 함수는 javascript의 읽고 실행하는 함수이다. 해당 함수를 이용하여 숫자를 문자값으로 변환하여 코드의 내용을 숨길 수 있다.

#Output : script

3. 난독화에 사용되는 여러 함수들

위 eval 함수 하나만으로는 정교한 난독화가 어렵다. 분석가가 코드를 알아보기 더 힘들게 공격자는 replace, eval 등 js 함수와 unicode, hex 데이터 등 여러가지 방법으로 난독화를 진행하게 된다. 위에서 사용된 함수를 이용하여 간단하게 작성하였으며 아래와 같은 형식으로 분석에 방해를 줄 수 있다.

#Output

4. Javascript Packing

자바스크리븥 Packer 는 여러가지가 있지만 간단하게 아래 사이트에서 쉽게 가능하다. http://dean.edwards.name/packer/

#input code = “115,99,114,105,112,116”; code = eval(“String.fromCharCode("+code+")"); document.write(code);

#Output (Base62 encode) eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c–)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\w+'};c=1};while(c–)if(k[c])p=p.replace(new RegExp('\b'+e(c)+'\b',‘g’),k[c]);return p}(‘0=“6,2,3,4,5,b”;0=7(“8.9("+0+")");a.1(0);',12,12,‘code|write|99|114|105|112|115|eval|String|fromCharCode|document|116’.split('|'),0,{}))

Licensed under CC BY-NC-SA 4.0
Last updated on Jul 10, 2021 01:05 +0900