본문 바로가기

Develop/Front-End

난독화 된 자바 스크립트 분석하기

이번에 내가 맡게 된 업무는 난독화 된 스크립트를 분석하여

특정 행위를 하는 지 확인해보는 업무다. 🤔

 

다른 사람이 작성 한 코드를 보고 이해하는 건 역시 어려운 일이지만

이해를 하고 다음에 내가 적용할 일이 있으면 그것만큼 값진 경험도 없다고 생각한다.😂

 

이 일을 맡게 된 건 경쟁사 스크립트가 

어뷰징 행위를 한다고 판단 하여 분석하게 되었다.

역시나 그 행위를 하고 있는게 맞았다...😛

 

 


 

진행상황

스크립트가 특정 행위를 한다고 예상.

1.기능 예상 시나리오

2.스크립트 분석 (변수 및 함수 , 전역 변수 용도파악)

  2-1. 특정 조건 파악

  2-2. 데이터 통신 간 요청 데이터 확인 , 응답 데이터 확인

3.디버깅


이슈 & 고민 및 해결

 

해당 코드를 분석하면서 어려움을 겪던건

난독화 된 코드이기도 했지만

변수에 값 대입할 때 조건을 걸어 놓았기에

코드를 그냥 읽고 지나친다면 이게 값을 대입하는 부분인지 조건인지 헷갈리 수가 있다는 것이다 🤨

 

예를 들어 

 

// 변수 값 대입
var dj = "안녕하세요";

var life,p;

life = {};
p = "hello Wolrd";

!life.user_id && p && (life.user_id = p);

life 객체에 키 user_id 값이 undefined 와 nulll 이 아니면 p 값을 대입하는거다.

 

일반적으로 대입연산자를 사용하여 값을 바로 대입하는게 아니라 조건을 주어 해당 값이 조건에 만족해야만 값을

대입시켜놓았다 앞으로 스크립트를 작성할 때 여러 if문을 작성하는게 아니라 이렇게 값을 대입하는 형식

나도 자주 사용하게 될 것 같다.🤣


참고 레퍼런스

http://jsbeautifier.org/

 

Online JavaScript beautifier

Beautify JavaScript, JSON, React.js, HTML, CSS, SCSS, and SASS

beautifier.io

http://dean.edwards.name/unpacker/

 

/unpacker/

This only works in browsers which have a built-in pretty-printer. Copyright © 2004-2023 Dean Edwards. All rights reserved.

dean.edwards.name


TO DO List

1. 변수에 임의 값 대입

2. 디버깅

3. 해당 행위 동작하는지 확인


Example Code

회사 자산을 함부로 공개 할 수 없어

다양한 난독화 코드 종류 소개로 대체하겠다

 

1. 이모티콘 난독화(https://utf-8.jp/public/aaencode.html)

alert("Hello, dj")
゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');

2.hex 형식 난독화(https://obfuscator.io/)

function hi() {
  console.log("Hello dj!");
}
hi();
(function(_0x6880a2,_0x37c229){var _0x10a19d=_0x15ee,_0x17febb=_0x6880a2();while(!![]){try{var _0x3432e5=-parseInt(_0x10a19d(0x13c))/0x1*(-parseInt(_0x10a19d(0x140))/0x2)+parseInt(_0x10a19d(0x143))/0x3+-parseInt(_0x10a19d(0x142))/0x4*(-parseInt(_0x10a19d(0x13e))/0x5)+-parseInt(_0x10a19d(0x13f))/0x6*(parseInt(_0x10a19d(0x13b))/0x7)+-parseInt(_0x10a19d(0x145))/0x8*(-parseInt(_0x10a19d(0x146))/0x9)+parseInt(_0x10a19d(0x13a))/0xa*(-parseInt(_0x10a19d(0x147))/0xb)+parseInt(_0x10a19d(0x141))/0xc*(-parseInt(_0x10a19d(0x13d))/0xd);if(_0x3432e5===_0x37c229)break;else _0x17febb['push'](_0x17febb['shift']());}catch(_0x1d8892){_0x17febb['push'](_0x17febb['shift']());}}}(_0x301c,0xa9ff6));function hi(){var _0x5a87e7=_0x15ee;console[_0x5a87e7(0x144)]('Hello\x20dj!');}function _0x15ee(_0x431c9a,_0x33cf25){var _0x301c86=_0x301c();return _0x15ee=function(_0x15eecf,_0x2fb7c8){_0x15eecf=_0x15eecf-0x13a;var _0x2c4167=_0x301c86[_0x15eecf];return _0x2c4167;},_0x15ee(_0x431c9a,_0x33cf25);}hi();function _0x301c(){var _0x360e4c=['396608EvcHuJ','27ifKRyY','475277FLfePp','70RLdTio','21LsqitY','69gktPxl','99749dsVcvm','10qIlnRg','1313982mlqaiD','5514rttdTh','120sKtIrN','1956252cGAtEo','1246179bGElqS','log'];_0x301c=function(){return _0x360e4c;};return _0x301c();}

3.jjencode (https://utf-8.jp/public/jjencode.html)

alert("Hello, Dj" )
$한국=~[];$한국={___:++$한국,$$$$:(![]+"")[$한국],__$:++$한국,$_$_:(![]+"")[$한국],_$_:++$한국,$_$$:({}+"")[$한국],$$_$:($한국[$한국]+"")[$한국],_$$:++$한국,$$$_:(!""+"")[$한국],$__:++$한국,$_$:++$한국,$$__:({}+"")[$한국],$$_:++$한국,$$$:++$한국,$___:++$한국,$__$:++$한국};$한국.$_=($한국.$_=$한국+"")[$한국.$_$]+($한국._$=$한국.$_[$한국.__$])+($한국.$$=($한국.$+"")[$한국.__$])+((!$한국)+"")[$한국._$$]+($한국.__=$한국.$_[$한국.$$_])+($한국.$=(!""+"")[$한국.__$])+($한국._=(!""+"")[$한국._$_])+$한국.$_[$한국.$_$]+$한국.__+$한국._$+$한국.$;$한국.$$=$한국.$+(!""+"")[$한국._$$]+$한국.__+$한국._+$한국.$+$한국.$$;$한국.$=($한국.___)[$한국.$_][$한국.$_];$한국.$($한국.$($한국.$$+"\""+$한국.$_$_+(![]+"")[$한국._$_]+$한국.$$$_+"\\"+$한국.__$+$한국.$$_+$한국._$_+$한국.__+"(\\\"\\"+$한국.__$+$한국.__$+$한국.___+$한국.$$$_+(![]+"")[$한국._$_]+(![]+"")[$한국._$_]+$한국._$+",\\"+$한국.$__+$한국.___+"\\"+$한국.__$+$한국.___+$한국.$__+"\\"+$한국.__$+$한국.$_$+$한국._$_+"\\\"\\"+$한국.$__+$한국.___+")"+"\"")())();
반응형