Skip to content

Commit

Permalink
Merge pull request mandiant#343 from fireeye/fix/file-imports-ordinal…
Browse files Browse the repository at this point in the history
…-name

extract ordinal and name imports
  • Loading branch information
mr-tz authored Oct 22, 2020
2 parents cb44cb0 + 1e3b29d commit 8bb3050
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 2 deletions.
9 changes: 8 additions & 1 deletion capa/features/extractors/ida/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,14 @@ def extract_file_import_names():
- importname
"""
for (ea, info) in capa.features.extractors.ida.helpers.get_file_imports().items():
if info[1]:
if info[1] and info[2]:
# e.g. in mimikatz: ('cabinet', 'FCIAddFile', 11L)
# extract by name here and by ordinal below
for name in capa.features.extractors.helpers.generate_symbols(info[0], info[1]):
yield Import(name), ea
dll = info[0]
symbol = "#%d" % (info[2])
elif info[1]:
dll = info[0]
symbol = info[1]
elif info[2]:
Expand Down
6 changes: 6 additions & 0 deletions tests/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,12 @@ def parametrize(params, values, **kwargs):
("mimikatz", "function=0x4556E5", capa.features.Characteristic("calls to"), False),
]

FEATURE_PRESENCE_TESTS_IDA = [
# file/imports
# IDA can recover more names of APIs imported by ordinal
("mimikatz", "file", capa.features.file.Import("cabinet.FCIAddFile"), True),
]

FEATURE_COUNT_TESTS = [
("mimikatz", "function=0x40E5C2", capa.features.basicblock.BasicBlock(), 7),
("mimikatz", "function=0x4702FD", capa.features.Characteristic("calls from"), 0),
Expand Down
2 changes: 1 addition & 1 deletion tests/test_ida_features.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def get_ida_extractor(_path):

@pytest.mark.skip(reason="IDA Pro tests must be run within IDA")
def test_ida_features():
for (sample, scope, feature, expected) in FEATURE_PRESENCE_TESTS:
for (sample, scope, feature, expected) in FEATURE_PRESENCE_TESTS + FEATURE_PRESENCE_TESTS_IDA:
id = make_test_id((sample, scope, feature, expected))

try:
Expand Down

0 comments on commit 8bb3050

Please sign in to comment.