피드로 돌아가기
AI Agents defeat obfuscated JavaScript in 10 minutes
Dev.toDev.to
Security

LLM Agent를 통한 JavaScript 난독화 해제 및 소스 복구 (최대 20분 소요)

AI Agents defeat obfuscated JavaScript in 10 minutes

Nikita Savchenko2026년 5월 20일10advanced

Context

전통적인 JavaScript 난독화 기술은 코드 실행을 위해 복호화 로직을 번들에 포함하는 구조적 한계를 가짐. 기존 Chatbot 방식과 달리 스크립트 실행 권한을 가진 LLM Agent의 등장으로 정적 분석의 한계를 극복한 자동화된 복구가 가능해진 상황.

Technical Solution

  • 정적 분석 실패 시 Runtime Instrumentation으로 전환하여 난독화 도구가 스스로 Bytecode를 디코딩하도록 유도하는 설계 채택
  • VM 내부에 Logging Hook을 삽입하여 함수명, 파라미터, 상수 등 런타임 데이터를 직접 캡처하는 동적 분석 전략 수행
  • 캡처된 Bytecode 스트림을 기반으로 Opcode를 매핑하고 논리적 구조를 재구성하는 Disassemble 프로세스 구축
  • 계층적 변환(Sequential Transforms)의 역순 구성을 통해 다중 방어 레이어를 순차적으로 제거하는 역조립 아키텍처 적용
  • 정적 분석만으로 Namespace Registry 및 XOR-keyed Blob을 처리하여 복잡한 상태 머신 구조를 단순화함

Impact

  • 9개 방어 레이어 및 1,500라인 규모의 Custom VM 기반 코드 10분 만에 복구
  • 상용 엔터프라이즈 난독화 결과물(24KB)을 20분 만에 5라인의 단순 소스로 복원
  • 1,587라인의 난독화 코드를 13라인의 원본 로직으로 정밀하게 재구성

Key Takeaway

복호화 로직이 클라이언트 사이드에 존재하는 모든 선형적 난독화는 LLM Agent의 반복적 실행 및 도구 사용 능력으로 인해 더 이상 보안책이 될 수 없음. 이를 해결하기 위해 역함수가 번들 전체에 분산 및 얽혀 있어 복구 복잡도를 지수적으로 증가시키는 Combinatorial Transform 설계가 필수적임.


- 클라이언트 사이드 코드에 중요한 비즈니스 로직이 포함되어 있는지 점검 - 단순 난독화 도구 의존도를 낮추고 서버 사이드 검증 로직으로 전환 검토 - LLM Agent가 코드를 실행하고 분석할 수 있는 환경을 가정하여 보안 취약점 테스트 수행 - 보안 요구사항이 높을 경우 Rust 기반의 복잡한 변환 엔진 도입 고려

원문 읽기