Mike Hunhoff
a98fd8240e
fix duplicate rule candidate evaluation in optimized matching engine ( #3080 )
...
* fix duplicate rule candidate evaluation in optimized matching engine
* update CHANGELOG
* update comments
2026-05-18 17:40:55 -06:00
Mike Hunhoff
ced180ddbc
perf: optimize all_zeros using fast bytes comparison ( #3078 )
...
* perf: optimize all_zeros using fast bytes comparison
2026-05-18 10:20:10 +02:00
Mike Hunhoff
db0e1536ce
incorrect bytes() constructor usage in buf_filled_with ( #3077 )
2026-05-16 13:14:24 +02:00
Mike Hunhoff
bbe050437b
remove redundant code related to cli loading ( #3076 )
...
* remove unnecessary os_ argument from capa.loader.collect_metadata
* remove redundant limitation check in main.py
* update CHANGELOG
* Update CHANGELOG.md
2026-05-15 15:20:46 -06:00
Capa Bot
7e06ba0ffe
Sync capa rules submodule
2026-05-15 19:12:21 +00:00
Capa Bot
d889085aad
Sync capa rules submodule
2026-05-15 18:22:47 +00:00
Capa Bot
cb5f56a02c
Sync capa rules submodule
2026-05-15 14:06:20 +00:00
Capa Bot
5e8d8ac994
Sync capa rules submodule
2026-05-15 10:32:59 +00:00
dependabot[bot]
8acb79ab7b
build(deps-dev): bump mypy from 1.20.0 to 2.1.0 ( #3070 )
...
* build(deps-dev): bump mypy from 1.20.0 to 2.1.0
Bumps [mypy](https://github.com/python/mypy ) from 1.20.0 to 2.1.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md )
- [Commits](https://github.com/python/mypy/compare/v1.20.0...v2.1.0 )
---
updated-dependencies:
- dependency-name: mypy
dependency-version: 2.1.0
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
* fix mypy lints
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mike Hunhoff <mike.hunhoff@gmail.com >
2026-05-13 15:05:51 -06:00
Capa Bot
4618822884
Sync capa-testfiles submodule
2026-05-13 17:50:02 +00:00
dependabot[bot]
f9973d71be
build(deps): bump markdown-it-py from 4.0.0 to 4.2.0 ( #3071 )
...
Bumps [markdown-it-py](https://github.com/executablebooks/markdown-it-py ) from 4.0.0 to 4.2.0.
- [Release notes](https://github.com/executablebooks/markdown-it-py/releases )
- [Changelog](https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md )
- [Commits](https://github.com/executablebooks/markdown-it-py/compare/v4.0.0...v4.2.0 )
---
updated-dependencies:
- dependency-name: markdown-it-py
dependency-version: 4.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 11:28:45 -06:00
dependabot[bot]
dba405912d
build(deps-dev): bump pytest from 9.0.2 to 9.0.3 ( #3064 )
...
Bumps [pytest](https://github.com/pytest-dev/pytest ) from 9.0.2 to 9.0.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases )
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst )
- [Commits](https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3 )
---
updated-dependencies:
- dependency-name: pytest
dependency-version: 9.0.3
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mike Hunhoff <mike.hunhoff@gmail.com >
2026-05-13 11:26:51 -06:00
dependabot[bot]
237a9bd995
build(deps-dev): bump build from 1.4.0 to 1.5.0 ( #3067 )
...
Bumps [build](https://github.com/pypa/build ) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/pypa/build/releases )
- [Changelog](https://github.com/pypa/build/blob/main/CHANGELOG.rst )
- [Commits](https://github.com/pypa/build/compare/1.4.0...1.5.0 )
---
updated-dependencies:
- dependency-name: build
dependency-version: 1.5.0
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-11 14:04:25 -06:00
dependabot[bot]
2f35d9cd2a
build(deps-dev): bump mypy-protobuf from 5.0.0 to 5.1.0 ( #3068 )
...
Bumps [mypy-protobuf](https://github.com/nipunn1313/mypy-protobuf ) from 5.0.0 to 5.1.0.
- [Changelog](https://github.com/nipunn1313/mypy-protobuf/blob/main/CHANGELOG.md )
- [Commits](https://github.com/nipunn1313/mypy-protobuf/compare/v5.0.0...v5.1.0 )
---
updated-dependencies:
- dependency-name: mypy-protobuf
dependency-version: 5.1.0
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-11 14:02:59 -06:00
Willi Ballenthin
61adf156ee
tests: xfail a few known Ghidra analysis failures
2026-05-11 11:14:28 +02:00
Willi Ballenthin
a1ff01bc44
fix: Windows path reference in main
2026-05-11 11:14:28 +02:00
Willi Ballenthin
2cd07666bf
changelog
2026-05-11 11:14:28 +02:00
Willi Ballenthin
a82f4aea88
bump submodules
2026-05-11 11:14:28 +02:00
Willi Ballenthin
9ba497f6f7
idalib: remove custom idalib loading
2026-05-11 11:14:28 +02:00
Willi Ballenthin
b5f81e30f0
tests: add negative substring feature test fixture
2026-05-11 11:14:28 +02:00
Willi Ballenthin
eb258c719f
tests: cleanup tests and fixtures
2026-05-11 11:14:28 +02:00
Willi Ballenthin
2604c91668
fix: lints
2026-05-11 11:14:28 +02:00
Willi Ballenthin
3e2c017dfd
tests: ida: better handle stale databases and concurrent access
2026-05-11 11:14:28 +02:00
Willi Ballenthin
018e5b45e5
tests: cleanup tests and fixtures
2026-05-11 11:14:28 +02:00
Willi Ballenthin
745cb037d4
rules: parse operand features
2026-05-11 11:14:28 +02:00
Willi Ballenthin
251a4e285f
tests: consolidate feature test fixtures and runners
2026-05-11 11:14:28 +02:00
Willi Ballenthin
9fd4f8dd74
tests: migrate to data-driven fixtures
2026-05-11 11:14:28 +02:00
Willi Ballenthin
65573944d7
rules: introduce helper to parse features from parts
2026-05-11 11:14:28 +02:00
Willi Ballenthin
5a60f3a0f8
fix: register all data-ref addresses for imports in Ghidra helpers
...
The original code stored only one IAT address per import (addr=0 fallback
on master, addr=first with break in prior fix). When an import has multiple
data references, instruction-level lookups could miss the one actually
referenced, breaking API feature extraction and causing spurious
cross-section-flow characteristics.
Collect all data-ref addresses into a list and register the import under
each, matching how map_fake_import_addrs already stores all refs. Also
preserves ex_loc registration when no data refs exist.
2026-05-08 17:58:07 +02:00
Willi Ballenthin
99b3cfe096
fix: use singular get_segment_at API in binja file string extractor
2026-05-08 17:58:07 +02:00
Willi Ballenthin
a28fcce72b
fix: linter tests needing placeholder rule sets to function
2026-05-08 17:58:07 +02:00
Willi Ballenthin
5ca6c3e35b
gitignore: script test temp files
2026-05-08 17:58:07 +02:00
Willi Ballenthin
b505ba7621
fix: remove unused imports and un-suppress F401
...
closes #2996
2026-05-08 17:58:07 +02:00
Willi Ballenthin
309231f261
fix: ghidra and binja file strings yield FileOffsetAddress
...
Both extractors were yielding AbsoluteVirtualAddress for file-scope strings,
inconsistent with all other backends (common, pefile, elffile, viv, ida)
which yield FileOffsetAddress. Convert VAs to file offsets using each
backend's respective API.
2026-05-08 17:58:07 +02:00
Willi Ballenthin
57e730fad2
fix: binja embedded PE yields FileOffsetAddress via segment data_offset
...
carve_pe returns offsets into a raw byte buffer read from the segment.
Convert to file offset using the segment's data_offset rather than
emitting a virtual address.
2026-05-08 17:58:07 +02:00
Willi Ballenthin
c9cb43a839
fix: elffile imports use AbsoluteVirtualAddress for ELF r_offset
...
ELF r_offset in executables/shared objects is a virtual address (GOT slot),
not a file offset. Only relocatable .o files use file offsets, which capa
does not analyze.
2026-05-08 17:58:07 +02:00
Willi Ballenthin
9b93e90e63
fix: wrap binja function name addresses in AbsoluteVirtualAddress
2026-05-08 17:58:07 +02:00
Willi Ballenthin
4e80400711
fix: ghidra: don't emit VAs for embedded PEs
2026-05-08 17:58:07 +02:00
Willi Ballenthin
330b64137e
fix: ida: correctly emit file offsets for embedded PEs
2026-05-08 17:58:07 +02:00
Willi Ballenthin
43d65361ce
gitignore: CLAUDE.local.md
2026-05-08 17:58:07 +02:00
Willi Ballenthin
8fca21f808
linter: validate dynamic example offsets
...
closes #3058
2026-05-08 17:58:07 +02:00
Willi Ballenthin
8e464e6041
fix: formatting
2026-05-08 17:58:07 +02:00
Willi Ballenthin
555bbdecda
fix: guard getByteDef against None for unmapped addresses in viv insn extractor
2026-05-08 17:58:07 +02:00
Willi Ballenthin
c8d47085ee
fix: remove unused imports from cache-ruleset.py, detect-binexport2-capabilities.py, show-capabilities-by-function.py
...
Removes capa.engine, capa.helpers, capa.features, and capa.features.insn
imports that were never referenced in each script. Adds missing capa.loader
import to show-capabilities-by-function.py which was already being used.
2026-05-08 17:58:07 +02:00
Willi Ballenthin
7a8a0acaa9
fix: remove dead except ValueError clause in capa2sarif.py so JSONDecodeError is caught correctly
...
json.JSONDecodeError is a subclass of ValueError, so the broader except ValueError
was shadowing the more specific handler, making it unreachable. Keep only the
specific except json.JSONDecodeError handler.
2026-05-08 17:58:07 +02:00
Willi Ballenthin
7d8714098c
fix: dedent bulk-process.py main() body so explicit argv is used
...
The entire main() body was indented inside `if argv is None:`, causing
main() to silently return None when called with an explicit argv list.
Closes SURF-90.
2026-05-08 17:58:07 +02:00
Willi Ballenthin
a938c87fa4
fix: guard statistics calls in compare-backends.py against empty duration lists
...
When all runs for a backend fail, durations_by_backend[backend] is empty,
causing StatisticsError from statistics.quantiles (needs >= 2 points) and
statistics.mean (needs >= 1 point). Print placeholder messages instead.
2026-05-08 17:58:07 +02:00
Willi Ballenthin
604fae3519
fix: replace zipfile with pyzipper in minimize_vmray_results.py so output archive is AES-encrypted
...
zipfile.ZipFile.setpassword() only affects reads; writing encrypted entries requires pyzipper with WZ_AES encryption. Add pyzipper to scripts optional dependencies.
2026-05-08 17:58:07 +02:00
Willi Ballenthin
e474e477f1
fix: assign yara_strings/yara_condition to empty string when Some has cmin=0 to prevent UnboundLocalError
2026-05-08 17:58:07 +02:00
Willi Ballenthin
ae4c2ec82d
fix: parenthesize s_type checks in capa2yara so kid.name guard applies to And/Or/Not uniformly
...
Without parentheses, Python's operator precedence caused `kid.name != "Some"`
to only guard the `Not` branch; `And` and `Or` kids named `"Some"` would
bypass the Some-handling block and enter recursive convert_rule unguarded.
2026-05-08 17:58:07 +02:00