2026년 6월 20일 토요일

[기술조사] JavaScript(JS)에서 소스코드 비공개 방법

JavaScript(JS)에서 소스코드 비공개 방법 


1. 코드 난독화 (Obfuscation)

자바스크립트는 브라우저가 소스코드를 그대로 읽어서 실행해야 하므로 파일 형식을 바꿀 수는 없습니다. 대신, 코드의 논리적 구조와 실행 결과는 완전히 똑같이 유지하면서 사람이 읽고 분석(리버스 엔지니어링)하는 것을 극도로 어렵게 만드는 방식입니다.

작동 방식
 * 식별자 변경 :  function login(userId, password) 같은 의미 있는 이름을 function _0x4a2b(_0x1b2c, _0x3e4f)처럼 무작위 문자로 바꿉니다.
 * 문자열 암호화 : 코드에 포함된 주소나 텍스트를 \x61\x64\x6d\x69\x6e 같은 16진수나 진수 변환 코드로 숨겨 가독성을 제거합니다.
 * 제어 흐름 평탄화 : 코드가 위에서 아래로 순차적으로 실행되지 않고, 무의미한 switch문이나 if문을 복잡하게 꼬아놓아 로직의 흐름을 파악하지 못하게 만듭니다.

특징
   * 일반적인 자바스크립트 파일(.js)이므로 브라우저에서 별도의 추가 설정 없이 아주 빠르게 실행됩니다.
   * 완벽한 '비공개'는 아닙니다. F12를 누르면 코드가 노출되며, 엄청난 시간과 노력을 들이면 이론적으로 해독(복호화)이 가능합니다.

사용법
  * 자바스크립트 난독화 사이트 https://obfuscator.io/
  * 난독화 도구 설치/이용 npm install -g javascript-obfuscator
 


2. 웹어셈블리 (WebAssembly, Wasm)

브라우저가 실행할 수 있는 또 하나의 웹 표준 규격으로, 사람이 읽을 수 있는 텍스트 형태가 아니라 완전한 이진수 데이터(.wasm 파일)로 코드를 제공합니다.

작동 방식
 * 개발자는 C, C++, Rust, Go 또는 AssemblyScript(자바스크립트 문법과 유사한 언어)로 핵심 로직을 작성합니다.
 * 이를 컴파일러(빌드 도구)를 통해 사람이 읽을 수 없는 기계어 상태의 바이너리 파일(.wasm)로 변환합니다.
 * 자바스크립트는 이 바이너리 파일을 웹브라우저 메모리로 불러와 실행시키는 역할(껍데기)만 담당합니다.

특징
 * 사용자가 F12 개발자 도구로 파일을 열어봐도 알아볼 수 없는 외계어(바이너리)만 보이기 때문에 핵심 로직을 완벽하게 은닉(비공개)할 수 있습니다.
 * 기계어 레벨에서 연산이 이루어지므로 자바스크립트보다 실행 속도가 압도적으로 빠릅니다.

사용법 
 * AssemblyScript 설치 assemblyscript
 * 핵심로직 작성 및 바이너리 컴파일 (코드 작성 후 컴파일, wasm파일 생성)
 * 자바스크립트에서 바이너리 로드

assemblyscript가 아닌 Rust, C/C++ 사용가능하다. C/C++경우 Emscripten 컴파일 도구를 사용한다. 


댓글 없음:

댓글 쓰기