
Config 기반 Dart AOT 스냅샷 분석기로, IDA, radare2, Frida용 blutter 호환 심볼과 구조체를 내보내고, Dart SDK 없이 함수를 dart-analyze-clean Dart로 디컴파일합니다.
설정 기반 Dart AOT 스냅샷 분석기 및 디버그 정보 내보내기 도구. Dart SDK가 필요 없고, 대상은 절대 실행하지 않는다: Mach-O / ELF / PE 내부에 포함된 스냅샷을 찾아내고, blutter와 동일한 심볼과 구조체를 IDA / radare2 / Frida용으로 내보내며(이식 원본이 틀렸던 네 곳은 의도적으로 수정했다 —
src/export/mod.rs참조), 함수를dart analyze가 받아들이는 Dart로 디컴파일한다. 데스크톱 및 실제 기기 모바일(압축 포인터) 빌드를 모두 지원한다.
모든 Dart AOT 산출물에서 동작한다 — Flutter 릴리스 빌드, dart compile exe, dart compile aot-snapshot (Dart 2.7+ 클러스터 스냅샷).
자체 완결형 & 자동 감지 — 26개의 SDK 프로파일과 21개의 압축 포인터 변형이 모두 내장되어 있다. Dart 버전은 스냅샷 해시로 매칭되고, 변형(compressed-pointers, 즉 모든 모바일 Flutter 빌드)은 스냅샷 자체의 features 문자열에서 판별되며, 커스텀/Flutter-engine 빌드를 위한 구조적 프로브 폴백도 있다. 자체 빌드뿐 아니라 실제 출시 앱에서도 검증되었다:
dart analyze가 통과하는 Dart로 디컴파일된다(구조화율 95.9% 및 91.1%).dart analyze 오류 0개.material_3_demo (5 107줄)와
animations (2 108줄): 각각 15 796개 및 11 102개 함수, 둘 다 92.5% 구조화, 둘 다
dart analyze 오류 0개. 소스가 알려져 있으므로 소스와 대조하여 검증한다:
lib/에 선언된 public 클래스/mixin/enum의 98.8% 및 100%가 복원되고, 문자열 리터럴의
95.4% 및 97.4%가 출력에 나타나며, 18/18 및 21/23개의 소스 파일이 복원된 라이브러리에
매핑된다. tests/app_truth.rs가 이 비율(하한 0.90)을 검증하므로 이 체인이 조용히
썩어들어갈 수 없다.유효한 Dart로 디컴파일 — 디스어셈블리 덤프가 아니라 lift → CFG → 구조화된 출력이다: 루프,
if/else, break/continue, 로드 지점에 인라인된 오브젝트 풀 리터럴, 귀속 주석으로 복원된
필드 이름. 26개 산출물(291개 파일, 24 253개 함수)에 걸쳐 출력이 dart analyze 오류 0개로
분석되며, 실제 앱에서도 견고하다 — Lark 3.6.1은 95.9% 구조화, Weibo 2.19.6은 91.1%
(19 053개 함수, 1.53 M개 문장)이며 둘 다 오류가 없다. 환원 불가능한 제어 흐름은 조용히
평탄화되지 않고 명시적인 gotoLabel과 NOTE 헤더를 유지한다. Decompiler 참조.
빠름 — 모두 이 릴리스의 바이너리로 측정했다: 9 MB macOS Flutter 샘플을 0.26초에 내보낸다;
--decompile은 Lark(25.6 MB Android, 25 183개 함수)에서 1.5초, material_3_demo(14 MB macOS,
15 796개 함수)에서 1.2초, Weibo(9 MB Android, 19 053개 디컴파일 함수 / 1.63 M개 문장)에서
1.7초가 걸리며, 최대 RSS는 172–263 MB이다. 이는 동일 산출물에서 v0.1.7보다 약 89배 빠르다
(106.8초 → 1.20초) — 함수마다 실행 불변 데이터를 재구축하지 않고, 산출물을 버퍼링하는 대신
디스크로 스트리밍하며, 505개 라이브러리를 병렬로 렌더링한 덕분이지 더 빠른 알고리즘 때문이
아니다. 병렬 경로는 직렬 경로와 바이트 단위로 동일하다(1011개 파일에 대한 diff -rq).
파일 이름과 "어느 라이브러리가 각 진입점을 내보내는가"가 렌더링 시작 전에 순차 사전 패스로
확정되기 때문이다.
이중 언어 CLI — 중국어 로케일은 중국어를 출력하고, 그 외는 영어를 출력한다; DAE_LANG=zh|en으로 재정의할 수 있다.
병렬 디컴파일러 — 505개 정도의 라이브러리가 동시에 렌더링된다(기본값 n_threads(),
즉 코어 수를 8로 제한); DAE_DEC_THREADS=N으로 재정의할 수 있다. 출력은 어떤 설정에서도
바이트 단위로 동일하다. 파일 이름과 "어느 라이브러리가 각 진입점을 내보내는가"가 먼저
순차 사전 패스로 확정되기 때문이다. 8개 스레드를 넘으면 6P+12E 코어 Mac에서 더 느려지고
메모리를 더 사용하므로, 이 제한은 한계가 아니라 최적점이다. DART_AOT_PROF=1은 단계별
분석을 출력한다 — 단계들이 스레드별로 합산된 CPU 시간이므로 백분율이 100%를 넘을 수 있다.
점진적 모드 — 스냅샷을 데이터베이스처럼 조회하는 20개의 서브커맨드(libs, classes,
functions, members, strings, findrefs, callers, callees, pp, objs, stubs, ...)를
제공하고, 그런 다음 정확히 하나의 대상만 디컴파일한다(getclass / getmethod / getlib /
decompile --app). 조회는 작은 코퍼스에서 15–30 ms, 15,796개 함수 앱에서 43–311 ms에 응답한다;
해당 앱의 전체 내보내기는 0.55초, --decompile을 붙이면 약 1.4초(약 1000개 파일)이다. 모든
커맨드의 출력은 다음 커맨드에 그대로 붙여넣을 수 있다.
Progressive mode 참조.
툴체인 불필요 — 자체 완결형 바이너리 하나: Dart SDK도, Flutter 설치도 필요 없고, 대상은 실행되지 않고 파싱만 된다. Mach-O/ELF/PE 파싱과 47개 프로파일이 모두 내장되어 있다.
| 방법 | 명령 |
|---|---|
| Homebrew (macOS) | brew install ejfkdev/tap/dae |
| cargo | cargo install dae-rs |
| 사전 빌드 | Releases의 바이너리 — Windows/macOS/Linux × x64/arm64 |
| 소스 | cargo build --release |
macOS 사전 빌드 바이너리는 ad-hoc 서명되어 있다; Gatekeeper가 첫 실행을 차단하면: xattr -dr com.apple.quarantine dae.
(crates.io 패키지 이름은 dae-rs인데 dae가 이미 선점되어 있기 때문이다; 저장소, 라이브러리, 바이너리는 모두 dae로 유지된다.)
dae <out_dir> # auto-detect the Dart version dae export <out_dir> # same thing, explicit verb dae <out_dir> --sdk-profile P.json # or force one dae <out_dir> --app --decompile # app-side code only (drops dart: and package:flutter)
dae help # every subcommand, grouped dae help findrefs # one command's options and output columns dae decompile | less # whole app's pseudocode to stdout
## 주요 기능
- **다중 소스 수집**: Shodan, FOFA, Hunter, Quake, Censys, ZoomEye, Netlas, CriminalIP, PublicWWW, Google, Bing, 360, DayDayMap, URLScan, HunterHow, WindVane, FofaHack, 0.zone, ThreatBook, AlienVault, BGP, RapidDNS, RSEcloud, SubdomainCenter, SiteDossier, CertSpotter, Anubis, BufferOver, crt.sh, Hackertarget, InternetDB, LeakIX, Robtex, SubdomainFinder, ThreatCrowd, ThreatMiner, URLScan, WayBack, and more를 포함한 40개 이상의 검색 엔진 및 데이터 소스
- **다중 프로토콜 지원**: HTTP/HTTPS, SOCKS4, SOCKS5 프록시
- **다중 인증 방식**: URL 인증, Bearer 토큰, 기본 인증, 쿼리 매개변수, 사용자 정의 헤더
- **지능형 중복 제거**: 여러 소스에서 수집된 자산의 자동 중복 제거
- **유연한 출력**: JSON, 텍스트, CSV 형식 지원
- **높은 동시성**: 효율적인 동시 쿼리 및 결과 집계
- **사용자 정의 가능**: 사용자 정의 API 엔드포인트 및 쿼리 매개변수 지원
- **자동화 친화적**: CI/CD 파이프라인 및 자동화된 워크플로우에 적합
## 지원되는 데이터 소스