자바스크립트 난독화(Javascript Obfuscation)란?


자바스크립트는 클라이언트(Client)에서 실행되도록 하는 언어입니다. 따라서 사용자(Client)가 웹사이트에 접근하게 되면 해당 스크립트를 그대로 볼 수 있게 됩니다. 이를 방지하고자 적용하는 기법이 바로 난독화입니다. 난독화는 자바스크립트 이외에도 다양한 언어에서 사용할 수 있습니다. 그러나 이 포스트에서는 자바스크립트의 난독화와 난독화 기법과 방법에 대해 알아보려고 합니다.


자바스크립트의 난독화 예시는 다음과 같이 있습니다.


자바스크립트 예제 소스

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}


자바스크립트 예제 소스 난독화(Base64)

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()


자바스크립트 예제 소스 난독화(Base64 + PHP)

<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>


위의 예제 소스는 단순히 javascript를 base64로 난독화했을 뿐입니다.

때문에 사실은 난독화라고 하기에는 기법의 깊이가 매우 낮은 수준입니다.


이러한 간단한 기법 이외에도 다양하고 독특한 난독화 기능들이 있습니다.

아래에서 그 기법들을 알아보도록 합시다.



 

 웹 사이트의 자바스크립트 난독화 서비스


자바스크립트를 난독화해주는 웹 사이트들을 소개하려고 합니다. 설명이 많이 필요없고 다음 사이트의 예제와 링크를 살펴보시겠습니다.


Javascript Compressor(Dean.edwards) 링크

이 사이트는 개인이 제공하는 서비스인 것 같습니다.

아무런 옵션을 주지 않았을 때의 결과는 다음과 같이 패킹을 해줍니다.




만약 Base62 encode를 적용해주고 packing을 하게 되면 다음과 같이 보다 정교한 난독화가 됩니다.




Obfuscator.io 링크

이 사이트는 해외 사이트이며, hex코처럼 변수를 만들어 보다 복잡한 구조로 난독화를 수행해주는 사이트입니다.

예시는 다음과 같습니다.





JavascriptObfuscator.com 링크

이 사이트도 위의 obfuscator.io와 비슷한 사이트입니다.

예시는 다음과 같습니다.





 

 괴짜스러운 난독화


난독화를 제공하는 사이트는 위의 사이트 이외에도 굉장히 다양하게 존재합니다.

물론 다음과 같이 이모티콘처럼 만든다던가, 변수 이름을 헷갈리게 만들어 알아먹기 힘들게 한다든가 하는 난독화 기법도 존재합니다.


일본 이모티콘 자바스크립트 난독화 사이트 링크


링크의 이름대로 일본에서 쓰이는 이모티콘을 이용하여 코드를 난독화해주는 사이트입니다.

예시는 다음과 같습니다.

해당 사이트는 일본 이모티콘 난독화, Japanese obfuscation, obfuscation emoticon 등으로 검색해서 사이트를 찾을 수 있습니다.




브레인 블리딩 자바스크립트 난독화 사이트 링크


이 사이트는 사실 웹 자체에서는 서비스를 제공하고 있지 않습니다.

그러나 이 기법이 매우 독특하여 참고할 수 있을 것 같아 공유해보려 합니다.

해당 사이트에서는 소스코드를 $와 _를 이용하여 난독화를 수행하도록 합니다.


프로그램을 다운로드 받아서 코드를 난독화된 코드로 바꿔보도록 합시다.



UTF-8.jp의 JJencode 링크


여기서 여러분이 인코딩하고자 하는 global variable name을 입력해주면 그 문자를 이용하여 난독화가 이루어지는 것을 볼 수 있습니다.





+ Recent posts