JS 난독화
JavaScript 코드를 읽기 어렵게 간단히 난독화합니다.
사람이 한눈에 읽기 어렵게 만드는 간단 난독화입니다. 되돌리기가 가능하므로 보안·라이선스 보호용으로는 충분하지 않습니다. eval을 사용하므로 CSP가 엄격한 환경에서는 실행되지 않을 수 있습니다.
공개된 페이지에 올라간 스크립트를 누군가 그대로 복사해 가는 게 신경 쓰일 때가 있습니다. 이 도구는 붙여넣은 JavaScript를 Base64나 16진 이스케이프로 감싸 사람 눈에 바로 읽히지 않는 형태로 바꿔 줍니다.
다만 난독화는 암호화가 아닙니다. 실행 가능한 코드인 이상 되돌릴 수 있고, 실제로 아래 방식들은 몇 줄이면 원문이 복원됩니다. "우연히 눈에 띄는 것"을 막는 수준으로 생각하는 편이 정확합니다.
어떻게 계산되나요
방식 선택 — Base64와 16진 이스케이프
화면의 방식 항목에서 두 가지 중 하나를 고릅니다. 원본 코드가 어떤 껍데기에 담기는지가 다릅니다.
| 방식 | 결과 형태 | 특징 |
|---|---|---|
| Base64 + eval | eval(decodeURIComponent(escape(atob('...')))); | 원문이 A~Z·a~z·0~9 문자열로 바뀌어 형체가 사라짐 |
| 16진 이스케이프 + eval | eval("\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) 도구를 쓰는 것이 맞습니다.
어떤 문제가 있었는지 알려주시면 빠르게 고치겠습니다. (회신이 필요하면 이메일을 남겨주세요)