난독화 해제는 마법처럼 원본 프로젝트를 되살리는 작업이 아닙니다. 빌드와 난독화 과정에서 사라진 변수명, 주석, 파일 구조는 대부분 복원할 수 없습니다. 실무에서 중요한 것은 100% 원본 복구가 아니라 문자열, API 요청, 저장소 키, 실행 흐름을 사람이 판단할 수 있을 만큼 드러내는 것입니다.
복원 가능한 것과 불가능한 것을 먼저 나눕니다
난독화 코드에는 여전히 브라우저가 실행해야 하는 정보가 남아 있습니다. 예를 들어 문자열 배열 안의 API 주소, localStorage 키, fetch 옵션, 조건문과 함수 호출 순서는 실행에 필요하므로 일정 부분 추적할 수 있습니다. 반대로 개발자가 붙였던 의미 있는 변수명, 설명 주석, 원래 파일명과 폴더 구조는 배포 과정에서 제거되면 자동으로 알 수 없습니다.
따라서 좋은 난독화 해제 도구는 ‘원본으로 복구’라는 표현보다 ‘읽을 수 있게 정리’하는 데 집중해야 합니다. 코드의 의미를 완전히 맞히지 못하더라도 request, response, token, data처럼 추적에 도움이 되는 이름과 단계로 정리하면 분석 속도가 크게 달라집니다.
- 복원 가능성이 높은 것: 문자열, 숫자 표현, API 주소, 저장소 키, 호출 순서
- 부분적으로 가능한 것: 단순 별칭, 문자열 배열 참조, Base64·eval 래퍼
- 복원하기 어려운 것: 원래 변수명, 주석, 빌드 전 파일 구조, 의도적인 가상 머신형 로직
난독화 해제의 첫 단계는 실행보다 정적 분석입니다
난독화된 코드를 무작정 실행하면 의도하지 않은 네트워크 요청이나 저장소 변경이 발생할 수 있습니다. 그래서 먼저 텍스트 상태에서 문자열, URL, eval·Function 같은 동적 실행 함수, document.cookie와 storage 접근을 확인하는 편이 안전합니다.
YAL은 붙여넣은 코드에서 URL·API 후보, localStorage·sessionStorage·cookie 키, 위험 함수 후보를 별도 리포트로 분리합니다. 이 정보만으로도 코드가 어떤 서버와 통신하는지, 어떤 인증 값을 참조하는지, 동적으로 새 코드를 만들어 실행하는지 대략적인 방향을 잡을 수 있습니다.
가독성 정리는 단순 들여쓰기보다 한 단계 더 필요합니다
일반 JavaScript beautifier는 줄바꿈과 들여쓰기를 정리합니다. 하지만 난독화 코드에서는 이것만으로 부족합니다. `_0x1234` 같은 임시 변수와 문자열 배열 접근이 그대로 남아 있으면 줄은 예뻐도 여전히 읽기 어렵습니다.
실제로 도움이 되는 결과는 반복되는 별칭을 줄이고, `fetch` 응답을 response와 data 단계로 나누고, `localStorage.getItem("token")`처럼 의미가 분명한 표현을 직접 드러내는 형태입니다. 원본 이름을 알 수 없더라도 읽는 사람이 흐름을 따라갈 수 있어야 합니다.
결과는 항상 후보로 보고 직접 검증합니다
난독화 해제 결과는 분석 후보입니다. 특히 자체 수정형 코드, 런타임 환경에 따라 문자열을 바꾸는 코드, 서버 응답을 받아 다음 로직을 만드는 코드는 정적 해제만으로 완전한 결론을 내리기 어렵습니다. 결과 코드가 보기 좋아졌더라도 실제 브라우저 개발자 도구, 네트워크 탭, 소스맵 존재 여부와 함께 검증해야 합니다.
YAL은 권한 있는 코드 검토, 배포 파일 점검, 외주 산출물 확인, 장애 분석처럼 합법적인 범위의 JavaScript 독해를 돕기 위한 도구입니다. 타인의 서비스 우회나 권한 없는 코드 분석 목적으로 사용해서는 안 됩니다.