DevToolPal
한국어

JavaScript 난독화 도구

변수 이름 변경, 문자열 숨기기, 로직 평탄화로 JavaScript를 읽기 어렵게 만들면서도 동작은 그대로 유지합니다.

로컬에서 실행, 업로드 없음

옵션

강도

강도가 높을수록 더 많이 숨기지만 코드가 커지고 느려집니다.

입력

0자 · 0 B

출력

0자 · 0 B

기능 소개

JavaScript 난독화 도구는 스크립트를 동작은 완전히 그대로 유지하면서 사람이 읽고 복사하기 훨씬 어렵게 다시 작성합니다. 변수와 함수 이름은 _0x3f2a 같은 의미 없는 식별자가 되고, 문자열 리터럴은 인코딩된 조회 테이블로 옮겨지며, 높은 단계에서는 제어 흐름이 뒤섞이고 죽은 코드가 섞여 들어갑니다.

일반 JavaScript로 배포하면서 그대로 복사되는 것은 원치 않는 브라우저 게임, 데모, 위젯, 라이선스 검사 코드에 유용합니다.

사용 방법

  1. JavaScript를 붙여넣거나 .js 파일을 엽니다.
  2. 강도를 고릅니다.
    • 낮음은 지역 이름을 바꾸고 문자열을 조회 배열로 옮깁니다. 출력은 빠르고 비교적 작게 유지됩니다.
    • 중간은 문자열 인코딩, 제어 흐름 평탄화, 약간의 죽은 코드를 추가합니다.
    • 높음은 모든 기법을 최대 강도로 적용합니다. 결과가 몇 배나 커지고 눈에 띄게 느려질 수 있습니다.
  3. 스크립트 밖에서 최상위 함수나 변수를 참조하는 곳이 없을 때만 전역 이름 변경을 켭니다.
  4. 결과를 여러 줄로 나누고 싶다면 한 줄로 출력을 끕니다.
  5. 난독화된 코드를 복사하거나 다운로드하고, 배포하기 전에 테스트합니다.

예시

예시는 greet 함수와 방문 횟수 카운터를 정의합니다. 낮은 강도로 난독화하면 코드는 16진수 이름으로 된 한 줄이 되지만, 실행하면 여전히 Hello, Ada! You have visited 1 time(s).를 출력합니다.

난독화와 압축의 차이

JavaScript·CSS 압축 도구가 하는 압축은 공백을 지우고 이름을 줄여 파일을 작고 빠르게 다운로드되도록 만듭니다. 난독화는 크기 면에서 정반대입니다. 코드를 이해하기 어렵게 만들기 위해 일부러 간접 단계를 추가합니다. 많은 프로젝트가 모든 파일을 압축하고, 보호할 가치가 있는 로직이 담긴 소수의 파일만 난독화합니다.

제한 사항

난독화로는 비밀을 지킬 수 없습니다. 브라우저가 실행할 수 있는 것은 결국 사용자도 들여다볼 수 있으므로, API 키와 비공개로 유지해야 하는 비즈니스 규칙은 서버에 두세요. 강한 설정은 코드를 느리게 만들기도 하므로 자주 반복되는 루프나 성능이 중요한 페이지에서는 피하세요.

자주 묻는 질문

› 난독화하면 코드의 동작이 바뀌나요?

아니요. 난독화된 스크립트는 원본과 똑같이 동작하며 형태만 바뀝니다. 자신의 소스나 함수 이름을 검사하는 코드는 다르게 동작할 수 있으므로 항상 난독화된 빌드로 테스트를 실행하세요.

› 난독화된 코드를 되돌릴 수 있나요?

완전히는 아니지만, 시간을 들이는 사람이라면 무엇을 하는 코드인지 알아낼 수 있습니다. 난독화는 가벼운 복사를 막는 과속 방지턱 정도로 여기고, API 키 같은 비밀을 숨기는 데는 절대 쓰지 마세요.

› 전역 이름 변경은 언제 켜야 하나요?

스크립트가 독립적으로 완결된 경우에만 켜세요. 전역 이름을 바꾸면 최상위 함수를 이름으로 호출하는 HTML 속성, 다른 스크립트, 테스트가 동작하지 않게 됩니다.

› 코드가 업로드되나요?

아니요. 난독화는 오픈소스 javascript-obfuscator 라이브러리로 브라우저에서 실행됩니다.