11[package ]
22name = " capa"
3- version = " 0.5.1 "
3+ version = " 0.5.2 "
44description = " File capability extractor."
55authors = [" Marirs <marirs@gmail.com>" , " Andrey Mnatsakanov <andrey@3ig.kiev.ua>" , " Jorge Alejandro Durán Royo<jorge.duran.royo@gmail.com>" ]
66keywords = [" capa" , " fce" , " capability" , " aslr" , " reverse" ]
77readme = " README.md"
88license-file = " LICENSE"
99repository = " https://github.com/marirs/capa-rs"
1010homepage = " https://github.com/marirs/capa-rs"
11- # Drop `examples` from `exclude` so the [[example]] target below ships
12- # with the crate (was inconsistent: example target referenced an
13- # excluded path). `data/` stays excluded — those are test fixtures.
14- # `flirt-sigs/` stays excluded — 70 MB of FLIRT .sig files would
15- # blow past crates.io's 10 MB upload limit. The GitHub release ships
16- # them as a separate `flirt-sigs.tar.gz` artifact alongside the CLI
17- # binaries; source builds (`git clone`) get them automatically since
18- # the directory lives in the repo.
19- # `scripts/` (0.5.0) stays excluded — the only file is
20- # `gen_com_tables.py`, the Python generator that produced
21- # `src/rules/com_db.rs` (the 29k-entry COM GUID database, included!
22- # at build time). The generated table ships in src/; the generator
23- # itself is only useful for regenerating from a newer upstream
24- # Python capa, which crates.io consumers don't need.
2511exclude = [" data" , " flirt-sigs" , " scripts" ]
2612edition = " 2024"
27- # 0.3.21: bumped from 1.85 → 1.95 because smda 0.5.x sets MSRV 1.95
28- # (needed for some 2024-edition features it leans on). Pure-Rust dep
29- # tree below — no aws-lc / openssl / native-tls.
3013rust-version = " 1.95"
3114
3215[dependencies ]
@@ -37,26 +20,12 @@ petgraph = "0.8"
3720regex = " 1.11.1"
3821fancy-regex = " 0.18"
3922serde = { version = " 1" , features = [" derive" ] }
40- # 0.5.1: smda 0.6.4 → 0.6.5. Picks up the Mach-O closeout:
41- # `__TEXT,__stubs` walker via `LC_DYSYMTAB.indirectsymoff` so
42- # direct `bl _stub` calls resolve to their API names (0.6.4 only
43- # covered the GOT-slot indirect form, missing the most common
44- # ARM64 PIC call shape), and `MachoArchPreference` plumbed through
45- # `BinaryInfo` so post-parse passes honour the slice preference
46- # set at parse time. `0.6.5` is the minimum; semver-compatible
47- # with future 0.6.x.
4823smda = " 0.6.5"
4924thiserror = " 2.0.12"
5025walkdir = " 2.5.0"
5126yaml-rust = " 0.4.5"
5227goblin = { version = " 0.10.0" , features = [" alloc" ] }
5328maplit = " 1.0.2"
54- # 0.4.2: dnfile 0.4 → 0.5 picks up `Send + Sync` supertrait bounds on
55- # the public trait family (MDTableTrait, MDTableRowTrait,
56- # MDTableRowTraitT, CodedIndex) so `DnPe<'_>` — and the capa-rs
57- # `dnfile::Extractor<'_>` that wraps it — can cross thread
58- # boundaries. Required by the rayon-parallel function loop in
59- # `find_capabilities`. No runtime behaviour change.
6029dnfile = " 0.5"
6130lazy_static = " 1.5.0"
6231parking_lot = " 0.12.3"
@@ -66,49 +35,12 @@ memmap2 = "0.9.5"
6635scroll = " 0.13"
6736once_cell = " 1.21.1"
6837dynamic-loader-cache = " 0.2.2"
69- # (0.5.1) Pure-Rust PLIST parser for Mach-O code-signing
70- # entitlements blob (CS_EmbeddedEntitlements, magic 0xfade7171).
71- # Used by security/macho.rs to detect ALLOW-JIT
72- # (com.apple.security.cs.allow-jit). No openssl / aws-lc /
73- # native-tls in the transitive tree — matches the project's
74- # pure-Rust stance.
7538plist = { version = " 1" , default-features = false }
76- # 0.3.21 introduced ouroboros as a self-referential wrapper around
77- # `buf: Vec<u8>` + `DisassemblyReport<'_>` so the public Extractor::new
78- # could keep its 0.3.20 signature. 0.4.0 completes the zero-copy
79- # refactor — `Extractor<'a>` takes `&'a [u8]` from the caller and
80- # borrows the smda/dnfile reports directly. The ouroboros dep is gone.
81- # 0.3.21: iced-x86 is already in the transitive dep tree via smda.
82- # Pulling it in directly lets the smda extractor compare instructions
83- # against typed `Mnemonic` / `FlowControl` enums instead of re-formatting
84- # strings — the same hot-path perf win smda itself got from the iced
85- # decoder swap. Match the feature set smda uses to keep monomorphisation
86- # overhead identical.
8739iced-x86 = { version = " 1" , default-features = false , features = [" std" , " decoder" , " intel" , " instr_info" ] }
88- # 0.4.3: fast-flirt is our pure-Rust FLIRT engine — Apache-2.0,
89- # zero-copy arena + multi-level prefix trie matcher. capa-rs uses it
90- # to identify statically-linked library functions (MSVC CRT, ATL/MFC,
91- # OpenSSL, zlib, boost, libcurl, lua, protobuf, DirectX, Intel libs,
92- # etc.) and exclude them from the user-facing capability output via
93- # the existing `lib: true` rule-skip path. Always compiled in —
94- # `AnalyzeBuilder::signatures` is the opt-in (no signatures path →
95- # no FLIRT, identical behaviour to pre-0.4.3).
96- #
97- # Three direct deps (`miniz_oxide`, `smallvec`, `thiserror`); ~240×
98- # faster on `matches()` and ~70% less resident memory than the
99- # upstream-FLIRT engine we briefly piloted on.
100- fast-flirt = " 0.2.2"
101- # 0.4.2: rayon for inter-function parallelism in `find_capabilities`.
102- # Each function's analysis is pure — reads the extractor, evaluates
103- # rules, returns matches. Parallelising the outer loop gives ~4-8×
104- # end-to-end speedup on multi-core machines for binaries with more
105- # than a handful of functions. Also used in `rules::get_rules` to
106- # parallelise YAML parsing across the rule corpus.
10740rayon = " 1.10"
10841
10942[dev-dependencies ]
11043clap = { version = " 4.5" , features = [" cargo" , " derive" ] }
111-
11244prettytable-rs = " 0.10.0"
11345
11446[lib ]
0 commit comments