Top 10 자바 스크립트 난독 화 The 77 Detailed Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 자바 스크립트 난독 화 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.aseanseafoodexpo.com team, along with other related topics such as: 자바 스크립트 난독 화 자바스크립트 난독화 해제, 자바스크립트 난독화 해제 툴, 자바스크립트 난독화 라이브러리, 자바스크립트 uglify, 자바스크립트 난독화 언패킹, 자바스크립트 난독화 사이트, uglifyjs 난독화, 자바스크립트 복호화


프로그래머는 반드시 알아야 되는 난독화에 대한 개념 설명
프로그래머는 반드시 알아야 되는 난독화에 대한 개념 설명


자바스크립트 난독화[Javascript Obfuscation] 개념과 서비스 웹 페이지 :: 컴퓨터를 다루다

  • Article author: kkamikoon.tistory.com
  • Reviews from users: 39370 ⭐ Ratings
  • Top rated: 3.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 자바스크립트 난독화[Javascript Obfuscation] 개념과 서비스 웹 페이지 :: 컴퓨터를 다루다 자바스크립트 난독화(Javascript Obfuscation)란? 자바스크립트는 클라이언트(Client)에서 실행되도록 하는 언어입니다. 따라서 사용자(Client)가 웹 … …
  • Most searched keywords: Whether you are looking for 자바스크립트 난독화[Javascript Obfuscation] 개념과 서비스 웹 페이지 :: 컴퓨터를 다루다 자바스크립트 난독화(Javascript Obfuscation)란? 자바스크립트는 클라이언트(Client)에서 실행되도록 하는 언어입니다. 따라서 사용자(Client)가 웹 …  자바스크립트 난독화(Javascript Obfuscation)란? 자바스크립트는 클라이언트(Client)에서 실행되도록 하는 언어입니다. 따라서 사용자(Client)가 웹사이트에 접근하게 되면 해당 스크립트를 그대로 볼 수 있게..프로그래밍도 보안도 함께 공부해야지요.
  • Table of Contents:

자바스크립트 난독화[Javascript Obfuscation] 개념과 서비스 웹 페이지

티스토리툴바

자바스크립트 난독화[Javascript Obfuscation] 개념과 서비스 웹 페이지 :: 컴퓨터를 다루다
자바스크립트 난독화[Javascript Obfuscation] 개념과 서비스 웹 페이지 :: 컴퓨터를 다루다

Read More

자바스크립트(javascript) 난독화 사이트

  • Article author: lucidmaj7.tistory.com
  • Reviews from users: 8446 ⭐ Ratings
  • Top rated: 3.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 자바스크립트(javascript) 난독화 사이트 자바스크립트(javascript) 난독화 사이트 … by lucmaj7 2019. 11. 21. 반응형. 자바스크립트는 프론트 … 자바스크립트는 프론트엔드에서 주로 실행되는 코드로 … …
  • Most searched keywords: Whether you are looking for 자바스크립트(javascript) 난독화 사이트 자바스크립트(javascript) 난독화 사이트 … by lucmaj7 2019. 11. 21. 반응형. 자바스크립트는 프론트 … 자바스크립트는 프론트엔드에서 주로 실행되는 코드로 … 자바스크립트는 프론트엔드에서 주로 실행되는 코드로 스크립트이기 때문에 외부에 노출되기 쉽다. 또 외부에 노출 되면 로직이 노출되어 악용되거나 기술이 유출 되기 쉽다. 때문에 때로는 javascript를 난독화..
  • Table of Contents:

태그

관련글

댓글0

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

티스토리툴바

자바스크립트(javascript) 난독화 사이트
자바스크립트(javascript) 난독화 사이트

Read More

자바스크립트 난독화 분석(Javascript Obfuscator)

  • Article author: velog.io
  • Reviews from users: 43846 ⭐ Ratings
  • Top rated: 3.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 자바스크립트 난독화 분석(Javascript Obfuscator) 오픈 소스 자바스크립트 난독화 도구인 JavaScript obfuscator의 동작 원리를 분석해보았다.꽤나 유명한 도구이기도 하고, 이를 통해 난독화 기법 및 … …
  • Most searched keywords: Whether you are looking for 자바스크립트 난독화 분석(Javascript Obfuscator) 오픈 소스 자바스크립트 난독화 도구인 JavaScript obfuscator의 동작 원리를 분석해보았다.꽤나 유명한 도구이기도 하고, 이를 통해 난독화 기법 및 … 오픈 소스 자바스크립트 난독화 도구인 JavaScript obfuscator의 동작 원리를 분석해보았다.꽤나 유명한 도구이기도 하고, 이를 통해 난독화 기법 및 자바스크립트 동작 원리를 더 잘 이해할 수 있을 것이라 기대했다. 온라인 버전(https://obf
  • Table of Contents:

웹해킹

compact

controlFlowFlattening

StringArray

deadCodeInjection

debugProtection

disableConsoleOutput

domainLock

forceTransformStrings

identifierNamesGenerator identifiersPrefix

numbersToExpressions

renameGlobals

renameProperties

selfDefending

마무리

자바스크립트 난독화 분석(Javascript Obfuscator)
자바스크립트 난독화 분석(Javascript Obfuscator)

Read More

자바스크립트 소스 난독화(uglify),디버그 못하게 만들기(obfuscator.io) : 네이버 블로그

  • Article author: m.blog.naver.com
  • Reviews from users: 1022 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 자바스크립트 소스 난독화(uglify),디버그 못하게 만들기(obfuscator.io) : 네이버 블로그 자바스크립트 소스 난독화(uglify),디버그 못하게 만들기(obfuscator.io) … This tool transforms your original JavaScript source code into a … …
  • Most searched keywords: Whether you are looking for 자바스크립트 소스 난독화(uglify),디버그 못하게 만들기(obfuscator.io) : 네이버 블로그 자바스크립트 소스 난독화(uglify),디버그 못하게 만들기(obfuscator.io) … This tool transforms your original JavaScript source code into a …
  • Table of Contents:

카테고리 이동

호노루

이 블로그 

 카테고리 글

카테고리

이 블로그 

 카테고리 글

자바스크립트 소스 난독화(uglify),디버그 못하게 만들기(obfuscator.io) : 네이버 블로그
자바스크립트 소스 난독화(uglify),디버그 못하게 만들기(obfuscator.io) : 네이버 블로그

Read More

자바스크립트 난독화 사이트

  • Article author: jdh5202.tistory.com
  • Reviews from users: 38261 ⭐ Ratings
  • Top rated: 4.9 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 자바스크립트 난독화 사이트 ி 자바스크립트 난독화 “소스보기”를 통해 외부에 노출되는 자바스크립트 소스를 읽기 어려운 형태로 바꿉니다. 난독화 사이트 ➽ 1. …
  • Most searched keywords: Whether you are looking for 자바스크립트 난독화 사이트 ி 자바스크립트 난독화 “소스보기”를 통해 외부에 노출되는 자바스크립트 소스를 읽기 어려운 형태로 바꿉니다. 난독화 사이트 ➽ 1. ி 자바스크립트 난독화 “소스보기”를 통해 외부에 노출되는 자바스크립트 소스를 읽기 어려운 형태로 바꿉니다.    난독화 사이트 ➽ 1. https://obfuscator.io/ ➽ 2. http://dean.edwards.name/packer/ <사..
  • Table of Contents:

‘유틸리티사이트’ Related Articles

티스토리툴바

자바스크립트 난독화 사이트
자바스크립트 난독화 사이트

Read More

JavaScript 코드 온라인 난독화 (샘플 코드)

  • Article author: joshua-dev-story.blogspot.com
  • Reviews from users: 40145 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about JavaScript 코드 온라인 난독화 (샘플 코드) JavaScript 코드를 읽기 어렵게 하는 난독화, 샘플 코드와 자바스크립트 Obfuscator(옵퓨스케이터) 도구를 사용해서 직접 테스트해 보겠습니다. …
  • Most searched keywords: Whether you are looking for JavaScript 코드 온라인 난독화 (샘플 코드) JavaScript 코드를 읽기 어렵게 하는 난독화, 샘플 코드와 자바스크립트 Obfuscator(옵퓨스케이터) 도구를 사용해서 직접 테스트해 보겠습니다. JavaScript 코드를 읽기 어렵게 하는 난독화, 샘플 코드와 자바스크립트 Obfuscator(옵퓨스케이터) 도구를 사용해서 직접 테스트해 보겠습니다.
  • Table of Contents:

1단계 테스트할 JavaScript 샘플 코드를 준비

2단계 JavaScript Obfuscator Tool에 접속

3단계 ‘난독화’하기

확인 사항

주의 사항

JavaScript 코드 온라인 난독화 (샘플 코드)
JavaScript 코드 온라인 난독화 (샘플 코드)

Read More

웹 페이지에서 나타나는 스크립트 난독화하기 – 자바스크립트

  • Article author: azcoding.tistory.com
  • Reviews from users: 30601 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 웹 페이지에서 나타나는 스크립트 난독화하기 – 자바스크립트 HTML은 어쩔 수 없이 그대로 노출되더라도 자바스크립트 코드만이라도 그대로 노출되는 것을 막고 싶을 때 사용되는 난독화 툴(사이트)을 소개코자 … …
  • Most searched keywords: Whether you are looking for 웹 페이지에서 나타나는 스크립트 난독화하기 – 자바스크립트 HTML은 어쩔 수 없이 그대로 노출되더라도 자바스크립트 코드만이라도 그대로 노출되는 것을 막고 싶을 때 사용되는 난독화 툴(사이트)을 소개코자 … 자바스크립트와 HTML은 파이썬이나 C/C++과 같이 서버에서 실행되는 게 아니라 사용자의 웹브라우저에서 해석되는 언어이다 보니 사용자가 언제든지 소스코드를 들여다볼 수 있습니다. HTML은 어쩔 수 없이 그대..
  • Table of Contents:

태그

관련글

댓글0

최근글

인기글

최근댓글

전체 방문자

티스토리툴바

웹 페이지에서 나타나는 스크립트 난독화하기 - 자바스크립트
웹 페이지에서 나타나는 스크립트 난독화하기 – 자바스크립트

Read More

자바스크립트 코드 난독화 사이트

  • Article author: oneroomtable.tistory.com
  • Reviews from users: 2945 ⭐ Ratings
  • Top rated: 4.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 자바스크립트 코드 난독화 사이트 자바스크립트 난독화를 통해 코드를 이해하기 어렵고, 권한 없이 복사 및 재사용, 수정이 힘들게 만들 수 있습니다. 난독화를 거친 코드는 가독성이 … …
  • Most searched keywords: Whether you are looking for 자바스크립트 코드 난독화 사이트 자바스크립트 난독화를 통해 코드를 이해하기 어렵고, 권한 없이 복사 및 재사용, 수정이 힘들게 만들 수 있습니다. 난독화를 거친 코드는 가독성이 … 자바스크립트 난독화를 통해 코드를 이해하기 어렵고, 권한 없이 복사 및 재사용, 수정이 힘들게 만들 수 있습니다. 난독화를 거친 코드는 가독성이 떨어지지만, 기존 코드와 동일하게 작동합니다 자바스크립트 난..
  • Table of Contents:

고정 헤더 영역

메뉴 레이어

검색 레이어

상세 컨텐츠

추가 정보

페이징

티스토리툴바

자바스크립트 코드 난독화 사이트
자바스크립트 코드 난독화 사이트

Read More

해커들 사이에 유행하는 자바스크립트 난독화 기술, 본질은 ‘시간 끌기’

  • Article author: www.boannews.com
  • Reviews from users: 27051 ⭐ Ratings
  • Top rated: 3.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 해커들 사이에 유행하는 자바스크립트 난독화 기술, 본질은 ‘시간 끌기’ 사이버 범죄자들의 자바스크립트 난독화 사랑이 식을 줄을 모른다. 방어 솔루션들을 피해가기 위해 공격자들은 계속해서 이 자바스크립트 난독화 기술 … …
  • Most searched keywords: Whether you are looking for 해커들 사이에 유행하는 자바스크립트 난독화 기술, 본질은 ‘시간 끌기’ 사이버 범죄자들의 자바스크립트 난독화 사랑이 식을 줄을 모른다. 방어 솔루션들을 피해가기 위해 공격자들은 계속해서 이 자바스크립트 난독화 기술 … 사이버 범죄자들의 자바스크립트 난독화 사랑이 식을 줄을 모른다. 방어 솔루션들을 피해가기 위해 공격자들은 계속해서 이 자바스크립트 난독화 기술을 활용하는 중이다. 물론 자바스크립트를 활용한 난독화를 탐지하는 기술이 이미 존재한다. 그러나 합법적이고 정상적인 목적에 따라 자바스크립트 난독화가 사용되는 경우도 있어 무조건 이 탐지 기술을 활용하는 것도 정답은 아니다.정보보호,정보보안,IT보안,사이버보안,,,,,,
  • Table of Contents:
See also  Top 39 캡 스톤 디자인 경진 대회 Best 206 Answer
해커들 사이에 유행하는 자바스크립트 난독화 기술, 본질은 ‘시간 끌기’
해커들 사이에 유행하는 자바스크립트 난독화 기술, 본질은 ‘시간 끌기’

Read More

코드루덴스 :: 자바스크립트 소스 코드 난독화 유틸 비교

  • Article author: codens.info
  • Reviews from users: 38425 ⭐ Ratings
  • Top rated: 4.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 코드루덴스 :: 자바스크립트 소스 코드 난독화 유틸 비교 자바스크립트 소스 코드 난독화 유틸 비교. codens 2021. 2. 22. 18:46. javascript source code Obfuscate, 소스 코드 암호화. – Obfuscation, obfuscator mangle … …
  • Most searched keywords: Whether you are looking for 코드루덴스 :: 자바스크립트 소스 코드 난독화 유틸 비교 자바스크립트 소스 코드 난독화 유틸 비교. codens 2021. 2. 22. 18:46. javascript source code Obfuscate, 소스 코드 암호화. – Obfuscation, obfuscator mangle … javascript source code Obfuscate, 소스 코드 암호화     – Obfuscation, obfuscator mangle, minimize, encode //———————— * 속도 비교 원본 : 100% terser : 96.4% javascript-..코드루덴스 블로그, 코덴스, IT, 프로그래밍 정보코드루덴스 코덴스 블로그, IT, 프로그래밍 정보
  • Table of Contents:
코드루덴스 :: 자바스크립트 소스 코드 난독화 유틸 비교
코드루덴스 :: 자바스크립트 소스 코드 난독화 유틸 비교

Read More


See more articles in the same category here: 867+ tips for you.

자바스크립트 난독화[Javascript Obfuscation] 개념과 서비스 웹 페이지

자바스크립트 난독화(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)

위의 예제 소스는 단순히 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을 입력해주면 그 문자를 이용하여 난독화가 이루어지는 것을 볼 수 있습니다.

자바스크립트 난독화 분석(Javascript Obfuscator)

오픈 소스 자바스크립트 난독화 도구인 JavaScript obfuscator 의 동작 원리를 분석해보았다.

꽤나 유명한 도구이기도 하고, 이를 통해 난독화 기법 및 자바스크립트 동작 원리를 더 잘 이해할 수 있을 것이라 기대했다. 온라인 버전(https://obfuscator.io/)도 존재한다.

javascript-obfuscator/javascript-obfuscator

분석 방법

수많은 옵션들을 하나씩 적용해가면서 어떤 코드가 추가되는지 직접 확인해 보는 방식을 사용했다. 보통 간단한 코드를 input 값으로 주었기 때문에 해당 옵션에 대한 모든 경우의 수를 확인하기에는 역부족이었겠지만, 대부분의 옵션에서 핵심적인 동작 원리를 확인할 수 있었다.

코드의 길이가 긴 경우에는 의미적으로 동일한 수도 코드(?)를 올려두고, 원본 output 코드는 아래에 추가해두었다. 자바스크립트 난독화에 관심이 있다면 직접 분석해보기를 강력하게 추천한다.

모든 옵션을 분석하지는 않았고, 내가 생각하기에 공부할만한 가치가 있다고 생각한 옵션만을 정리하였다.

Options

compact

결과를 한 줄로 출력해주는 옵션

function hi ( ) { console . log ( “Hello World!” ) ; } hi ( ) ; function hi ( ) { console [ ‘log’ ] ( ‘Hello\x20World!’ ) ; } hi ( ) ;

controlFlowFlattening

소스 코드에서 구조적으로 변화를 주어 프로그램의 이해를 어렵게 만드는 옵션

function hello ( ) { console . log ( 1 + 2 ) } hello ( ) ; function hello ( ) { var _0x1c8f8d = { ‘jAqnd’ : function ( _0x358ea9 , _0x5bfcf7 ) { return _0x358ea9 + _0x5bfcf7 ; } } ; console [ ‘log’ ] ( _0x1c8f8d [ ‘jAqnd’ ] ( 0x1 , 0x2 ) ) ; } hello ( ) ;

원래 흐름에서 단순 + 연산자에 해당하는 것을 변수, 속성, 함수의 조합으로 바꾸었다.

StringArray

문자열을 삭제하고, 특정 배열 값으로 대체하는 옵션이다.

예를 들어 var m = “Hello World” 을 var m = _0x12c456[0x1] 와 같이 변경한다.

function hi ( ) { var a = “Hello” ; var b = “World!” ; console . log ( a + b ) ; } hi ( ) ; var _0x4052 = [ ‘Hello’ , ‘World!’ , ‘log’ ] ; var _0x55cd = function ( _0x405222 , _0x55cd0a ) { _0x405222 = _0x405222 – 0x0 ; var _0x483cd2 = _0x4052 [ _0x405222 ] ; return _0x483cd2 ; } ; function hi ( ) { var _0x599393 = _0x55cd ; var _0x483cd2 = _0x599393 ( 0x0 ) ; var _0x14763e = _0x599393 ( 0x1 ) ; console [ _0x599393 ( 0x2 ) ] ( _0x483cd2 + _0x14763e ) ; } hi ( ) ;

문자열과 객체의 속성값( log )을 포함한 문자열들을 배열로 다 모아서 분석을 어렵게 한다. 문자열 배열을 가리키는 wrapper( _0x55cd , _0x599393 )를 생성하는 점이 특이하다.

StringArray 의 다양한 옵션들(서브 옵션?)

stringArrayEncoding 옵션을 사용하면 문자열들을 base64나 rc4 를 이용하여 인코딩하고, 디코딩 할 때에 사용되는 특별한 코드를 추가한다. 특별한 코드는 다음 기회에 분석해 보는 걸로(복잡함..)

stringArrayWrappersCount 옵션을 사용하면 각각의 function scope에서 string array를 가리키는 wrapper의 개수를 조정할 수 있다. 단순하게 말하면, 변수가 더 많고 복잡해진다는 것이다.

stringArrayWrappersChainedCalls 옵션을 사용하면 inner function에서 outer function의 wrapper를 연결하여 사용할 수 있다.(이를 chained call이라고 부르는 듯함). chained call을 사용하면, inner function이 중첩된 경우, 문자열을 해독하기 위해 모든 outer function을 보아야 하므로 분석 속도가 지연된다.

stringArrayWrappersType 옵션은 string array wrapper의 타입을 결정할 수 있다. variable 과 function 중에서 선택할 수 있는데, function 이 난독화 정도가 보다 높다고 한다.

stringArrayThreshold 옵션은 문자열이 string array에 포함될 확률을 정하는 데에 사용된다. 0에서 1 사이의 값으로 지정할 수 있으며, default로는 0.8이 사용된다고 한다.

deadCodeInjection

사용되지 않는 코드(deadCode)를 랜덤으로 생성하여 삽입한다.

코드의 길이가 최대 200%까지 늘어날 수 있으며, 이 옵션을 선택하면 stringArray 옵션이 자동으로 선택된다. 실제 테스트에서는 작동하지 않아 홈페이지 코드를 수정해서 가져왔다.

function hi ( ) { console . log ( ‘abc’ ) ; } hi ( ) ; var _0x5024 = [ ‘zaU’ , ‘log’ , ‘abc’ ] ; var _0x4502 = function ( _0x1254b1 , _0x583689 ) { _0x1254b1 = _0x1254b1 – 0x0 ; var _0x529b49 = _0x5024 [ _0x1254b1 ] ; return _0x529b49 ; } ; function hi ( ) { if ( _0x4502 ( ‘0x0’ ) !== _0x4502 ( ‘0x0’ ) ) { console [ _0x4502 ( ‘0x1’ ) ] ( _0x4502 ( ‘0x0’ ) ) ; } else { console [ _0x4502 ( ‘0x1’ ) ] ( _0x4502 ( ‘0x2’ ) ) ; } }

debugProtection

개발자도구에서의 debugger 옵션을 사용하지 못하게 만드는 옵션.

function hello ( ) { console . log ( ‘123’ ) ; } hello ( ) ; function hello ( ) { function debug ( ) { debugger ; debug ( ) ; } ; try { debug ( ) } catch { } console . log ( 123 ) ; } hello ( ) ;

output의 원본 코드는 아래와 같다. function hello ( ) { var _0x10762d = function ( ) { var _0x5a32f2 = ! ! [ ] ; return function ( _0xb98681 , _0x5879d3 ) { var _0x457821 = _0x5a32f2 ? function ( ) { if ( _0x5879d3 ) { var _0x8bdad9 = _0x5879d3 [ ‘apply’ ] ( _0xb98681 , arguments ) ; _0x5879d3 = null ; return _0x8bdad9 ; } } : function ( ) { } ; _0x5a32f2 = ! [ ] ; return _0x457821 ; } ; } ( ) ; ( function ( ) { _0x10762d ( this , function ( ) { var _0x148567 = new RegExp ( ‘function\x20*\x5c(\x20*\x5c)’ ) ; var _0x33f595 = new RegExp ( ‘\x5c+\x5c+\x20*(?:[a-zA-Z_$][0-9a-zA-Z_$]*)’ , ‘i’ ) ; var _0x2e7068 = _0x3dd157 ( ‘init’ ) ; if ( ! _0x148567 [ ‘test’ ] ( _0x2e7068 + ‘chain’ ) || ! _0x33f595 [ ‘test’ ] ( _0x2e7068 + ‘input’ ) ) { _0x2e7068 ( ‘0’ ) ; } else { _0x3dd157 ( ) ; } } ) ( ) ; } ( ) ) ; console [ ‘log’ ] ( ‘123’ ) ; } hello ( ) ; function _0x3dd157 ( _0x238f2c ) { function _0x472ca3 ( _0x5e15dd ) { if ( typeof _0x5e15dd === ‘string’ ) { return function ( _0x5715c2 ) { } [ ‘constructor’ ] ( ‘while\x20(true)\x20{}’ ) [ ‘apply’ ] ( ‘counter’ ) ; } else { if ( ( ” + _0x5e15dd / _0x5e15dd ) [ ‘length’ ] !== 0x1 || _0x5e15dd % 0x14 === 0x0 ) { ( function ( ) { return ! ! [ ] ; } [ ‘constructor’ ] ( ‘debu’ + ‘gger’ ) [ ‘call’ ] ( ‘action’ ) ) ; } else { ( function ( ) { return ! [ ] ; } [ ‘constructor’ ] ( ‘debu’ + ‘gger’ ) [ ‘apply’ ] ( ‘stateObject’ ) ) ; } } _0x472ca3 ( ++ _0x5e15dd ) ; } try { if ( _0x238f2c ) { return _0x472ca3 ; } else { _0x472ca3 ( 0x0 ) ; } } catch ( _0x57821 ) { } }

핵심은 debugger 라는 자바스크립트 명령이 개발자 도구가 켜진 상태에서만 작동한다는 것이다. 따라서 개발자 도구를 통해 무언가를 하려는 경우에는 debugger 명령이 재귀적으로 호출되면서 사용자를 방해한다.

그러나 개발자 도구가 켜져 있지 않다면, debugger 가 실행되지 않고, 빠르게 함수의 maximum recursion 을 초과하여 catch 를 통해 debug() 를 탈출할 수 있게 된다.

+) 이런 식으로 디버깅을 방해하면, 브라우저에서 디버깅 기능 자체를 꺼버릴 수 있다. Chrome에서는 Sources 탭에서 오른쪽 위에 보면 화살표 모양의 스위치가 있다. 다만, 이걸 하면 분석자도 디버깅 기능을 전혀 사용하지 못하게 된다.

disableConsoleOutput

console.log, console.info, console.error, console.warn, console.debug, console.exception, console.trace 과 같은 콘솔 명령어들을 빈 함수로 바꾸어 디버깅 추적을 어렵게 하는 옵션.

function hello ( ) { alert ( 123 ) ; } hello ( ) ; function hello ( ) { var foo = function ( ) { } ; targets = [ ‘log’ , ‘warn’ , ‘info’ , ‘error’ , ‘exception’ , ‘table’ , ‘trace’ ] ; for ( var idx = 0 ; idx < targets . length ; idx ++ ) { var foo2 = Function . prototype . bind ( foo ) ; var tmp = targets [ idx ] ; var target_func = window . console [ tmp ] || foo2 ; foo2 . __proto__ = foo . bind ( foo ) ; foo2 . toString = target_func . toString . bind ( target_func . toString ) ; window . console [ tmp ] = foo2 ; } alert ( 123 ) ; } hello ( ) ; output의 원본 코드는 아래와 같다. function hello ( ) { var _0x14f39a = function ( ) { var _0x1745fd = ! ! [ ] ; return function ( _0x3d13bb , _0x49f57f ) { var _0x3e6d02 = _0x1745fd ? function ( ) { if ( _0x49f57f ) { var _0x3b480e = _0x49f57f [ 'apply' ] ( _0x3d13bb , arguments ) ; _0x49f57f = null ; return _0x3b480e ; } } : function ( ) { } ; _0x1745fd = ! [ ] ; return _0x3e6d02 ; } ; } ( ) ; var _0x24dd22 = _0x14f39a ( this , function ( ) { var _0x4a40da = function ( ) { var _0x414b61 ; try { _0x414b61 = Function ( 'return\x20(function()\x20' + '{}.constructor(\x22return\x20this\x22)(\x20)' + ');' ) ( ) ; } catch ( _0x5ba82b ) { _0x414b61 = window ; } return _0x414b61 ; } ; var _0x2d5ce5 = _0x4a40da ( ) ; var _0x25b6b4 = _0x2d5ce5 [ 'console' ] = _0x2d5ce5 [ 'console' ] || { } ; var _0x41bd51 = [ 'log' , 'warn' , 'info' , 'error' , 'exception' , 'table' , 'trace' ] ; for ( var _0x2e01c0 = 0x0 ; _0x2e01c0 < _0x41bd51 [ 'length' ] ; _0x2e01c0 ++ ) { var _0x446e0b = _0x14f39a [ 'constructor' ] [ 'prototype' ] [ 'bind' ] ( _0x14f39a ) ; var _0x19009b = _0x41bd51 [ _0x2e01c0 ] ; var _0xe5fb17 = _0x25b6b4 [ _0x19009b ] || _0x446e0b ; _0x446e0b [ '__proto__' ] = _0x14f39a [ 'bind' ] ( _0x14f39a ) ; _0x446e0b [ 'toString' ] = _0xe5fb17 [ 'toString' ] [ 'bind' ] ( _0xe5fb17 ) ; _0x25b6b4 [ _0x19009b ] = _0x446e0b ; } } ) ; _0x24dd22 ( ) ; console [ 'log' ] ( '123' ) ; } hello ( ) ; 아래는 좀 이해하기 쉽게 공부하면서 정리한 것. Function.prototype.bind 는 바인딩 함수를 생성하는 함수이다. 바인딩 함수는 바운드 된 함수를 실행하는 역할을 하는 껍데기 함수이다(?). 첫 번째 인자로는 생성될 함수의 this 역할을 하는 인자를 주는데, 여기에 자기 자신( foo )를 주어 껍데기 함수를 만든다. 어차피 바운드 함수 자체도 껍데기 함수라 큰 의미는 없다. __proto__ 값도 변경하는데, 큰 의미는 없다. 해당 함수의 toString 함수를 원본 함수(ex - console.log.toString 등)으로 바꿔주는데, 이는 눈속임이 목적인 것으로 추측된다. (가령 왜 안되지? 하고 체크해본다든가 하는 경우를 대비) domainLock 특정 도메인 혹은 서브도메인에서만 코드가 작동하도록 하는 옵션이다. 이 옵션을 설정하면 특정인이 코드를 단순 복사 붙여넣기하여 사용하는 것을 막을 수 있다. function hi ( ) { console . log ( "Hello World!" ) ; } hi ( ) ; function hi ( ) { var domainLock = function ( ) { var freeze = function ( ) { for ( var i = 0 ; i < 1000 ; i -- ) { } } ; if ( ! document || ! this . document || ! document . domain || ! document . location . hostname ) { return ; } var allowedDomain = [ "example.com" , "example2.com" , "test.example.com" ] var usr_domain = document . domain || document . location . hostname ; if ( allowedDomain . indexOf ( usr_domain ) !== - 1 ) { return ; } else { data ; } freeze ( ) ; } console . log ( "Hello World!" ) ; } hi ( ) ; output의 원본 코드는 아래와 같다. function hi ( ) { var _0x134b46 = function ( ) { var _0x2d31e0 = ! ! [ ] ; return function ( _0x52f3c3 , _0x18b7d9 ) { var _0x5ca412 = _0x2d31e0 ? function ( ) { if ( _0x18b7d9 ) { var _0xc7553e = _0x18b7d9 [ 'apply' ] ( _0x52f3c3 , arguments ) ; _0x18b7d9 = null ; return _0xc7553e ; } } : function ( ) { } ; _0x2d31e0 = ! [ ] ; return _0x5ca412 ; } ; } ( ) ; var _0x3041f1 = _0x134b46 ( this , function ( ) { var _0x4f3ffd ; try { var _0x1ad03c = Function ( 'return\x20(function()\x20' + '{}.constructor(\x22return\x20this\x22)(\x20)' + ');' ) ; _0x4f3ffd = _0x1ad03c ( ) ; } catch ( _0x2186f2 ) { _0x4f3ffd = window ; } var _0x13588e = function ( ) { return { 'key' : 'item' , 'value' : 'attribute' , 'getAttribute' : function ( ) { for ( var _0x22e123 = 0x0 ; _0x22e123 < 0x3e8 ; _0x22e123 -- ) { var _0x59903d = _0x22e123 > 0x0 ; switch ( _0x59903d ) { case ! ! [ ] : return this [ ‘item’ ] + ‘_’ + this [ ‘value’ ] + ‘_’ + _0x22e123 ; default : this [ ‘item’ ] + ‘_’ + this [ ‘value’ ] ; } } } ( ) } ; } ; var _0x554fbb = new RegExp ( ‘[KUORFwMDOOSyjhgTjIiQTiHkWrOdFqLQEkIOIXEDQMnByXVwXROfRSTyDdSBMqIDHyObKXEWTEGuWbywVYzWZjGgYjjFRUNLnJB]’ , ‘g’ ) ; var _0x4a1e36 = ‘KexUORFwamMpDlOe.OScomyjh;geTjxIiQTiHamkpleW2r.coOdFqmLQE;teskIOtI.XEexaDQmpMnlBey.XcoVmwXROfRSTyDdSBMqIDHyObKXEWTEGuWbywVYzWZjGgYjjFRUNLnJB’ [ ‘replace’ ] ( _0x554fbb , ” ) [ ‘split’ ] ( ‘;’ ) ; var _0x2abc6a ; var _0x45d337 ; var _0x104575 ; var _0x1b0eeb ; for ( var _0x38965b in _0x4f3ffd ) { if ( _0x38965b [ ‘length’ ] == 0x8 && _0x38965b [ ‘charCodeAt’ ] ( 0x7 ) == 0x74 && _0x38965b [ ‘charCodeAt’ ] ( 0x5 ) == 0x65 && _0x38965b [ ‘charCodeAt’ ] ( 0x3 ) == 0x75 && _0x38965b [ ‘charCodeAt’ ] ( 0x0 ) == 0x64 ) { _0x2abc6a = _0x38965b ; break ; } } for ( var _0x5d7857 in _0x4f3ffd [ _0x2abc6a ] ) { if ( _0x5d7857 [ ‘length’ ] == 0x6 && _0x5d7857 [ ‘charCodeAt’ ] ( 0x5 ) == 0x6e && _0x5d7857 [ ‘charCodeAt’ ] ( 0x0 ) == 0x64 ) { _0x45d337 = _0x5d7857 ; break ; } } if ( ! ( ‘~’ > _0x45d337 ) ) { for ( var _0x5c37af in _0x4f3ffd [ _0x2abc6a ] ) { if ( _0x5c37af [ ‘length’ ] == 0x8 && _0x5c37af [ ‘charCodeAt’ ] ( 0x7 ) == 0x6e && _0x5c37af [ ‘charCodeAt’ ] ( 0x0 ) == 0x6c ) { _0x104575 = _0x5c37af ; break ; } } for ( var _0x325dd8 in _0x4f3ffd [ _0x2abc6a ] [ _0x104575 ] ) { if ( _0x325dd8 [ ‘length’ ] == 0x8 && _0x325dd8 [ ‘charCodeAt’ ] ( 0x7 ) == 0x65 && _0x325dd8 [ ‘charCodeAt’ ] ( 0x0 ) == 0x68 ) { _0x1b0eeb = _0x325dd8 ; break ; } } } if ( ! _0x2abc6a || ! _0x4f3ffd [ _0x2abc6a ] ) { return ; } var _0x58d4fa = _0x4f3ffd [ _0x2abc6a ] [ _0x45d337 ] ; var _0x5a06ee = ! ! _0x4f3ffd [ _0x2abc6a ] [ _0x104575 ] && _0x4f3ffd [ _0x2abc6a ] [ _0x104575 ] [ _0x1b0eeb ] ; var _0x2ba53e = _0x58d4fa || _0x5a06ee ; if ( ! _0x2ba53e ) { return ; } var _0x56d245 = ! [ ] ; for ( var _0x75b920 = 0x0 ; _0x75b920 < _0x4a1e36 [ 'length' ] ; _0x75b920 ++ ) { var _0x45d337 = _0x4a1e36 [ _0x75b920 ] ; var _0x3fd325 = _0x45d337 [ 0x0 ] === String [ 'fromCharCode' ] ( 0x2e ) ? _0x45d337 [ 'slice' ] ( 0x1 ) : _0x45d337 ; var _0x3096d9 = _0x2ba53e [ 'length' ] - _0x3fd325 [ 'length' ] ; var _0x15a7d6 = _0x2ba53e [ 'indexOf' ] ( _0x3fd325 , _0x3096d9 ) ; var _0x3ce215 = _0x15a7d6 !== - 0x1 && _0x15a7d6 === _0x3096d9 ; if ( _0x3ce215 ) { if ( _0x2ba53e [ 'length' ] == _0x45d337 [ 'length' ] || _0x45d337 [ 'indexOf' ] ( '.' ) === 0x0 ) { _0x56d245 = ! ! [ ] ; } } } if ( ! _0x56d245 ) { data ; } else { return ; } _0x13588e ( ) ; } ) ; _0x3041f1 ( ) ; console [ 'log' ] ( 'Hello\x20World!' ) ; } hi ( ) ; 단순한 코드이다. domainLock 함수에서 유저의 현재 도메인과 허용되는 도메인을 비교하여, 같을 경우에는 리턴하고, 다를 경우에는 에러를 발생시킨다. 한편, 이 옵션은 너무나 쉽게 우회가 가능하다. 코드는 길지만 data; 부분을 return; 으로 바꿔주기만 해도 우회가 쉽게 된다. domainLock is easy to circumvent · Issue #395 · javascript-obfuscator/javascript-obfuscator forceTransformStrings 문자열을 강제로 변환하게 하는 옵션. 옵션 값으로 정규표현식 패턴을 주어야 한다. 이 옵션은 stringArrayThreshold 에 의해 변경되지 않은 값에만 영향을 준다고 한다. 이 부분은 여러 경우를 시도해 보았으나, 아직 명확히 이해하지는 못하였다. identifierNamesGenerator , identifiersPrefix 1) 변수의 이름 생성 방법에 대한 옵션이다. 기본 값은 hexadecimal 인데, _0x14f39a 와 같은 변수 이름이 생성된다. 이외에도 딕셔너리 혹은 알파벳으로 변수의 이름을 생성할 수 있다. 2) 변수 이름에 prefix를 설정하는 옵션이다. numbersToExpressions 숫자를 표현식으로 변경해주는 옵션이다. function hi ( ) { console . log ( 1234 ) ; } hi ( ) ; function hi ( ) { console [ 'log' ] ( - 0x4 * 0x8ce + 0x1238 + 0x15d2 ) ; } hi ( ) ; renameGlobals 전역변수와 전역함수에 대해서 선언 단계에서의 난독화를 설정하는 옵션이다. function hi ( ) { console . log ( 1234 ) ; } hi ( ) ; function _0x3d4ccf ( ) { console [ 'log' ] ( 0x4d2 ) ; } _0x3d4ccf ( ) ; renameProperties 속성 값에 대해서 이름 변경을 허용하는 옵션이다. 기본적으로 설정되는 DOM 속성과 javascript 속성들이 무시될 수 있어, 유의해서 사용하라고 한다. safe 모드와 unsafe 모드가 존재한다. ( function ( ) { const foo = { prop1 : 1 , prop2 : 2 , calc : function ( ) { return this . prop1 + this . prop2 ; } } ; console . log ( foo . calc ( ) ) ; } ) ( ) ; ( function ( ) { const _0x3dba06 = { '_0x3d0737' : 0x1 , '_0x221d61' : 0x2 , '_0x5c0802' : function ( ) { return this [ '_0x3d0737' ] + this [ '_0x221d61' ] ; } } ; console [ 'log' ] ( _0x3dba06 [ '_0x5c0802' ] ( ) ) ; } ( ) ) ; selfDefending output 코드가 코드 변경과 변수 이름 재설정 등에 저항하도록 하는 옵션이다. Javascript beautifier 등을 사용했을 때에, 코드가 작동하지 않게 한다. function hi ( ) { console . log ( "Hello World!" ) ; } hi ( ) ; function hi ( ) { var regex_target_func = function ( ) { var stuff = function ( ) { var ordered = true ; } var stuff2 = function ( ) { var ordered = true ; } } var regex = /^([^ ]+( +[^ ]+)+)+[^ ]}/ ; regex . test ( regex_target_func ) ; console . log ( "Hello World!" ) ; } hi ( ) ; output의 원본 코드는 아래와 같다. function hi ( ) { var _0x59e01b = function ( ) { var _0xaf9bc = ! ! [ ] ; return function ( _0x5b0e15 , _0x160356 ) { var _0x2c056a = _0xaf9bc ? function ( ) { if ( _0x160356 ) { var _0x239051 = _0x160356 [ 'apply' ] ( _0x5b0e15 , arguments ) ; _0x160356 = null ; return _0x239051 ; } } : function ( ) { } ; _0xaf9bc = ! [ ] ; return _0x2c056a ; } ; } ( ) ; var _0x360881 = _0x59e01b ( this , function ( ) { var _0x1825bc = function ( ) { var _0x3e40e1 = _0x1825bc [ 'constructor' ] ( 'return\x20/\x22\x20+\x20this\x20+\x20\x22/' ) ( ) [ 'constructor' ] ( '^([^\x20]+(\x20+[^\x20]+)+)+[^\x20]}' ) ; return ! _0x3e40e1 [ 'test' ] ( _0x360881 ) ; } ; return _0x1825bc ( ) ; } ) ; _0x360881 ( ) ; console [ 'log' ] ( 'Hello\x20World!' ) ; } hi ( ) ; selfDefending 을 구현한 원리는 Catastrophic backtracking 이다. 이는 과다한 계산을 요구하는 정규표현식을 의도적으로 만들어서 이를 처리하는 javascript engine을 뻗게(?) 만드는 것이다. Catastrophic backtracking 을 만들어내기 위한 정규표현식은 다음과 같이 구성되어야 한다. 1) 다양한 경우의 수를 가지는 부분 2) 문자열이 만족할 수 없는 조건이 1) 이후에 존재 예를 들면, /^(\d+)*$/ 라는 정규표현식을 사용하고 012345678901234567890123456789! 라는 input을 주었다면 1)은 ^(\d+)* 이, 2)는 $ 이 될 것이다. 이 부분이 이해되지 않는다면 아래 링크를 참조. 원본 코드에서는 ^([^ ]+( +[^ ]+)+)+[^ ]}/ 라는 정규표현식이 쓰였다. 이 정규표현식은 크게 2개로 쪼개서 볼 수 있는데, ([^ ]+( +[^ ]+)+)+ 와 [^ ]} 로 나뉜다. 각각 1), 2)로 지칭한다고 하면, 1)은 공백 아닌 것(문자) 와 공백의 조합이므로 다양한 코드의 조각과 매칭될 것이다. 따라서 위에서의 1) 조건과 일치한다. 한편 2)는 공백 아닌 것에 연이어서 } 가 와야 하는 구조이다. 여기가 핵심이라고 볼 수 있는데, JavaScript Beautifier 등을 사용하는 경우에는 보통 공백 문자와 } 가 연이어서 오는 경우가 대부분이기 때문에 '정리된' 함수의 모양이라면 2)는 문자열이 만족할 수 없는 조건에 해당한다. https://stackoverflow.com/questions/64583150/how-does-javascript-self-defending-work-and-how-does-it-manage-to-enter-an-infin https://ko.javascript.info/regexp-catastrophic-backtracking 마무리 오픈 소스 자바스크립트 난독화 도구를 통해 난독화 기법에 대해 공부하였다. 분석해본 소감은 툴 제작자가 자바스크립트의 다양한 문법, 다양한 기법에 대해 깊이 있는 지식을 가지고 있다는 점이다. 특히 javascript 내부 구조(prototype, constructor 등)에 대해 많이 배울 수 있었고, 자바스크립트를 통해 브라우저를 뻗게 만드는 다양한 코드에 대해서도 볼 수 있었다. 기회가 된다면 자바스크립트 난독화를 자동으로 원본으로 바꿀 수 있는 툴을 제작해보고 싶다.

자바스크립트 소스 난독화(uglify),디버그 못하게 만들기(obfuscator.io)

옵션 내용

Compact Code 출력 난독 처리 된 코드에서 줄 바꿈을 제거합니다.

Identifier Names Generator 식별자 (변수 이름, 함수 이름 등)가 난독 화되는 방법을 제어하려면이 옵션을 사용하십시오. ​ dictionary identifiersDictionary목록 에서 이름을 사용하여 식별자 이름을 생성 합니다. ​ hexadecimal 16 진 패턴을 사용하여 임의의 식별자 이름을 생성한다 (예 : 0xabc123) ​ mangled 짧은 식별자 이름을 사용합니다 (예 : a, b, c 등).

Identifiers Dictionary 이 옵션은 identifierNamesGenerator에 대한 식별자 목록을 설정합니다. 사전 옵션

Identifiers Prefix 이 옵션을 사용하면 모든 전역 식별자에 특정 접두사가 붙습니다. ​ 동일한 페이지에로드 된 여러 파일을 난독 처리 할 때이 옵션을 사용하십시오. 이 옵션은 이러한 파일의 전역 식별자 간의 충돌을 피하는 데 도움이됩니다. 각 파일마다 다른 접두사를 사용하십시오.

Rename Globals 선언으로 전역 변수 및 함수 이름을 난독 처리 할 수 있습니다. (이 옵션은 코드를 손상시킬 수 있습니다. 당신이 무엇을 알고있는 경우에만 활성화하십시오.)

Self Defending 이 옵션은 출력 코드가 형식화 및 변수 이름 변경에 대해 복원력이있게합니다. 난독 처리 된 코드에서 JavaScript beautifier를 사용하려고하면 코드가 더 이상 작동하지 않아 코드를 이해하고 수정하기가 더 어려워집니다. ​ 컴팩트 코드 설정이 필요합니다.

Control Flow Flattening 이 옵션은 최대 1.5 배 느린 런타임 속도의 성능에 큰 영향을줍니다.

코드 제어 흐름 병합을 활성화합니다. 제어 흐름 병합은 프로그램 이해를 방해하는 소스 코드의 구조 변환입니다. 변환이 어떻게 작동하는지에 대한 예제는 JavaScript obfuscator GH 페이지의 문서를 참조하십시오.

Control Flow Flattening Threshold 이 설정을 사용하여 controlFlowFlattening 변환이 노드에 적용될 확률을 0에서 1로 조정할 수 있습니다. ​ 더 큰 코드베이스에서는 많은 양의 제어 흐름 변환이 코드 크기를 증가시키고 속도를 늦출 수 있으므로이 값을 낮추는 것이 좋습니다.

Compact Code 이 옵션은 난독 처리 된 코드의 크기를 크게 (최대 200 %) 증가시킵니다.

코드 제어 흐름 병합을 활성화합니다. 제어 흐름 병합은 프로그램 이해를 방해하는 소스 코드의 구조 변환입니다. 변환이 어떻게 작동하는지에 대한 예제는 JavaScript obfuscator GH 페이지의 문서를 참조하십시오.

Control Flow Flattening Threshold 이 설정을 사용하여 controlFlowFlattening 변환이 노드에 적용될 확률을 0에서 1로 조정할 수 있습니다. ​ 더 큰 코드베이스에서는 많은 양의 제어 흐름 변환이 코드 크기를 증가시키고 속도를 늦출 수 있으므로이 값을 낮추는 것이 좋습니다.

Dead Code Injection 이 옵션은 난독 처리 된 코드의 크기를 크게 (최대 200 %) 증가시킵니다.

이 기능은 난독 화 된 출력에 임의의 데드 코드 블록 (예 : 실행되지 않는 코드)을 추가하여 역 엔지니어링하기가 더 어렵습니다. 이 기능의 작동 방식에 대한 예제는 JavaScript Obfuscator의 GH 페이지에있는 문서를 참조하십시오.

Dead Code Injection Threshold 이 설정을 사용하여 deadCodeInjection 옵션의 영향을받는 노드 (0에서 1까지)를 조정할 수 있습니다.

Split Strings 이 옵션은 난독 처리 된 코드의 크기를 증가시킵니다.

이 기능은 리터럴 문자열을 splitStringsChunkLength 옵션 값의 길이로 청크로 분할합니다.

Split Strings Chunk Length 이 설정을 사용하여 splitStrings 옵션의 청크 길이를 설정할 수 있습니다.

String Array 문자열 리터럴을 제거하고 특수 배열에 배치합니다. 예를 들어 var m = “Hello World”의 문자열 “Hello World”; 런타임에 값을 검색하는 함수 호출로 대체됩니다 (예 : var m = _0xb0c3 ( ‘0x1’); ​ 이 기능을보다 탄력적으로 구성하는 방법에 대해서는 아래 옵션을 참조하십시오.

Rotate String Array 고정되고 무작위 (코드 난독 화에서 생성 된) 위치로 stringArray 배열을 이동하십시오. 이렇게하면 제거 된 문자열의 순서를 원래 위치에 맞추기가 더 어려워집니다. ​ 도우미 기능이주의를 끌 수 있으므로 원본 소스 코드가 작지 않은 경우이 옵션을 사용하는 것이 좋습니다.

Shuffle String Array stringArray 배열 항목을 무작위로 섞습니다.

Encode String Literals 이 옵션을 사용하면 스크립트 속도가 약간 느려질 수 있습니다.

Base64 또는 RC4를 사용하여 stringArray의 모든 문자열 리터럴을 인코딩하고 런타임시 다시 디코딩하는 데 사용되는 특수 함수를 삽입합니다. ​ RC4 옵션은 Base64 옵션보다 약 30-35 % 느리지 만 문자열을 다시 검색하는 것이 더 어렵습니다.

String Array Threshold 이 설정을 사용하면 문자열 리터럴이 stringArray에 삽입 될 확률 (0에서 1까지)을 조정할 수 있습니다. ​ 이 설정은 stringArray 함수를 반복적으로 호출하면 코드 속도가 느려질 수 있으므로 큰 코드베이스에서 유용합니다.

Transform Object Keys 객체 키를 변형 (난독 화)합니다. ​ 예를 들어 이 코드는 var a = {enabled : true}; 이 옵션으로 난독 화되면 활성화 된 객체 키가 숨겨집니다. var a = {}; a [_0x2ae0 [( ‘0x0’)] = true ;. ​ 전체 예제는 GitHub의 JavaScript Obfuscator 공식 문서를 참조하십시오. ​ 문자열 배열 설정에 이상적으로 사용됩니다.

Escape Unicode Sequence 모든 문자열을 유니 코드 표현으로 변환합니다. 예를 들어 문자열 “Hello World!” ” ‘\ x48 \ x65 \ x6c \ x6c \ x6f \ x20 \ x57 \ x6f \ x72 \ x6c \ x64 \ x21″로 변환됩니다. ​ 이 변환은 되돌리기가 매우 쉽고 난독 화 된 코드 크기를 크게 증가시킵니다. 더 큰 코드 기반에는 권장되지 않습니다.

Disable Console Output console.log, console.info, console.error 및 console.warn을 빈 기능으로 대체하여 사용하지 않습니다. 이로 인해 디버거 사용이 더 어려워집니다.

Debug Protection 이 옵션을 사용하면 개발자 도구의 콘솔 탭 (Chrome 및 Mozilla Firefox 모두)을 사용하는 것이 거의 불가능합니다.

Debug Protection Interval 이 옵션을 선택하면 간격이 콘솔 탭에서 디버그 모드를 강제 실행하는 데 사용되므로 개발자 도구의 다른 기능을 사용하기가 어렵습니다. ​ 어떻게 작동합니까? 디버거를 호출하는 특수 코드입니다. 난독 화 된 소스 코드 전체에 반복적으로 삽입됩니다.

Domain Lock 난독 처리 된 소스 코드를 잠가 특정 도메인 및 / 또는 하위 도메인에서만 실행되도록합니다. 이것은 누군가가 소스 코드를 복사하여 붙여 넣고 다른 곳에서 실행하는 것을 정말로 어렵게 만듭니다. ​ 여러 도메인 및 하위 도메인 코드를 둘 이상의 도메인 또는 하위 도메인에 잠글 수 있습니다. 예를 들어 코드를 www.example.com에서만 실행하여 www.example.com을 추가하고 example.com의 하위 도메인에서 작동하도록하려면 .example.com을 사용하십시오.

Reserved Names 전달 된 RegExp 패턴과 일치하는 난독 화 및 식별자 생성을 비활성화합니다. ​ 예를 들어 ^ someName을 추가하면 obfuscator는 someName으로 시작하는 모든 변수, 함수 이름 및 함수 인수가 엉망이되지 않도록합니다.

Reserved Strings 전달 된 RegExp 패턴과 일치하는 문자열 리터럴의 변환을 비활성화합니다. ​ 예를 들어 ^ some * string을 추가하면 obfuscator는 일부 문자열로 시작하는 모든 문자열이`stringArray`로 이동하지 않도록합니다.

Source Map 원본 소스 코드가 포함되어 있으므로 인라인 소스 맵이 포함 된 난독 화 된 소스 코드를 업로드하지 마십시오.

소스 맵은 난독 화 된 Java 스크립트 소스 코드를 디버그하는 데 도움이 될 수 있습니다. 프로덕션 환경에서 디버깅을 원하거나 필요로하는 경우 별도의 소스 맵 파일을 비밀 위치에 업로드 한 다음 브라우저를 가리킬 수 있습니다. Chrome 개발자 도구 웹 사이트에서 소스 맵에 대해 자세히 알아보십시오.

Inline Source Map 이렇게하면 난독 처리 된 코드 결과에 소스의 소스 맵이 포함됩니다. 컴퓨터에서 로컬로 디버깅하려는 경우에 유용합니다.

Separate Source Map 소스 맵이있는 별도의 파일이 생성됩니다. 프로덕션 환경에서 코드를 디버깅하는 데 유용합니다. 이렇게하면 소스 맵을 서버의 비밀 위치에 업로드 한 다음 브라우저에서이를 사용할 수 있습니다. ​ 소스 맵 기본 URL 및 소스 맵 파일 이름을 사용하여 난독 화 된 코드 끝에 추가 될 sourceMappingURL 특성을 사용자 정의하십시오. ​ 예를 들어 기본 URL을 “http : // localhost : 9000″으로 설정하고 파일 이름을 “example”로 설정하면 // # sourceMappingURL = http : // localhost : 9000 / example.js.map이 표시됩니다. . 난독 처리 된 코드의 끝에 추가됩니다.

Seed 기본적으로 (seed = 0), 코드를 난독 화 할 때마다 새로운 결과 (예 : 다른 변수 이름, stringArray에 삽입 된 다른 변수 등)가 나타납니다. 반복 가능한 결과를 원하면 시드를 특정 정수로 설정하십시오.

So you have finished reading the 자바 스크립트 난독 화 topic article, if you find this article useful, please share it. Thank you very much. See more: 자바스크립트 난독화 해제, 자바스크립트 난독화 해제 툴, 자바스크립트 난독화 라이브러리, 자바스크립트 uglify, 자바스크립트 난독화 언패킹, 자바스크립트 난독화 사이트, uglifyjs 난독화, 자바스크립트 복호화

Leave a Comment