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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
disrobe — Rust CLI 제품군으로, 하나의 자동 파이프라인을 통해 15개 이상의 생태계에 걸쳐 네이티브 코드, 바이트코드, 스크립트, 펌웨어 및 앱 패키지를 정적으로 디컴파일, 난독화 해제 및 언팩합니다. | Kitploit
도구/GitHubGitHub/1-3-7/disrobe
Android SecurityStatic AnalysisReverse EngineeringMalware AnalysisMobile SecurityBinary AnalysisFirmware Analysis
GitHub1-3-7/disrobe

disrobe

Rust CLI 제품군으로, 하나의 자동 파이프라인을 통해 15개 이상의 생태계에 걸쳐 네이티브 코드, 바이트코드, 스크립트, 펌웨어 및 앱 패키지를 정적으로 디컴파일, 난독화 해제 및 언팩합니다.

저장소 보기
1136125일 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트
disrobe: 컴파일된 소프트웨어에서 소스, 구조, 바이트 복구

시작하기 · 지원 입력 · 자동 복구 · 도구 비교 · 증거 · 문서

소프트웨어 이면을 들여다보기

Disrobe는 소프트웨어를 디컴파일, 디오브푸스케이트, 언패킹하기 위한 Rust 명령줄 도구 모음입니다. 알 수 없는 파일을 분류하거나, 리버스 엔지니어링을 위한 코드를 복구하거나, 조사를 위한 지표를 추출하거나, 디스어셈블러용 아티팩트를 준비하는 데 사용할 수 있습니다.

바이트코드와 동결된 애플리케이션에서 Python을, 클래스 파일과 DEX에서 Java를, CIL에서 C#을, 번들에서 JavaScript를, 커스텀 가상 머신에서 Lua를, 네이티브 코드에서 C 또는 Rust를 복구합니다. 설치 프로그램, 펌웨어, 모바일 패키지, Electron, Tauri, Wails 애플리케이션에서 파일을 추출합니다. 복구된 소스, 심볼, 문자열, 타입, 출처를 함께 보관하여 추가 분석에 활용할 수 있습니다.

전체 빌드는 170개 패밀리를 15개 생태계에 걸쳐 분류하고 103개 컨테이너 형식을 탐지합니다. disrobe auto는 각 계층을 식별하고, 일치하는 패스를 실행하며, 복구된 자식들을 각자의 복구 경로로 따라갑니다. 전용 명령은 더 세밀한 제어, 분석 보고서, 선택적 백엔드를 제공합니다. 복구는 기본적으로 정적으로 실행되며, 소스, 구조, 부분 출력, 누락된 키 경계는 결과에서 구분 가능한 상태로 유지됩니다.

Disrobe가 유용하다면 저장소에 스타를 눌러주세요.

실제 동작 보기

Disrobe CLI: 소프트웨어 언패킹, 복구, 검사

전체 영상 보기 · 스크립트 읽기

2분 12초 동안 20개의 CLI 명령: 네이티브 실행 파일 언패킹, Python과 Lua 복구, JavaScript 모듈 분할, 소스 맵 복원, WebAssembly와 Android 리소스 검사, 지표 추출, 보고서와 아티팩트 해시 보존. 마지막 장에서는 프로젝트 구성, IDE 설정, 분석가 주석, 셸 완성을 보여줍니다. 스크립트에는 녹화된 빌드의 전체 명령 목록이 포함되어 있으며, 기능 맵에서 지원 한계를 설명합니다.

시작하기

GitHub Releases에서 플랫폼에 맞는 아카이브를 다운로드하고, 릴리스의 SHA256SUMS와 대조한 뒤, disrobe를 PATH에 추가하세요. 릴리스 아카이브에는 서명 번들이 포함되어 있으며, 검증 가이드에서 이를 검사하는 방법을 설명합니다.

플랫폼릴리스 대상
Windowsx86-64, ARM64
macOSx86-64, ARM64
Linuxglibc 기반 x86-64 및 ARM64; musl 기반 x86-64

설치한 바이너리를 확인하세요:```sh disrobe --version disrobe --help

root@kitploit:~
CLI를 클론에서 빌드하려면, 저장소의 Rust 툴체인과 [네이티브 빌드 사전 요구 사항](https://github.com/1-3-7/disrobe/blob/main/docs/src/installation.md)을 설치한 후 다음을 실행하세요:```sh
cargo build --locked --release -p disrobe-cli --bin disrobe

실행 파일은 target/release/disrobe이며, Windows에서는 target/release/disrobe.exe입니다. 기능 플래그와 슬림 빌드에 대해서는 설치 가이드를 참조하세요.

애플리케이션 복구

애플리케이션, 라이브러리 또는 패키지로 시작하세요. 이를 식별하고, 인식된 레이어를 복구한 다음, 복구 요약을 검사합니다:```sh disrobe identify path/to/application disrobe auto path/to/application --out recovered/ --capture-stages disrobe context --out recovered/

root@kitploit:~
`identify`는 형식과 사용 가능한 신호를 보고합니다. `auto`는 인식된 레이어를 추출하고 복구합니다. `context`는 결과 패스, 신뢰도, 출처를 요약합니다. `--capture-stages`를 사용하면 `recovered/01-*/`, `recovered/02-*/`, `recovered/final/` 아래의 각 단계를 검사할 수 있습니다. `chain.json`은 토폴로지와 해시를 기록하고, `recovery.json`은 결과와 타이밍을 기록합니다.

필요한 출력을 알고 있을 때는 전용 명령을 사용하세요:```sh
disrobe py decompile module.pyc --out python-source/
disrobe js deob bundle.js --full --out readable.js
disrobe native decompile application.exe --out native-source/
disrobe native export packed.exe --format ghidra --out ghidra-input/
disrobe webview desktop.exe --out frontend/

네이티브 디컴파일러는 x86-64에서 기본적으로 C를 출력하며, --format rust를 지정하면 Rust를 선택합니다. AArch64, ARM32, MIPS32는 의사 C(pseudo-C)를 출력합니다. native export는 외부 분석 도구를 위해 지원되는 패킹된 PE 이미지를 재구성하며, webview는 애플리케이션을 시작하지 않고 복구된 프런트엔드 자산 트리를 기록합니다.

작고 검사 가능한 아티팩트 사용해 보기

저장소에는 브라우저 플레이그라운드용 아주 작은 WebAssembly 모듈이 포함되어 있습니다. 전체 CLI가 PATH에 있는 상태에서 클론한 디렉터리에서:```sh disrobe wasm decompile playground/public/samples/add.wasm --target json --out add.summary.json disrobe wasm decompile playground/public/samples/add.wasm --target wat --out add.lifted.wat disrobe auto playground/public/samples/add.wasm --out recovered/ --capture-stages

root@kitploit:~
첫 번째 명령은 `add.summary.json`을 작성하고, 두 번째 명령은 WebAssembly 텍스트를 `add.lifted.wat`에 작성합니다. 자동 복구는
사용 가능한 체인을 선택하고 그 아티팩트를 `recovered/` 아래에 작성합니다. `--capture-stages`는
중간 결과를 보존합니다. 이러한 작업은 내보낸 함수를 실행하지 않고 모듈을 검사합니다.

보고서와 함께 복구된 파일을 검사하십시오. 식별만으로는 복구가 성립하지 않습니다. 지원되지 않는 구성, 부재한 키 자료, 사용할 수 없는 체인은 결과에 나타납니다. [결과 가이드](https://github.com/1-3-7/disrobe/blob/main/docs/src/reading-a-result.md)는 아티팩트, 진단, 부분 결과, 출처를 설명합니다.

[브라우저 플레이그라운드 열기](https://1-3-7.github.io/disrobe/playground/) · [퀵스타트 따라하기](https://github.com/1-3-7/disrobe/blob/main/docs/src/quickstart.md)

## 입력 찾기

**복구(Recover)** 는 도달 가능한 경로가 소스, 바이트, 또는 구조를 산출함을 의미합니다. **부분(Partial)** 은 그 정보의 일부만 복구함을 의미합니다. **탐지만(Detect-only)** 은 보호된 본문을 복구하지 않고 패밀리를 식별함을 의미합니다. 이 수준들은 지원되는 입력에 대한 작업을 설명하며, 패밀리 이름만으로 모든 버전이나 구성이 복구된다는 보장은 아닙니다. 아래 목록은 전체 패밀리 카탈로그와 전용 명령 및 추출기가 노출하는 추가 형식을 포함합니다.

| 입력 | 복구 및 출력 | 명령 및 가이드 |
|---|---|---|
| Python | CPython 1.0~3.15 바이트코드 및 marshal을 소스로; PyPy, MicroPython `.mpy` v0~v6, Jython, IronPython, Brython 디스어셈블리; frozen 페이로드 추출; Cython `.pyd`/`.so` 이름, 시그니처, 구조적 폴백 | `py`, `pyinstaller`, `pyarmor`, `pyfreeze`, `nuitka` · [Python](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md) |
| JavaScript / TypeScript | 소스 난독화 해제, 축소화 역전, 모듈 분할, 소스 맵, V8 캐시 데이터 및 패키징된 런타임 검사 | `js` · [JavaScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) |
| WebAssembly | `.wasm`을 WAT, Rust, TypeScript, C 의사 소스, 또는 JSON으로; Component Model 및 GC 타입 그래프 검사; 지원되는 난독화 역전 | `wasm` · [WebAssembly](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) |
| JVM / Android | `.class`, JAR, DEX, APK, AAB; Java 소스, Kotlin/Scala 관용구, 매니페스트 및 서명 정보, 프로텍터 보고서 및 매핑 사이드카 | `jvm`, `apk` · [JVM and Android](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/jvm-android.md) |
| .NET | PE/CLR 메타데이터 및 CIL을 C#, F#, 또는 VB 의사 소스로; ReadyToRun 및 Native AOT 검사; 단일 파일 번들 추출 | `dotnet` · [.NET](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/dotnet.md) |
| Native | PE32/PE64, EFI PE, ELF32/ELF64, 커널 모듈, thin/fat Mach-O, COFF, MZ, NE, LE, LX, 및 원시 코드 식별 또는 분석; 위의 아키텍처별 경로에서 소스 산출 | `native`, `macho`, `semdiff` · [Native](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md), [decompile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-decompile.md) |
| Go | PE/ELF/Mach-O 런타임 메타데이터, 스트립된 함수 및 타입 이름, `embed.FS` 파일, garble 보고서 및 복구 가능한 리터럴 | `go` · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) |
| Swift / Objective-C | Mach-O 클래스, 프로토콜, 필드, 셀렉터, 디맹글된 심볼; 유니버설 슬라이스; dyld 공유 캐시 dylib | `swift`, `macho` · [Swift](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/swift.md) |
| Lua | Lua 5.1~5.4, LuaJIT 2.0/2.1, Luau 바이트코드, Garry's Mod Lua (GLua); 소스 및 입력별 충실도 보고서; 지원되는 VM 및 문자열 복구 | `lua` · [Lua](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/lua.md) |
| PHP | 소스/eval 체인 필링, 리터럴 키 디코드 루프 및 AES 계층, Phar 추출, 직렬화된 `op_array` 복구; 상용 인코더 봉투는 키 제한이 남음 | `php` · [PHP](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/php.md) |
| Ruby | MRI/YARV 2.6~3.4 InstructionSequence 바이너리 및 mruby RITE 바이트코드를 Ruby로; freezer 및 AOT 분류 | `ruby` · [Ruby](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/ruby.md) |
| Erlang / Elixir | BEAM 모듈 및 EZ 아카이브; 살아남은 추상 코드 또는 `Dbgi`를 소스로, Core Erlang 폴백, 명령어 목록 | `beam` · [BEAM](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/beam.md) |
| ActionScript 3 | SWF FWS/CWS/ZWS `DoABC` 블록 및 원시 ABC 바이트코드를 디스어셈블리 및 AS3 의사코드로 | `as3` · [ActionScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md) |
| 모바일 런타임 | Hermes v60~v96 헤더 파싱, v62/v71/v74/v76/v83/v84/v89/v96 의사 JavaScript 리프트; Flutter Dart 커널 소스 본문; ARM64 AOT 선언, 문자열, 및 디스어셈블리 | `hermes`, `flutter`, `mobile` · [Mobile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md) |
| Shell / 문서 | PowerShell, Bash, Batch, VBScript, WSH; VBA3/5/6/7 p-code 및 스톰핑; Office 매크로 소스, BIFF8/BIFF12 XLM 수식, PDF 내장 스크립트/액션 | `shell` · [Shell and documents](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) |
| 기타 언어 아티팩트 | Perl op-tree/바이트코드, R RDS 및 Rcpp 메타데이터, Tcl starkit, Haxe JS/SWF/HashLink/Neko 출력; Nim, Zig, Crystal, 및 D 지문, 심볼, 및 부분 구조 | `auto`, 라이브러리 API · [Script languages](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md), [native](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) |
| Python pickle | pickle 리듀서를 호출하지 않고 프로토콜 디스어셈블리, 기호 추적, 재구성, 및 분류 | `pickle` · [Pickle](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/pickle.md) |
| 아카이브 / 펌웨어 / 프런트엔드 | 아래의 전체 컨테이너 목록; Electron ASAR, Tauri v1/v2 내장 맵, Wails v2 `embed.FS` 트리 | `extract`, `webview`, `auto` · [Containers](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/containers.md), [webview](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/webview.md) |

<details>
<summary><strong>Python: 모든 명명된 freezer, protector, 및 소스 난독화기</strong></summary>

| 패밀리 또는 형식 | 지원 및 전제 조건 |
|---|---|
| PyInstaller 2.x~6.20+ | 지원되는 AES-CTR/CFB 계층을 포함한 내장 아카이브 및 바이트코드 복구 |
| Nuitka onefile, standalone, module, wheel | onefile 페이로드 추출; 컴파일된 형태에서 심볼 및 Python에 보이는 구조 복구 |
| cx_Freeze, py2exe, shiv, pex, Briefcase | `pyfreeze`를 통한 패키저 추출; 명령은 실험적임 |
| PyOxidizer | 실험적, 검증되지 않은 추출 |
| SourceDefender `.pye` | `py sourcedefender` 및 `sourcedefender.decrypt`를 통한 정적 복호화 |
| PyArmor v3 (레거시 DES), PyArmor v4 (레거시 혼합), PyArmor v5 (레거시 AES) | 탐지만: RSA로 감싼 키 경계 |
| PyArmor v6, PyArmor v7 | 부분 정적 복구; super 모드 및 사용할 수 없는 키가 출력을 제한함 |
| PyArmor v8, PyArmor v9 / 9-Pro | 키 자료를 사용할 수 있는 경우 정적 래퍼 복구. 공개된 <!-- m:pyarmor_frac -->72 / 72<!-- /m --> 결과는 명명된 v8/v9 기본 체험판 래퍼에 대해서만 완전한 루트 `CodeObject` 디코딩을 집계하며, 소스 동등성을 확립하거나 등록 라이선스/pro, BCC, 또는 super 모드를 포괄하지 않음 |
| Kramer / Specter, Berserker, BlankOBF, PlusOBF, Wodx, pyobfuscate.com, pyobfuscate.com (2026 XOR/lambda), PyObfuscator (mauricelambert), Manglify, Oxyry, pyminifier, 온라인 난독화기 패밀리, Xindex, Patchwork, pyc-zipper | AST 평가기를 통한 정적 소스/로더 복구; 개별 계층 및 잔여물이 보고됨 |
| Jawbreaker, ObfuXtreme | 아티팩트에 존재하는 본문 복구; 런타임에 가져오는 페이로드는 부재로 남음 |
| python-obfuscator (PyPI), pyobfus, Pypacker | 부분 래퍼 필링 및 분류 |

PyArmor는 래퍼 옆에 일치하는 런타임 파일이 필요할 수 있습니다. 전용 BCC 경로는 `--allow-bcc`를 요구하며 모델링된 본문에 대해 정적 네이티브 리프트와 Python 스켈레톤을 산출합니다. 경로 인식 자동 복구는 동일한 BCC 아티팩트를 게시할 수 있습니다. PyArmor v6/v7 동적 훅만이 샘플 코드를 실행하며, `--allow-dynamic` 뒤에서 워치독과 함께 실행됩니다. `--allow-bcc`는 트리 내 정적 분석만 허용하며 샘플을 실행하거나 외부 도구를 호출하지 않습니다. [버전 및 모드 세부 정보](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md#pyarmor).

</details>

<details>
<summary><strong>JavaScript, WebAssembly, 및 패키징된 웹 애플리케이션</strong></summary>

| 패밀리 또는 형식 | 지원 및 경로 |
|---|---|
| obfuscator.io / javascript-obfuscator, JS-Confuser | 지원되는 문자열 배열, 디스패처/제어 흐름 변환, 불투명 술어, 및 로더 계층 복구; 직접 명령 및 `js.deob` |
| Jscrambler, js-obfuscator (jsobfu) | 부분 템플릿 및 정적 변환 복구 |
| JSFuck, aaencode, jjencode, JSFiretruck, Dean Edwards Packer | 전용 작업 및 인식된 체인 경로를 통한 정적 디코딩 |
| JSDefender, Arxan / Digital.ai | 탐지 및 부분 정적 변환 필링; 보호된 상용 JS 작업은 명령의 권한 부여 옵션이 필요함 |
| PACE | 탐지만 |
| webpack 4, webpack 5, Vite, Rollup, Rolldown, esbuild, Turbopack, Bun, Parcel, Browserify, SystemJS; AMD 모듈 | 직접 언번들링/모듈 복구. 체인은 webpack 및 Vite를 디스패치함; 다른 번들러의 카탈로그 마커만으로는 해당 경로가 자동이 되지 않음 |
| bytenode `.jsc`, Node SEA, nexe, nw.js | 패키징된 V8 데이터 검사/카빙; Node SEA 및 bytenode는 명시적 체인 분기를 가짐 |
| Electron ASAR, Tauri v1/v2, Wails v2 | 내장 프런트엔드 트리 복구; Electron/Tauri는 `webview.carve`를, Wails는 `go.classify`를 사용; 직접 `webview`가 세 가지 모두를 처리 |
| Bun standalone, Deno eszip v2~v2.3 / `deno compile` | 각 컨테이너 리더를 통한 내장 모듈 그래프 복구; eszip은 직접 Rust 리더도 노출 |
| Wobfuscator, Jscrambler WASM, wasm-mixer / Wasmixer | `wasm.deob`를 통한 지원되는 변환의 부분 역전; 도구 형태의 픽스처가 변환을 등급화하며, 해당 난독화기 자체의 커밋된 출력은 없음 |
| Tigress → Emscripten, wasm-name-obfuscator | 탐지 및 분류; Tigress 헬퍼는 `wasm deob` 실행 경로 밖에 있으며, 파괴된 원본 이름은 사용할 수 없는 상태로 남음 |

[JavaScript 경로](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) · [Wasm 한계](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) · [내장 프런트엔드 레이아웃](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/webview.md).

</details>

<details>
<summary><strong>네이티브 패커, 프로텍터, 및 난독화 패밀리</strong></summary>

| 패밀리 | 지원 및 경로 |
|---|---|
| Donut, sRDI | 지원되는 셸코드 로더 레이아웃에서 내장 모듈 복구 |
| UPX, ASPack, Petite, MPRESS, FSG, PECompact, Yoda's Crypter, NSPack, MEW, kkrunchy | 구현된 언팩 루틴, `native unpack` 및 패커 체인을 통해 도달 가능; 충실도는 패밀리 및 표본에 따라 다름 |
| ASProtect, Morphine, nPack, NeoLite, PolyCryptor, Warzone Crypter | `StubEvalPending`: 에뮬레이터 동작에 스펙으로 구축된 스텁 증거가 있음; 실제 벤더 패킹 복구는 검증되지 않았으며 언팩 디스패치가 광고되지 않음 |
| Yoda's Protector, VMProtect, Themida / WinLicense | CLI 및 auto 탐지만. 별도의 Rust 헬퍼가 원본 보조 카빙 또는 보호 섹션 복구를 노출; 전체 프로그램 디버추얼라이제이션을 확립하지는 않음 |
| PE-Protector, PELock, Enigma Protector, Armadillo, Obsidium, WinLicense | 탐지만 |
| DotNetPatcher, NetCryptor | 관리 계층을 .NET 패스로 위임 |
| OLLVM 플래트닝, 가짜 제어 흐름, 명령어 치환; Tigress CFF | 네이티브 Rust API를 통한 지원되는 정적 난독화 해제 변환 및 보고서; 적용 가능한 분석은 네이티브 복구 보고서에 나타남 |
| Alcatraz, Emotet CFF, Mirai, Dridex, Trickbot, obfus.h, Cryptify (rust-obfuscator), guardian-rs, obfusheader.h, obfuscxx, Amice | 명명된 네이티브 난독화 시그니처; 개별 문자열/제어 흐름 헬퍼는 탐지된 전체 패밀리보다 좁은 복구 범위를 가짐 |

네이티브 분석은 또한 Rust/C++ 심볼, C++ RTTI 및 vtable, Delphi/C++Builder 객체 모델 및 DFM 리소스, DWARF/PDB/STABS 정보, 임포트, 호출 그래프, 암호화 시그니처, 및 FLIRT 매치를 복구합니다. 명령어 분석은 x86, ARM, RISC-V, MIPS, PowerPC, SPARC, eBPF, 및 AVR에 걸쳐 있으며, 소스 산출은 위에 나열된 더 작은 아키텍처 집합입니다. [네이티브 분석](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) · [언패킹 및 바이트 복구 증거](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-unpack.md) · [난독화 해제](https://github.com/1-3-7/disrobe/blob/main/docs/src/anti-analysis.md).

</details>

<details>
<summary><strong>JVM, Android, .NET, 및 모바일 패키지 패밀리</strong></summary>

| 패밀리 | 지원 및 전제 조건 |
|---|---|
| Zelix KlassMaster, Allatori, Stringer, DashO | 지원되는 패턴에 대한 문자열 복구, 이어서 클래스파일 디컴파일 |
| DexGuard | 탐지, 구조적 필링, 및 지원되는 키 지정 상수에 대한 클래스 내 문자열 복호화 에뮬레이션 |
| BlackObfuscator | DEX 디스패처 인식 및 블록 순서 주석 |
| ProGuard / R8 | 이름 복원 사이드카로의 매핑 재생; 원본 이름은 `mapping.txt`가 필요함 |
| yGuard, SkidSuite2, JBCO | 탐지만 |
| Promon SHIELD, Guardsquare DexGuard RASP, Guardsquare ThreatCast, Appdome, OneSpan, Arxan / Digital.ai, Zimperium zShield, Licel DexProtector | Android RASP 식별 및 구조적 보고서 |
| ConfuserEx2 | 실제 샘플 상수 복구 및 제어 흐름 평탄화 해제; 암호화된 리소스는 런타임 키 경계를 유지할 수 있음 |
| Eazfuscator.NET | 모델 등급화된 문자열 복호화 및 VM 리프팅; VM 픽스처는 저장소 내 가상화기에서 나온 것이며 출시 제품이 아님 |
| KoiVM (ConfuserEx VM) | 커밋된 실제 도구 출력에서 가상화된 본문을 CIL로 리프트 |
| ConfuserEx, Dotfuscator, Dotfuscator CE, SmartAssembly, Babel, DeepSea, Spices.Net, Goliath, Skater, .NET Reactor, CryptoObfuscator, ArmDot, Agile.NET, Obfuscar, DotNetPatcher, NetCryptor, BitMono | 탐지 및 패밀리별 부분 복구: 이름, 문자열, 리소스, 또는 메서드 구조. BitMono는 22개 항목 .NET 체인 카탈로그를 넘어 프로텍터 탐지기에 있음 |
| Themida (.NET 래퍼), ILProtector, MaxToCode | 네이티브 로더 키 지정 본문에 대한 탐지만 |
| React Native APK, React Native IPA; React Native Hermes 바이트코드 | JS/Hermes 페이로드 추출 및 지원되는 바이트코드를 Hermes 리프트로 라우팅 |
| Flutter Dart 커널; Flutter AOT 스냅샷 (`libapp.so`) | 커널 소스 테이블 복구; AOT 선언, 메타데이터, 및 ARM64 디스어셈블리. 스냅샷 버전 및 사용 가능한 이름이 복구를 제한함 |
| Xamarin / .NET MAUI APK, Apache Cordova APK, Capacitor APK, NativeScript APK | 런타임 식별 및 지원되는 패키지/멤버 추출 |
| Android APK (`classes.dex`), Android 앱 번들 (AAB / APKM / XAPK), IPA | 패키지 검사 및 자식 추출; 하위 복구는 내장 런타임에 따라 다름 |

SmartAssembly, Spices.Net, Skater, .NET Reactor, Eazfuscator.NET, 및 CryptoObfuscator용 .NET 문자열 디코더는 커밋된 벤더 제작 어셈블리가 아닌 모델링된 알고리즘으로 등급화됩니다. ConfuserEx2, Obfuscar, 및 BitMono는 실제 보호된 어셈블리 증거를 가집니다. [JVM/Android](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/jvm-android.md) · [.NET](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/dotnet.md) · [Mobile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md).

</details>

<details>
<summary><strong>Lua, PHP, shell, Ruby, BEAM, Swift, Go, 및 ActionScript 패밀리</strong></summary>

| 패밀리 | 지원 및 전제 조건 |
|---|---|
| IronBrew2 | VM 복구, 실제 2.7.0 standard 및 MAX 출력에서 실행 차분 검사됨 |
| Prometheus | 부분 복구, 지원되는 스택형 `Vmify` 디스패치 트리 포함 |
| MoonSec V1, MoonSec V2, MoonSec V3, AztupBrew, DarkSec, Boronide, PSU, WeAreDevs LuaU, luaobfuscator.com, SLua (Unity Lua 5.3), Hercules | 부분 Lua 복구; MoonSec 형태의 VM 증거는 합성 부트스트랩을 사용함 |
| Luraph | 탐지만 |
| Luau 바이트코드, Garry's Mod Lua (GLua) | 방언 인식; Luau 리프팅 및 부분 GLua 복구 |
| ionCube, SourceGuardian, Zend Guard | 상용 PHP 봉투 탐지; 로더 상주 키는 경계로 남음. 레거시 정적 키 사례는 부분 `op_array` 구조를 산출할 수 있음 |
| FOPO, Better PHP Obfuscator | 정적 PHP eval 체인 필링, 암호화 계층에 대한 리터럴 키 요구 사항 포함 |
| Invoke-Obfuscation (token), Invoke-Obfuscation (AST), Invoke-Obfuscation (string), Invoke-Obfuscation (encoding), Invoke-Obfuscation (compress); Invoke-Stealth, PowerHell, Chameleon, psobf | 정적 PowerShell 복구 |
| Invoke-Obfuscation (launcher), ISESteroids | 부분 PowerShell 복구 |
| Bashfuscator (token), Bashfuscator (string), Bashfuscator (obfuscate), Bashfuscator (compress); Bash 간접 참조 (IFS/eval); node-bash-obfuscate (chunk-table eval) | 정적 Bash 복구 |
| Batch 난독화 (`%random%`), Batch 난독화 (set 간접 참조); VBA 매크로 (p-code 디컴파일 + 스톰핑) | Batch 필링 및 VBA 소스/p-code 복구 |
| YARV InstructionSequence (컴파일된 `.rb`), mruby RITE 바이트코드 | Ruby 소스 복구 |
| OCRA 자체 추출 실행 파일, RubyScript2Exe 패키지 | 부분 freezer 분류/복구 |
| JRuby 컴파일된 클래스, TruffleRuby 네이티브 이미지 | Ruby 카탈로그를 통한 탐지만 |
| BEAM 파일 (Erlang / Elixir 컴파일된 모듈), EZ 아카이브 (ZIP으로 감싼 `.beam` 모듈) | 모듈 추출, 소스/디버그 청크 복구, 또는 Core Erlang 폴백 |
| garble | Go 메타데이터 및 지원되는 리터럴; 원본 이름 해싱은 누락된 시드 없이는 역전될 수 없음 |
| Mach-O Swift / Objective-C 메타데이터, Mach-O fat (유니버설) 바이너리, dyld 공유 캐시 | 런타임 메타데이터, 슬라이스 및 dylib 복구 |
| SwiftShield | 매핑 파서; 원본 이름을 복구하려면 매핑을 제공해야 함 |
| SWF (Flash, FWS/CWS/ZWS) DoABC, 원시 ABC 바이트코드 | 디스어셈블리 및 메서드 본문 의사코드 |
| secureSWF, DoSWF, Kindi, Irrfuscator, swfLock | 탐지만 |

[패밀리 카탈로그](https://github.com/1-3-7/disrobe/blob/main/docs/src/catalog.md) · [Lua](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/lua.md) · [PHP](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/php.md) · [Shell](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) · [Ruby](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/ruby.md) · [BEAM](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/beam.md) · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) · [Swift](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/swift.md) · [AS3](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md).

</details>

<details>
<summary><strong>등록된 103개 컨테이너 형식 전체</strong></summary>

| 범주 | 형식 |
|---|---|
| 일반 아카이브 | ZIP, TAR, tar.gz, tar.bz2, tar.xz, tar.zst, 7z, RAR, CAB, CPIO, ar, ARJ, ARC, LZH, LZO/lzop, uzip, Xamarin xalz, PAR2, StuffIt |
| 애플리케이션 및 언어 아카이브 | JAR, WAR, APK, XPI, WHL, EGG, CRX, NUPKG, VSIX, PYZ, Electron ASAR |
| 설치 프로그램 및 애플리케이션 이미지 | PKG, DMG, DEB, RPM, AppImage, Snap, Flatpak, MSIX/APPX, MSI, NSIS, Squirrel, Inno Setup, InstallShield, Enigma Virtual Box |
| 파일시스템 및 파일시스템 스트림 | SquashFS, cramfs, ext4, romfs, MinixFS, Android sparse, btrfs-send, EROFS, JFFS2, NTFS, UBI/UBIFS, YAFFS2, QNX, partclone |
| 디스크 및 배포 이미지 | ISO, OCI, Docker 이미지, VHD, VHDX, WIM, GPT, MBR, FAT12/16/32 |
| 압축 스트림 | XZ, gzip, bzip2, zstd, LZMA, lzip, LZ4, zlib, Unix compress (`.Z`) |
| 내장 애플리케이션 데이터 | Bun standalone, UnityFS, .NET 단일 파일 번들 |
| 펌웨어 | D-Link SHRS, ENCRPTED_IMG, alpha v1, alpha v2, DEAFBEAD, FPKG; EnGenius; Autel ECC; QNAP; Netgear CHK, TRX v1, TRX v2; Xiaomi HDR1, HDR2; Tesla SBFH; HP BDL, IPKG; Moxa FRM; INSTAR BNEG, HD; Airoha; UEFI 펌웨어 볼륨 |
| 메모리 및 암호화 볼륨 | Windows 미니덤프, LUKS1 |

이 명단은 모든 항목에 대한 탐지를 선언합니다. 이 경로 중 102개는 일반 추출기를 사용하며, <!-- roster-breadth:containers-exercised -->42<!-- /roster-breadth -->개는 멤버 바이트에 도달하는 커밋된 입력을 가지고, DMG는 탐지만의 커밋된 증거를 가지며, 59개는 커밋된 입력이 없습니다. LUKS1은 평문에 대해 별도로 등급화되며 복호화를 위해 `aes-cbc-plain` 원시 볼륨 키가 필요합니다. 키가 없으면 키 경계를 보고합니다. 개별 압축 방법, 암호화된 멤버, 분할 볼륨, 및 파일시스템 기능은 더 좁은 한계를 가집니다. StuffIt 5는 현재 포크 디코더가 존재함에도 불구하고 추출을 통해 아카이브 블롭을 반환합니다. Airoha OTP-AES 콘텐츠는 그대로 카빙됩니다.

추가 Rust 리더는 Deno eszip, Apple APFS/HFS+, ELF 추가 오버레이, 및 Blazor WebCIL 구조를 노출합니다. 이들은 103개 형식 수에 추가 항목이 아닙니다. [추출 경로, 메서드 버전, 및 한계](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/containers.md) · [컨테이너 레지스트리](https://github.com/1-3-7/disrobe/blob/main/crates/disrobe-binfmt/src/container.rs).

</details>

## 자동 복구`auto`는 컴파일된 레지스트리에서 패스를 선택하고, 이를 실행한 뒤 출력과 추출된 자식들을 다시 식별합니다. 신뢰도 임계값, 반복된 콘텐츠 해시, 또는 깊이 제한(기본값 8)에서 중지합니다. 터미널로 태그된 보고서와 소스 파일은 다시 탐지로 피드백되지 않고 출력으로 남습니다. 다음 표는 전체 빌드에 등록된 모든 패스를 설명합니다. 슬림 빌드는 기능 게이트가 적용된 행을 생략할 수 있습니다.

| 입력 계층 | 등록된 패스 ID | 자동 출력 | 전용 제어 또는 전제 조건 |
|---|---|---|---|
| 아카이브, 설치 프로그램, 펌웨어, 볼륨 | `binfmt.container` | 추출된 자식들, 언어/네이티브 패스로 재귀적으로 이어짐 | 멤버 보고서용 `extract` 및 명시적 LUKS1 raw-key 옵션 |
| PyInstaller | `pyinstaller.extract` | 내장 멤버 및 `.pyc` 자식들 | 아카이브별 옵션용 `pyinstaller extract` |
| Python 프리저 | `pyfreeze.extract`, `nuitka.extract` | 추출된 페이로드 또는 지원되는 컴파일된 패키지 구조 | 실험적 `pyfreeze`; Nuitka 플레이버가 무엇이 남는지 결정 |
| 보호된 Python | `pyarmor.unpack`, `sourcedefender.decrypt` | 사용 가능한 평문/바이트코드, 메타데이터 또는 키 경계 보고서 | 일치하는 런타임/키 자료; 전용 PyArmor 모드 및 엄격성 옵션 |
| Python 소스 및 바이트코드 | `py.deob`, `py.decompile`, `py.disasm` | 필링된 소스, 디컴파일된 소스 또는 명령어 트레이스 | `py decompile --emit source,disasm,ast`; 재컴파일 검사에는 일치하는 인터프리터 필요 |
| Pickle | `pickle.classify` | 기호 분석 및 분류 | 개별 검사/재구성 작업용 `pickle` |
| JavaScript | `js.deob` | 지원되는 난독화 해제, webpack/Vite 모듈 복구, Node SEA/bytenode 처리 | `js unbundle`은 더 넓은 번들러 세트를 노출; 소스 맵과 이름 변경 옵션은 직접 제어 |
| WebAssembly | `wasm.deob` | 복구되거나 리프팅된 WAT와 탐지, 요약, 복구 사이드카 | `wasm decompile --target`은 Rust, TypeScript, C, WAT 또는 JSON을 선택 |
| Electron / Tauri | `webview.carve` | 내장 프런트엔드 멤버 | `webview`는 Wails도 지원; 자동 Wails 복구는 `go.classify` 사용 |
| PHP / Phar | `php.peel` | 필링된 소스, `op_array` 출력, 아카이브 자식들, 잔여/키 보고서 | 암호화된 계층의 경우 키와 IV가 정적으로 사용 가능해야 함 |
| JVM / DEX | `jvm.classify` | Java 소스, 프로텍터 및 복구 매니페스트, 클래스/아카이브 자식들 | 매핑, 시그니처 및 선택적 외부 백엔드용 `jvm`/`apk` |
| .NET | `dotnet.classify` | C# 및 분석, 복구된 상수/리소스/CIL 또는 Native AOT 메타데이터 | 다른 소스 형식 및 설치된 렌더링 백엔드용 `dotnet` |
| 모바일 패키지 / 바이트코드 | `mobile.classify` | 런타임/멤버 추출, Hermes 리프트, Dart 커널 소스 또는 AOT 보고서 | 형식별 제어용 `hermes`, `flutter`, `mobile` |
| Lua | `lua.deob` | 복구된 Lua 및 방언/충실도 사이드카 | 명시적 패밀리 및 출력 제어용 `lua` |
| Shell / Office / PDF | `shell.deob` | 필링된 스크립트, 매크로 소스/p-code, XLM 및 문서 보고서 | 문서별 작업용 `shell` |
| Ruby | `ruby.classify` | 분석 및 사용 가능한 경우 복구된 YARV/mruby 소스 | 플레이버별 보고서용 `ruby`; JRuby/TruffleRuby 분류는 Ruby 소스 복구가 아님 |
| BEAM / EZ | `beam.classify` | Erlang/Elixir/Core Erlang, 디스어셈블리, 아카이브 자식들 | 남아 있는 디버그 청크가 소스 충실도를 결정 |
| SWF / ABC | `as3.classify` | ABC 구조, 명령어 목록, AS3 의사코드 | 명명된 상용 난독화기는 탐지만 유지 |
| Go | `go.classify` | 심볼, 타입, garble 분석 및 내장 파일시스템 멤버 | DWARF, BuildInfo 및 기타 전용 보고서용 `go` |
| Swift / Objective-C | `swift-objc.classify` | 메타데이터, 유니버설 슬라이스 및 공유 캐시 dylib | 형제 서브 캐시/심볼 파일이 필요할 수 있음; 직접 `swift`/`macho` 제어 |
| 네이티브 패커 | `native.packer-unpack` | 사용 가능한 언패킹된 이미지 또는 내장 모듈, 심볼, 시그니처, 복구 보고서 | 구현된 패커 디스패치만 언패킹; 상용 VM 계층은 탐지에서 멈출 수 있음 |
| 네이티브 이미지 | `native.image-classify` | 아이덴티티, 심볼, 시그니처, 발견 사항 및 제한된 x86-64/AArch64 의사 소스 보고서 | `native decompile`은 전체 소스 출력 명령을 선택; ARM32/MIPS32 소스 경로는 직접 |
| Windows / OS/2 NE | `native.ne-structure` | 세그먼트, 엔트리, 임포트 및 리소스 | 소스 디컴파일이 아닌 구조적 복구 |
| Perl / R / Tcl / Haxe / WSH | `scriptlang.classify` | 언어 보고서, 복구된 구조 및 지원되는 자식 아티팩트 | 형식별 라이브러리 API가 더 세밀한 작업을 노출 |
| Nim / Zig / Crystal / D | `nativelang.classify` | 언어 지문, 심볼 및 부분적 네이티브 구조 | 분류에는 충분한 잔존 언어 마커가 필요 |

예를 들어, 인식된 PyInstaller 애플리케이션은 `pyinstaller.extract` → `pyarmor.unpack` → `py.decompile`로 진행할 수 있고, APK는 멤버 추출 → DEX → Java로, 패킹된 네이티브 이미지는 언패킹 → 언어 또는 이미지 분석으로 진행할 수 있습니다. 각 화살표는 해당 특정 계층이 실제로 산출하는 것에 따라 달라집니다.```sh
disrobe passes
disrobe catalog python --json
disrobe auto input-directory/ --out recovered/ --batch-max-depth 6 --capture-stages
disrobe chain module.pyc --chain py.decompile --out python-source/

scan, frisk, taint, vulnmatch, 명시적 소스-타깃 선택, 매핑 재생, 선택적 외부 백엔드 호출은 전용 작업으로 남습니다. 패스 레지스트리 · 체인 선택 및 출력 레이아웃.

결과 분석 및 내보내기

기능 맵은 명령 그룹과 통합을 다룹니다. 해당 기계 판독 가능 인벤토리는 소스, 테스트, 문서, 지원 상태 및 데모를 연결합니다. CLI 레퍼런스는 중첩 명령을 다루며, 전역 플래그는 공유 옵션을 다룹니다. 설치된 빌드의 인터페이스는 disrobe <command> --help를 사용하세요.

프로젝트 및 서비스 명령도 여기에 색인되어 있습니다: serve, plugin, init, config, catalog, passes, doctor, install, install-deps, self-update, completions, man, explain, bug-report. doctor를 사용하여 플랫폼에 따라 46~51개의 외부 도구를 탐색하고 누락된 선택적 백엔드를 식별하세요.

워크플로에서 동일한 복구 사용

도구 비교

이 표는 각 복구 작업을 Disrobe의 명령 및 관련 도구에 매핑합니다. 설치된 디컴파일러와 내보낸 아티팩트가 아래에 표시된 통합 지점을 제공합니다.

비교 인벤토리는 미해결 공유 입력 비교를 명시합니다. 백엔드 옵션은 설치 및 위에 링크된 언어 가이드에 문서화되어 있습니다.

측정된 도구 비교

측정은 아래에 링크된 고정된 입력, 도구 버전 및 채점 규칙을 사용합니다. DEX 및 JAR 수는 각 도구가 출력한 영역의 컴파일을 측정합니다. 해당 모집단은 서로 다르므로 그 수치가 복구 품질을 순위화하지 않습니다. APK 시크릿 재현율은 동일한 8토큰 정답을 사용합니다.

입력, 원시 도구 결과 및 재현 명령.

Ghidra에 복구된 실행 파일 제공

동일한 Ghidra 12.1.2 분석은 Disrobe가 패킹된 실행 파일을 재구성된 PE로 내보낸 후 다른 코드를 봅니다. 이 로컬 스냅샷은 실제 무해한 패킹된 픽스처를 사용하며 증가와 감소를 모두 기록합니다. 함수/명령어/문자열 열은 9개 입력 분석 스냅샷에서, 완료된 C 렌더링은 별도의 6개 입력 디컴파일러 스냅샷에서 가져옵니다. 완료된 렌더링은 비어 있지 않은 출력이며 소스 정확성 등급이 아닙니다.

kkrunchy 수치는 감소합니다. 더 많이 발견된 함수가 반드시 더 정확한 함수는 아니며, 이러한 분석 수치는 바이트 비교를 대체하지 않습니다. 분석 스냅샷, 디컴파일러 스냅샷 및 별도의 네이티브 바이트 복구 측정을 읽어보세요.

증거 검사

증거 인덱스는 복구 측정을 해당 픽스처, 비교 방법, 명령 및 결과에 연결합니다.

결과는 바이트 복구, 컴파일러 수용 및 동작 검사를 구분합니다. 컴파일러 수용 및 커버리지 수는 동등성 점수가 아닙니다.

JADX/CFR 채점 세부 정보 및 재현 명령

독립 참조에 대해 확인된 복구

이 검사는 원본 아티팩트, 컴파일러, 인터프리터 또는 레이블이 지정된 코퍼스에 대해 Disrobe를 측정합니다. 두 디컴파일러를 비교하는 것과는 구별됩니다. 각 링크된 결과는 입력 모집단, 전제 조건 및 재현 명령을 기록합니다.

커버리지 수 및 더 작은 정확성 모집단| Surface | Count | What it establishes | |---|---|---| | PyArmor | 72 / 72 named v8/v9 default-trial wrappers | Static decryption and complete root `CodeObject` parsing, without an external correctness comparison | | Android, three real APKs | 83662 / 83943 methods lowered, local | Self-reported body coverage. The separate verifier population is 2988 of 2998 bodies presented in isolated carriers | | Wasm instruction inventory | 1034 of 1034 instructions | External `wasm-tools` denominator and re-assemblable WAT; the lowering numerator is self-counted | | Luau instruction table | 86 of 88 entries lifted | Disrobe's declared table; `BREAK` and `NEWCLASSMEMBER` remain decoded but unresolved | | Swift symbols | Committed symbol population renders to pinned strings | Regression consistency, with no required external demangler comparison | | OLLVM flattening | 9 reached states out of 9 derived states | Dispatcher-state coverage over two committed functions; both counts are derived in-process | | Mixed boolean arithmetic | 316 entries; reference run answered 247 and refused 69; external solver proved 236 answers and refuted none | Budgeted recovery and held-out originals; unanswered or unproven entries do not become solver-proved results | | Containers | 42 generic routes write member bytes | Exercised breadth within the 103 detected formats; LUKS1 has its own plaintext comparison |

Complete evidence records describe each population and grading rule.

차트 레이블은 독립적인 정확성 참조에는 strong을, 컴파일러 수용에는 recompile-only를, Disrobe 자체의 커버리지 카운터에는 coverage-self-reported를 사용합니다. 비교 방법과 모집단이 각 결과의 범위를 정의합니다.

개별 측정값은 결과, 도구 비교, 재현 전제 조건을 참고하세요.

한계를 알아두세요

  • 컴파일된 출력은 정보를 잃습니다. 원본 주석, 서식, 이름, 일부 타입 정보가 없을 수 있습니다.
  • 패밀리 인식은 복구보다 넓습니다. 카탈로그 일치나 성공적인 파서가 부분적인 소스 출력과 공존할 수 있습니다. 패밀리 등급과 실제 결과를 확인하세요.
  • 네이티브 복구는 아키텍처와 출력 언어에 따라 달라집니다. 네이티브 가이드에 지원되는 경로와 해당 테스트가 나열되어 있습니다.
  • 상용 VM 보호기 탐지는 일반적인 소스 복구를 보장하지 않습니다. 내부 헬퍼와 보호 섹션 아티팩트는 완전한 CLI 복구 경로를 확립하지 않습니다. 네이티브 언패킹을 참고하세요.
  • 없는 키는 없는 채로 남습니다. 런타임에서 파생된 키와 부재하는 이름 해싱 시드는 지원되지 않는 아티팩트에서 추론할 수 없습니다. Python, PHP, 컨테이너 가이드에 형식별 경계가 명시되어 있습니다.
  • 외부 백엔드에는 자체 요구 사항이 있습니다. 일부 명령은 --backend auto를 통해 설치된 도구를 선택할 수 있습니다. 백엔드를 선택하기 전에 해당 명령의 도움말과 설치 가이드를 확인하세요.
  • 분석은 기본적으로 정적 복구를 수행합니다. 이것이 신뢰할 수 없는 입력을 무해하게 만들지는 않습니다. 리소스 제한, 명시적으로 선택된 동적 작업, 외부 프로세스 경계는 포렌식 안전성에 설명되어 있습니다.

파이프라인 이해하기

Disrobe의 중간 표현, 바이트에서 프로그램 구조를 거쳐 소스까지

체인 러너는 단일 목적 패스를 공유 아티팩트와 중간 표현을 통해 연결합니다. 각 패스는 정당화할 수 있는 출력을 제공하며, 다운스트림 소비자는 출처를 유지하고 지원되지 않는 경계를 보고합니다. 아키텍처, 패스 모델, IR 래더, 체인 러너를 살펴보세요.

문서 및 기여

문서, 퀵스타트, 결과 가이드부터 시작하세요. 진단을 조회하려면 disrobe explain <code>를 사용하세요. 프로젝트 변경 사항은 기여 가이드와 해당 기능의 테스트 및 증거를 읽어보세요.

위협 모델은 신뢰 경계와 입력 처리를 설명합니다. 보안 문제는 SECURITY.md를 통해 보고하세요. LEGAL.md는 프로젝트의 법적 고려 사항을 설명합니다. 아티팩트 분석 권한은 귀하의 상황에 따라 달라집니다.

라이선스

License: Disrobe Source-Available

Disrobe의 모든 버전은 Disrobe Source-Available License, Version 1.1에 따라 독점적이며 소스 공개 방식으로 제공됩니다. 이 라이선스는 모든 버전에 대해 Elastic License 2.0 및 Version 1.0을 대체하며, 재라이선싱 공지에 명시된 대로 이전의 모든 허여를 철회합니다.

개인의 취미 프로젝트, 개인 학습, 개인이 수행하는 무보수 독립 보안 연구, 비영리 교육 및 연구, 그리고 진정한 저널리즘은 라이선스에 정의된 대로 무료입니다.

회사에 의한 또는 회사를 위한 모든 사용에는 유료 라이선스가 필요합니다. 상업적 라이선싱을 참고하세요.

필수 출처 표기: 이 작업은 1-3-7이 만든 Disrobe를 사용했습니다: https://github.com/1-3-7/disrobe

기여 포크 이외의 포크, 재게시, 리브랜딩, 재판매, 호스팅, 경쟁 개발은 금지됩니다. 소프트웨어는 있는 그대로 제공되며, 사용자의 책임 하에 사용됩니다.

출처 표기, 기여자 약관, 요약, 제3자 고지를 참고하세요.

Copyright (c) 2025-2026 1-3-7. All rights reserved.

이전 개발 커밋은 문서 및 시각적 개편의 일환으로 단일 기준선으로 통합되었습니다.

도구 다운로드
작업명령출력 또는 다음 단계
지표, 시크릿, 정적 발견 사항 찾기scan, frisk, strings, ioc, indicators, behavior발견 사항 및 오프셋
함수, 흐름, 동작 검사query, capabilities, taint, vulnmatch쿼리 가능 IR, ATT&CK/MBC 매핑 및 소스-투-싱크 보고서
주석 및 구조화된 아티팩트 유지annot, rename, envelope, verify, yara아티팩트 엔벨로프 및 분석가 상태
출처 추적 및 실행 비교chain, context, status, report, diff, guard, semdiff보고서, 해시 및 복구 차이점
공용 네트워크 데이터 수집prowl명시적 네트워크 수집, 오프라인 복구와 분리
표면진입점가이드
Rust공유 코어 타입 및 개별 패스 크레이트라이브러리 API
Pythonimport disrobe를 통한 타입 지정 바인딩Python 바인딩
HTTP, gRPC, LSPdisrobe serve서비스
Model Context Protocoldisrobe-mcp 또는 disrobe serve --mcpMCP 통합
에디터 및 분석 도구VS Code, IDA Pro, Ghidra, Binary Ninja에디터 통합
GitHub Actions리포지토리 액션 및 SARIF 출력GitHub Action
로컬 커밋 검사훅 ID disrobepre-commit
브라우저클라이언트 측 Wasm 워커플레이그라운드
코딩 도구용 프로젝트 컨텍스트disrobe init --ide메타데이터 사이드카
복구 작업명명된 도구Disrobe의 경로선택 또는 결합 방법
Python 바이트코드에서 소스로pycdc, PyLingual, uncompyle6, decompyle3인프로세스 CPython 1.0~3.15 디컴파일러, 중첩 코드 객체 복구, 소스/디스어셈블리/AST 출력내장 Python 디컴파일러에서 복구된 소스, 디스어셈블리, AST 검사
동결된 Python 추출pyinstxtractor-ng, pydecipherPyInstaller, Nuitka, 프리저 추출 후 바이트코드 복구auto는 추출된 멤버에서 프로텍터를 거쳐 Python 디컴파일러로 계속 진행 가능
PyArmorPyarmor-Static-Unpack-1shot정적 래퍼/런타임 복구, 모드 보고서, 선택적 정적 BCC 리프팅일치하는 런타임을 제공하여 래퍼 데이터를 복구하고 모드별 결과 검사
Pickle 검사fickling, Python pickletools명령어 추적, 심볼릭 리듀서, 분류, 값 재구성리듀서를 실행하지 않고 검사; pickletools는 검사를 등급화하고, CPython은 470개의 생성된 픽스처에서 재구성을 확인
JavaScript 난독화 해제webcrack, synchrony, REstringerobfuscator.io, JS-Confuser, 지원되는 Jscrambler 패턴, 난해한 디코더, 상수/제어 흐름 복구명시적 옵션에는 js deob을, JS가 패키지 내부에 있을 때는 auto를 사용
JS 언번들링 및 소스 맵wakaru, webcrack, sourcemapper모듈 추출, 소스 맵 처리, 스코프 인식 이름 변경, 패키지된 V8 검사js unbundle은 자동 체인 디스패치보다 더 많은 번들러 경로를 노출
WebAssemblyWABT wasm-decompile, BinaryenWAT 및 C/Rust/TypeScript 의사 소스, JSON 요약, 지원되는 난독화 역변환선택한 소스 타깃 검사; wasmtime 실행은 아래 등급의 복구된 동작을 독립적으로 확인
JVM 소스CFR, Vineflower, Procyon, Fernflower네이티브 클래스파일 복구 및 프로텍터/문자열 처리jvm decompile은 설치된 백엔드의 출력과 함께 Disrobe 아티팩트를 작성; CFR은 아래에 측정된 컴파일 수율 결과가 있음
Android 패키지 및 DEXJADX, apktool, androguard, dex2jar인프로세스 Dalvik 복구, APK 메타데이터/서명, 런타임 추출, Java 출력DEX/APK 디컴파일은 기본적으로 네이티브 경로를 사용; Android 백엔드는 명시적으로 선택. JADX는 아래에 측정된 레그가 있음
.NET 어셈블리ILSpy, dnSpy, dnSpyEx, de4dotCIL 복구 및 프로텍터별 상수, 리소스, VM 본문, Native AOT 메타데이터dotnet decompile은 설치된 렌더러와 함께 Disrobe CIL 출력을 작성; --backend auto는 ILSpy, dnSpyEx, dnSpy 또는 de4dot을 선택
네이티브 디컴파일Ghidra, IDA, Binary Ninja인프로세스 x86-64 C/Rust 및 AArch64/ARM32/MIPS32 의사 C; 복구된 심볼/타입 보고서--backend ghidra로 Ghidra를 헤드리스로 선택하거나, 대화형 분석 세션에서 에디터 통합 및 내보낸 심볼 사용
패킹된 네이티브 실행 파일upx -d, unipacker, Detect It Easy구현된 언패커 및 제한된 스텁 에뮬레이션, 재구성된 PE 이미지, 내장 로더 모듈복구된 PE 이미지를 Ghidra/IDA로 내보내기. 아래 Ghidra 측정은 패킹된 입력과 재구성된 입력을 비교
네이티브 난독화Ghidra, IDA, Binary Ninja 및 디오브푸스케이션 스크립트OLLVM/Tigress 변환, MBA 단순화, 스택 문자열, 네이티브 메타데이터 및 복구 보고서관련 네이티브 작업/API 선택; VM 프로텍터 지문만으로는 본문 복구를 의미하지 않음
Go 메타데이터 및 garbleGoReSym, redress, gorepclntab, 모듈/타입 메타데이터, 내장 파일, 복구 가능한 garble 리터럴go는 이름/타입을 보고; native decompile은 머신 코드 소스 경로를 별도로 처리
Swift / Objective-Cswift-demangle, class-dump, jtool2런타임 클래스/프로토콜/셀렉터 데이터, 심볼 렌더링, 팻 슬라이스, 공유 캐시 dylib살아남은 매핑과 서브 캐시 파일 제공; 이름 변경으로 지워진 원본 이름에는 외부 맵 필요
Lua 바이트코드 및 VMunluac, luadec, LuaDec51Lua/LuaJIT/Luau 소스 및 지원되는 난독화 도구와 커스텀 VM 복구IronBrew2는 실제 도구 실행 차분 증거가 있음; 일반 .luac 복구와 VM 복구는 서로 다른 작업
Ruby 바이트코드MRI 디스어셈블리YARV 및 mruby 소스, 옵코드 목록, 프리저/AOT 분류MRI 재컴파일은 옵코드 이름 재현율을 등급화; 해당 측정은 실행 동등성을 입증하지 않음
PHP 레이어php-malware-finderEval 체인 및 리터럴 키 루프/암호 필링, Phar 추출, 인코더 엔벨로프 보고서정적 레이어와 사용 가능한 키 자료 사용; 네이티브 로더 키가 필요한 상용 페이로드는 봉인된 상태로 유지
PowerShell, Bash, VBAPowerDecode, FLARE 도구, olevba셸 디오브푸스케이션, VBA 소스/p-코드 및 스톰핑, XLM 수식, PDF 액션shell은 스크립트 복구와 문서 발견 사항을 나머지 아티팩트 분석과 함께 배치
BEAM / ActionScriptErlang beam_disasm, RABCDAsmBEAM 디버그 소스/Core Erlang 복구 및 ABC 메서드 본문 의사 코드가능한 경우 디버그 청크 보존; 스트립된 BEAM은 별도의 실제 Erlang 실행 검사가 있음
Hermes / React Nativehermes-dec, hbctool, DroidSaw런타임 추출, HBC 구조, 지원되는 의사 JavaScript 리프트HBC 파싱은 v60~v96을 다룸; 소스 리프팅은 더 좁은 측정 경계를 가짐. Hermes-to-DEX 브리지 테인트는 구현되지 않음
Flutter / Dart AOTreFlutter, Darter, blutter커널 소스 테이블, AOT 선언 그래프, ARM64 본문, 문자열, 이름 변경 맵 파싱커널 소스와 AOT 메타데이터는 서로 다른 복구 수준; 스냅샷 버전이 AOT 파싱을 제약
컨테이너 및 펌웨어binwalk, unblob, 7-Zip등록된 포맷 추출, 재귀적 자식 라우팅, 펌웨어 디코딩/카빙, 멤버별 거부 보고서추출된 멤버를 언어 패스로 직접 공급; 인식된 매직을 성공적인 추출로 간주하지 말고 멤버 바이트를 비교
시크릿 및 지표APKLeaks, TruffleHog, Gitleaks, LinkFinder복구된 트리/APK 발견 사항, 토큰 오프셋, 정적 문자열, 시크릿 및 IOC 보고서APK 또는 복구된 트리 스캔; 아래에 심어진 동일한 시크릿에 대해 APKLeaks와 비교
포맷, 패커, 컴파일러 식별Detect It Easy, TrID, PEiD, binwalk다중 신호 식별, 심볼, 서명, 라우팅 힌트identify/detect를 사용하여 복구 경로를 선택한 후 실제 출력 검사
기능 및 테인트capa, Ghidra 스크립트, Joern오프셋이 있는 ATT&CK/MBC 발견 사항, 정규화된 IR 쿼리, 소스-투-싱크 흐름 보고서복구된 아티팩트에서 기능 매칭 및 소스-투-싱크 분석 실행; 테인트 보고서에는 Juliet 테스트 모집단이 포함됨
도구 및 입력Disrobe 결과명명된 도구 결과측정이 확인하는 것
JADX 1.5.5 · Android DEX157 / 228 출력 영역이 깨끗하게 컴파일됨281 / 303 출력 영역이 깨끗하게 컴파일됨커밋된 EdgeCases DEX; 실제 javac, 전체 소스 컴파일 후 귀속을 차단하는 영역의 제한적 격리; 서로 다른 출력 모집단
CFR 0.152 · JVM 클래스파일181 / 181 출력 영역이 깨끗하게 컴파일됨152 / 166 출력 영역이 깨끗하게 컴파일됨커밋된 EdgeCases JAR; 동일한 컴파일러/채점 절차; 서로 다른 출력 모집단
APKLeaks 2.6.3 · 심어진 시크릿 APK8 / 8 심어진 시크릿5 / 8 심어진 시크릿동일한 APK에서 정확한 토큰 재현율; Disrobe는 심어진 AWS 시크릿 액세스 키, Basic 자격 증명, JWT도 찾음
패킹된 입력Ghidra 함수, 패킹 → 재구성명령어, 패킹 → 재구성문자열, 패킹 → 재구성완료된 C 렌더링, 패킹 → 재구성
UPX · Rust hello4 → 287225 → 19,06023 → 1794 → 287
ASPack · Clockres5 → 24358 → 10,54448 → 1165 → 210
ASPack · AccessEnum5 → 10173 → 5,78162 → 1955 → 101
PECompact · Clockres2 → 306148 → 14,60327 → 271 → 267
PECompact · AccessEnum2 → 186155 → 9,27852 → 532 → 186
MEW · Clockres4 → 333125 → 20,9903 → 358측정되지 않음
MEW · AccessEnum4 → 152125 → 9,5923 → 802측정되지 않음
MEW · Autologon4 → 295125 → 19,5953 → 406측정되지 않음
kkrunchy classic · NASM hello4 → 1149 → 103 → 44 → 1
입력Disrobe 출력 영역명명된 도구 출력 영역모집단 경계재현
Android DEX157 / 228 출력 영역이 깨끗하게 컴파일됨JADX 1.5.5: 281 / 303 출력 영역이 깨끗하게 컴파일됨도구 간 순위 없음: 각 도구는 자체 출력 영역 모집단을 가짐cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr
JVM 클래스파일181 / 181 출력 영역이 깨끗하게 컴파일됨CFR 0.152: 152 / 166 출력 영역이 깨끗하게 컴파일됨도구 간 순위 없음: 각 도구는 자체 출력 영역 모집단을 가짐cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr
복구기록된 결과참조 및 한계
Python 3.14.5, 고정된 모듈6286개 중 6077개 코드 객체정규화된 옵코드 구조 비교를 통한 CPython 재컴파일; 점프 타깃, 대부분의 피연산자 및 추가 복구된 객체는 등급화되지 않음. 결과
Python 3.14.5, 고정된 코어 모집단18276개 중 17396개 코드 객체, 로컬 측정574개 모듈에 걸친 동일한 정규화 비교; 이는 의미론적 동등성 결과가 아님. 결과
레거시 Python 1.0~3.7최소 191개 중 150개 픽스처 (회귀 하한)원본 소스에 대한 시대별 인터프리터 재컴파일 또는 구조적 토큰. 결과
Pickle 분류102 / 102 분류 픽스처pickletools 의미론. 결과
Pickle 재구성470 / 470 재구성된 픽스처가 재실행 동등성 검사를 통과CPython 재실행. 결과
JVM 소스 컴파일131개 중 131개 메서드가 컴파일됨실제 javac. 결과
JVM 동작117 / 131 메서드가 관찰된 실행과 일치실제 JVM; 8개 메서드는 분기하고 6개는 격리 실행되지 않음. 결과
Android DEX118 / 118 검증기에 제시된 클래스JVM -Xverify:all; 155개 중 37개 클래스는 링크 건너뜀으로 등급화되지 않음. 결과
.NET C#18 / 35 완전한 EdgeCases 타입이 독립적으로 재컴파일됨실제 Roslyn csc; 합법적 소스가 동등한 동작을 입증하지는 않음. 결과
.NET VM 본문Eazfuscator 모델: 67 / 67 명령어; 실제 KoiVM: 6 / 6 본문 리프트됨별도의 원본/클린 빌드 참조; EazVM은 리포지토리 내 가상화 도구를, KoiVM은 실제 도구 출력을 사용. 증거
WebAssembly57 / 57 적격 함수wasmtime이 테스트 입력에서 반환값, 트랩 및 선형 메모리의 처음 4,096바이트를 비교. 결과
디버그 청크 없는 BEAM19 / 19 모듈Erlang/OTP 27.3.4 재컴파일, 내보내기 비교 및 test/0 출력/종료 상태. 결과
Lua IronBrew2실제 2.7.0 표준 및 MAX 출력이 일치하는 실행으로 복구됨원본 프로그램에 대한 실제 Lua 인터프리터; 하나의 VM 패밀리. 결과
Ruby YARVGreeter 100%; megafile 98.67% 옵코드 이름 재현율MRI 재컴파일; 멀티셋 재현율은 순서, 피연산자, 분기 타깃 및 추가 명령어를 무시. 결과
Go 스트립된 타입 이름838개 중 838개 이름비교 빌드의 실제 go1.26.3 메타데이터. 결과
Hermes HBC v968개 중 8개 함수, 폴백 작업 없음원본 소스 및 함수 이름이 있는 실제 hermesc 샘플. 결과
네이티브 패킹된 바이트UPX, FSG, NSPack, Petite, MPRESS .text가 명명된 커밋된 쌍에서 바이트 동일; Yoda's Crypter 리소스 바이트 동일RVA 정렬된 원본 바이트; 전체 이미지 및 리소스 잔차는 별도로 보고됨. 입력별 표
심어진 지표6 / 6 IOC 카테고리 표현됨커밋된 엔드포인트, 매니페스트 발견 사항, URL, IPv4, 이메일 및 .onion 정답. 결과
MCP 호출 그래프5 / 5 직접 엣지, 모두 올바르게 식별됨스트립된 ELF를 서로 다른 스트립되지 않은 툴체인 쌍둥이와 비교. 정밀도, 재현율
네이티브 테인트93 / 190 레이블된 흐름 재현됨; 거짓 양성 없음, 로컬 측정NIST Juliet CWE-78 char/system 슬라이스, gcc 16.2.0 -O2; 선언된 7개 흐름 카테고리에는 이 슬라이스에 사례가 없음. 결과