Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
jd — javascript-obfuscator(obfuscator.io) 출력을 디오브푸스케이트하고, AST 변환, 정적 디코딩, goja 샌드박스 폴백을 사용해 JavaScript를 언미니파이하는 Go CLI. | Kitploit
도구/GitHubGitHub/ejfkdev/jd
Static AnalysisDynamic Analysis (Sandboxing)Code AnalysisReverse EngineeringMalware AnalysisUtilities & Frameworks
GitHubejfkdev/jd

jd

javascript-obfuscator(obfuscator.io) 출력을 디오브푸스케이트하고, AST 변환, 정적 디코딩, goja 샌드박스 폴백을 사용해 JavaScript를 언미니파이하는 Go CLI.

저장소 보기
2201개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

jd

CI Release License Go Version Release zread

中文

jd는 javascript-obfuscator(obfuscator.io)의 출력을 난독화 해제하고 JavaScript를 압축 해제하는 Go 도구입니다. webcrack과 synchrony의 Go 포팅 버전입니다.

기능

Obfuscator.io 난독화 해제

javascript-obfuscator 출력을 감지하고 복원합니다:

  • 문자열 배열 감지 (함수로 감싼 형태와 단순 배열 형태, var/const/let)
  • 배열 로테이터 감지 (break 조건이 있는 push/shift IIFE)
  • 디코더 감지 (인덱스 시프트, Base64/RC4/사용자 정의 인코딩, 2개 매개변수 디코더)
  • 래퍼 별칭 해석 (디코더에 대한 var/function 별칭)
  • 하이브리드 디코딩 — 정적 시뮬레이션(SIMPLE/Base64/RC4)과 사용자 정의 인코더를 위한 goja 샌드박스 폴백
  • 헬퍼 제거 — 디코딩 후 문자열 배열, 로테이터, 디코더 선언 제거

압축 해제

20개 이상의 가독성 변환:

변환예시
computed-propertiesconsole["log"] → console.log
merge-strings"a" + "b" → "ab"
unminify-booleans!0 → true, !1 → false
number-expressions1 + 2 → 3
void-to-undefinedvoid 0 → undefined
raw-literals0x1 → 1
sequencea(), b(), c() → 개별 문장
split-variable-declarationsvar a=1, b=2 → var a=1; var b=2
block-statements단일 문장 본문을 { }로 감싸기
logical-to-ifa && b() → if (a) b()
ternary-to-ifa ? b() : c() → if (a) b() else c()
merge-else-ifelse { if (...) } → else if (...)
for-to-whilefor(;;) → while(true)
yoda5 === x → x === 5
infinity1/0 → Infinity
invert-boolean-logic!(a == b) → a != b
unary-expressions문장 수준에서 무의미한 void/!/typeof 제거
remove-double-not!!true → true

ES 모듈 지원

goja의 파서는 ES 모듈 구문(import/export)을 지원하지 않습니다. jd는 import/export 문을 미리 추출하고, 나머지 스크립트를 파싱한 뒤 변환을 실행하고, 출력 앞에 해당 문을 추가합니다. 동적 import() 표현식은 import 선언과 올바르게 구분됩니다.

정규식 안전 포매팅

goja가 완전히 파싱할 수 없는 파일(예: 정규식을 많이 사용하는 Monaco 에디터 언어 정의)의 경우, jd는 소스 수준 포매팅으로 폴백합니다: 토크나이저가 정규식 리터럴, 문자열, 주석을 그대로 보존하면서 세미콜론을 기준으로 분할합니다.

설치

macOS (Homebrew)

brew install ejfkdev/tap/jd

사전 빌드된 바이너리

GitHub Releases에서 다운로드하세요 (Linux/macOS/Windows, x86_64/ARM64).

소스에서 빌드

go build -o jd .

사용법

# 파일 난독화 해제 (stdout으로 출력)
jd obfuscated.js

# 파일로 쓰기
jd obfuscated.js -o cleaned.js

# stdin에서 읽기
cat obfuscated.js | jd -

# 디렉터리 처리 — 모든 .js/.mjs/.cjs 파일을 재귀적으로 처리하고,
# 디렉터리 트리를 출력 디렉터리에 미러링합니다.
jd src/ -o dist/

# 기본 출력을 사용하는 디렉터리 모드: <input>-deobfuscated 생성
jd src/

# 파일 확장자 지정
jd src/ -o dist/ --ext .js,.mjs

# 병렬 처리 (N 워커, 기본값: CPU 수)
jd src/ -o dist/ -j 8

# 비코드 파일 건너뛰기 (처리된 JS만 출력)
jd src/ -o dist/ --copy-noncode=false

# 난독화 해제만 하고 압축 해제는 건너뛰기
jd --unminify=false obfuscated.js

# 경고와 함께 JSON 출력
jd --json obfuscated.js

플래그

플래그기본값설명
-o, --outputstdout출력 파일 또는 디렉터리 (디렉터리 기본값: <input>-deobfuscated)
--deobfuscatetrueobfuscator.io 난독화 해제 실행
--unminifytrue가독성 변환 실행
--sandboxauto디코더 실행: auto (정적 후 샌드박스), only (항상 샌드박스), off (정적만)
--timeout10s파일당 샌드박스 타임아웃
--ext.js,.mjs,.cjs디렉터리 모드에서 처리할 파일 확장자
-j, --workers0 (=CPU)디렉터리 모드의 병렬 워커 수
--copy-noncodetrue비코드 파일을 출력 디렉터리에 복사
-v, --verbosefalsestderr에 진단 정보 출력
--jsonfalse{code, warnings} JSON 출력

아키텍처

jd/
├── main.go                     # CLI 진입점
├── internal/
│   ├── cli/                    # cobra CLI (i18n: 영어/중국어)
│   ├── deobfuscator/           # 최상위 파이프라인 + ES 모듈 전처리
│   ├── jsast/                  # AST 워커 (Cursor, Replace, Remove, Clone)
│   ├── codegen/                # AST → JavaScript 프린터 (pretty/compact)
│   ├── scope/                  # 렉시컬 스코프 및 바인딩 분석
│   ├── sandbox/                # 디코더 실행을 위한 goja VM 래퍼
│   ├── decoder/                # 정적 디코딩: Base64/RC4/로테이션
│   ├── deobfuscate/            # 문자열 배열/로테이터/디코더 감지 + 변환
│   ├── unminify/               # 20개 가독성 변환 + 고정점 실행기
│   └── transform/              # Transform 추상화 + ApplyFixpoint
└── testdata/samples/           # 테스트 픽스처

파이프라인

parse → splitModuleStatements → deobfuscate → unminify → generate
  1. Parse — IgnoreRegExpErrors를 사용하는 goja 파서; 파싱할 수 없는 파일은 소스 수준 포매팅으로 폴백
  2. Deobfuscate — obfuscator.io 문자열 배열/로테이터/디코더 감지, 모든 호출 지점 디코딩 (정적 우선, 샌드박스 폴백), 헬퍼 제거
  3. Unminify — 병합된 가독성 변환의 고정점 루프 (최대 20회)
  4. Generate — 연산자 우선순위와 올바른 괄호 처리를 갖춘 pretty 모드 코드젠

하이브리드 디코딩

디코더는 2단계 접근 방식을 사용합니다:

  1. 정적 경로 (synchrony 스타일): push/shift를 통한 배열 로테이션 시뮬레이션, 순수 Go로 SIMPLE/Base64/RC4 디코딩 — 빠르고 결정적.
  2. 샌드박스 폴백 (webcrack 스타일): 문자열 배열, 로테이터, 디코더 코드를 추출하여 Interrupt 타임아웃, SetMaxCallStackSize, 결정적 rand/time, setInterval/setTimeout 없이 goja VM에서 실행 — 정적 경로가 디코딩할 수 없는 사용자 정의 인코더를 처리.

의존성

  • goja — 순수 Go JavaScript 파서 및 런타임 (CGO 없음)
  • cobra — CLI 프레임워크

라이선스

MIT

도구 다운로드