diff --git a/capa/features/extractors/viv/insn.py b/capa/features/extractors/viv/insn.py index 7df2b3e1..43bc5592 100644 --- a/capa/features/extractors/viv/insn.py +++ b/capa/features/extractors/viv/insn.py @@ -329,6 +329,9 @@ def extract_insn_string_features(f, bb, insn): for oper in insn.opers: if isinstance(oper, envi.archs.i386.disasm.i386ImmOper): v = oper.getOperValue(oper) + elif isinstance(oper, envi.archs.i386.disasm.i386ImmMemOper): + # like 0x10056CB4 in `lea eax, dword [0x10056CB4]` + v = oper.imm elif isinstance(oper, envi.archs.i386.disasm.i386SibOper): # like 0x401000 in `mov eax, 0x401000[2 * ebx]` v = oper.imm diff --git a/tests/fixtures.py b/tests/fixtures.py index dddf5f63..40a87e38 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -169,7 +169,7 @@ def get_data_path_by_name(name): elif name.startswith("773290"): return os.path.join(CD, "data", "773290480d5445f11d3dc1b800728966.exe_") else: - raise ValueError("unexpected sample fixture") + raise ValueError("unexpected sample fixture: %s" % name) def get_sample_md5_by_name(name): @@ -188,6 +188,8 @@ def get_sample_md5_by_name(name): return "c8403fb05244e23a7931c766409b5e22" elif name == "al-khaser x86": return "db648cd247281954344f1d810c6fd590" + elif name == "al-khaser x64": + return "3cb21ae76ff3da4b7e02d77ff76e82be" elif name.startswith("39c05"): return "b7841b9d5dc1f511a93cc7576672ec0c" elif name.startswith("499c2"): @@ -209,7 +211,7 @@ def get_sample_md5_by_name(name): elif name.startswith("773290"): return "773290480d5445f11d3dc1b800728966" else: - raise ValueError("unexpected sample fixture") + raise ValueError("unexpected sample fixture: %s" % name) def resolve_sample(sample): @@ -419,6 +421,8 @@ FEATURE_PRESENCE_TESTS = [ ("pma16-01", "function=0x4021B0", capa.features.Regex("www.practicalmalwareanalysis.com"), False), # insn/string, pointer to string ("mimikatz", "function=0x44EDEF", capa.features.String("INPUTEVENT"), True), + # insn/string, direct memory reference + ("mimikatz", "function=0x46D6CE", capa.features.String("(null)"), True), # insn/bytes ("mimikatz", "function=0x40105D", capa.features.Bytes("SCardControl".encode("utf-16le")), True), ("mimikatz", "function=0x40105D", capa.features.Bytes("SCardTransmit".encode("utf-16le")), True),