JS 난독화

JavaScript 코드를 읽기 어렵게 간단히 난독화합니다.

사람이 한눈에 읽기 어렵게 만드는 간단 난독화입니다. 되돌리기가 가능하므로 보안·라이선스 보호용으로는 충분하지 않습니다. eval을 사용하므로 CSP가 엄격한 환경에서는 실행되지 않을 수 있습니다.

공개된 페이지에 올라간 스크립트를 누군가 그대로 복사해 가는 게 신경 쓰일 때가 있습니다. 이 도구는 붙여넣은 JavaScript를 Base64나 16진 이스케이프로 감싸 사람 눈에 바로 읽히지 않는 형태로 바꿔 줍니다.

다만 난독화는 암호화가 아닙니다. 실행 가능한 코드인 이상 되돌릴 수 있고, 실제로 아래 방식들은 몇 줄이면 원문이 복원됩니다. "우연히 눈에 띄는 것"을 막는 수준으로 생각하는 편이 정확합니다.

어떻게 계산되나요

방식 선택 — Base64와 16진 이스케이프

화면의 방식 항목에서 두 가지 중 하나를 고릅니다. 원본 코드가 어떤 껍데기에 담기는지가 다릅니다.

방식결과 형태특징
Base64 + evaleval(decodeURIComponent(escape(atob('...'))));원문이 A~Z·a~z·0~9 문자열로 바뀌어 형체가 사라짐
16진 이스케이프 + evaleval("\x76\x61\x72...");글자 하나하나를 \xNN 코드로 치환

처리 과정

Base64 모드는 코드를 UTF-8 바이트로 인코딩한 뒤 Base64 문자열로 만들고, 실행 시점에 atob로 되돌려 eval에 넘깁니다. decodeURIComponent(escape(...))가 함께 들어가는 이유는 한글이 섞여도 원래 문자로 정확히 복원하기 위해서입니다.

16진 모드는 각 문자의 코드값을 16진수 두 자리로 바꿔 \xNN 형태로 나열합니다. 문자 수만큼 길이가 4배 가까이 늘어나지만, 구조가 단순해 결과가 눈에 잘 들어옵니다.

알아 둘 점

  • 16진 모드는 ASCII 전용에 가깝습니다. 한글 주석이나 한글 문자열이 들어 있으면 코드값이 두 자리를 넘어가 결과가 깨질 수 있으니, 이런 코드는 Base64 모드를 쓰세요.
  • eval로 감싸므로 Content Security Policy(CSP)에서 unsafe-eval을 막아 둔 사이트에서는 실행되지 않습니다.
  • 변환 후에는 반드시 브라우저에서 한 번 실행해 정상 동작을 확인하세요. 원본은 따로 보관해 두는 편이 안전합니다.
  • 입력한 코드는 브라우저 안에서만 처리되며 서버로 전송되지 않습니다.

용어 정리

난독화
코드의 동작은 그대로 두고 사람이 읽기 어려운 형태로 바꾸는 작업. 복호화 키가 필요한 암호화와는 다릅니다.
Base64
임의의 데이터를 64가지 문자로만 표현하는 인코딩 방식. 누구나 되돌릴 수 있어 보안 수단이 아닙니다.
16진 이스케이프
문자열 안에서 글자를 `\x41`처럼 16진수 코드로 적는 자바스크립트 표기법.
eval
문자열을 자바스크립트 코드로 실행하는 함수. 편리하지만 보안상 사용을 피하도록 권고됩니다.
atob
Base64 문자열을 원래 데이터로 되돌리는 브라우저 내장 함수.

자주 묻는 질문

난독화하면 코드를 못 훔쳐 가나요?

아닙니다. 브라우저가 실행할 수 있는 코드는 사람도 되돌릴 수 있습니다. 특히 여기서 쓰는 Base64·16진 방식은 개발자 도구 콘솔에서 몇 초면 원문이 나옵니다. 정말 감춰야 하는 로직은 클라이언트가 아니라 서버에 두는 것이 유일한 해법입니다.

난독화한 코드가 실행되지 않아요.

두 가지를 확인해 보세요. 첫째, 원본 코드 자체에 문법 오류가 있으면 감싼 뒤에도 그대로 오류가 납니다. 둘째, 사이트에 CSP가 적용돼 `unsafe-eval`이 차단돼 있으면 eval 기반 코드는 실행되지 않습니다.

한글 주석이 있는 코드가 깨집니다.

16진 이스케이프 모드는 문자 코드를 두 자리로 표기하기 때문에 한글처럼 코드값이 큰 문자에서 결과가 어긋납니다. 한글이 포함된 코드는 UTF-8을 정확히 복원하는 Base64 모드를 사용하세요.

난독화한 코드를 다시 원래대로 되돌릴 수 있나요?

이 도구에는 복원 기능이 없지만, Base64 결과는 Base64 디코더에 넣으면 바로 원문이 나옵니다. 되돌릴 수 있는 구조이므로 원본 파일은 항상 따로 보관하세요.

파일 크기가 커지는데 괜찮나요?

Base64는 약 1.33배, 16진 이스케이프는 약 4배로 늘어납니다. 용량을 줄이는 것이 목적이라면 난독화가 아니라 별도의 압축(minify) 도구를 쓰는 것이 맞습니다.