이번에 내가 맡게 된 업무는 난독화 된 스크립트를 분석하여
특정 행위를 하는 지 확인해보는 업무다. 🤔
다른 사람이 작성 한 코드를 보고 이해하는 건 역시 어려운 일이지만
이해를 하고 다음에 내가 적용할 일이 있으면 그것만큼 값진 경험도 없다고 생각한다.😂
이 일을 맡게 된 건 경쟁사 스크립트가
어뷰징 행위를 한다고 판단 하여 분석하게 되었다.
역시나 그 행위를 하고 있는게 맞았다...😛
진행상황
스크립트가 특정 행위를 한다고 예상.
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://dean.edwards.name/unpacker/
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" )
$한국=~[];$한국={___:++$한국,$$$$:(![]+"")[$한국],__$:++$한국,$_$_:(![]+"")[$한국],_$_:++$한국,$_$$:({}+"")[$한국],$$_$:($한국[$한국]+"")[$한국],_$$:++$한국,$$$_:(!""+"")[$한국],$__:++$한국,$_$:++$한국,$$__:({}+"")[$한국],$$_:++$한국,$$$:++$한국,$___:++$한국,$__$:++$한국};$한국.$_=($한국.$_=$한국+"")[$한국.$_$]+($한국._$=$한국.$_[$한국.__$])+($한국.$$=($한국.$+"")[$한국.__$])+((!$한국)+"")[$한국._$$]+($한국.__=$한국.$_[$한국.$$_])+($한국.$=(!""+"")[$한국.__$])+($한국._=(!""+"")[$한국._$_])+$한국.$_[$한국.$_$]+$한국.__+$한국._$+$한국.$;$한국.$$=$한국.$+(!""+"")[$한국._$$]+$한국.__+$한국._+$한국.$+$한국.$$;$한국.$=($한국.___)[$한국.$_][$한국.$_];$한국.$($한국.$($한국.$$+"\""+$한국.$_$_+(![]+"")[$한국._$_]+$한국.$$$_+"\\"+$한국.__$+$한국.$$_+$한국._$_+$한국.__+"(\\\"\\"+$한국.__$+$한국.__$+$한국.___+$한국.$$$_+(![]+"")[$한국._$_]+(![]+"")[$한국._$_]+$한국._$+",\\"+$한국.$__+$한국.___+"\\"+$한국.__$+$한국.___+$한국.$__+"\\"+$한국.__$+$한국.$_$+$한국._$_+"\\\"\\"+$한국.$__+$한국.___+")"+"\"")())();
'Develop > Front-End' 카테고리의 다른 글
[axios] Axios의 사용자 제공 입력의 잘못된 유효성 검사로 인한 CSRF 취약점 CVE-2023-45857 (10) | 2024.09.10 |
---|---|
dropzone.js 를 이용하여 동영상 업로드 미리보기 및 썸네일 기능 구현기 (2) | 2023.08.02 |
배너배리에이션 기능 - 자바스크립트 캔버스 API 도전기 (1) | 2023.07.25 |
React 로 롤 전적 통계 사이트를 만들어보자! - 3 (2) | 2023.02.07 |
React 로 롤 전적 통계 사이트를 만들어보자! - 2 (21) | 2022.12.24 |