mirror of
https://github.com/mandiant/capa.git
synced 2025-12-22 23:26:21 -08:00
tests: main: demonstrate CAPE analysis (and bug #1702)
This commit is contained in:
@@ -363,8 +363,18 @@ def get_data_path_by_name(name) -> Path:
|
|||||||
/ "data"
|
/ "data"
|
||||||
/ "dynamic"
|
/ "dynamic"
|
||||||
/ "cape"
|
/ "cape"
|
||||||
|
/ "v2.2"
|
||||||
/ "0000a65749f5902c4d82ffa701198038f0b4870b00a27cfca109f8f933476d82.json.gz"
|
/ "0000a65749f5902c4d82ffa701198038f0b4870b00a27cfca109f8f933476d82.json.gz"
|
||||||
)
|
)
|
||||||
|
elif name.startswith("d46900"):
|
||||||
|
return (
|
||||||
|
CD
|
||||||
|
/ "data"
|
||||||
|
/ "dynamic"
|
||||||
|
/ "cape"
|
||||||
|
/ "v2.2"
|
||||||
|
/ "d46900384c78863420fb3e297d0a2f743cd2b6b3f7f82bf64059a168e07aceb7.json.gz"
|
||||||
|
)
|
||||||
elif name.startswith("ea2876"):
|
elif name.startswith("ea2876"):
|
||||||
return CD / "data" / "ea2876e9175410b6f6719f80ee44b9553960758c7d0f7bed73c0fe9a78d8e669.dll_"
|
return CD / "data" / "ea2876e9175410b6f6719f80ee44b9553960758c7d0f7bed73c0fe9a78d8e669.dll_"
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -6,8 +6,10 @@
|
|||||||
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and limitations under the License.
|
# See the License for the specific language governing permissions and limitations under the License.
|
||||||
|
import gzip
|
||||||
import json
|
import json
|
||||||
import textwrap
|
import textwrap
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import fixtures
|
import fixtures
|
||||||
@@ -582,3 +584,59 @@ def test_main_rd():
|
|||||||
assert capa.main.main([path, "-j"]) == 0
|
assert capa.main.main([path, "-j"]) == 0
|
||||||
assert capa.main.main([path, "-q"]) == 0
|
assert capa.main.main([path, "-q"]) == 0
|
||||||
assert capa.main.main([path]) == 0
|
assert capa.main.main([path]) == 0
|
||||||
|
|
||||||
|
|
||||||
|
def extract_cape_report(tmp_path: Path, gz: Path) -> Path:
|
||||||
|
report = tmp_path / "report.json"
|
||||||
|
report.write_bytes(gzip.decompress(gz.read_bytes()))
|
||||||
|
return report
|
||||||
|
|
||||||
|
|
||||||
|
def test_main_cape1(tmp_path):
|
||||||
|
path = extract_cape_report(tmp_path, fixtures.get_data_path_by_name("0000a657"))
|
||||||
|
|
||||||
|
# TODO(williballenthin): use default rules set
|
||||||
|
# https://github.com/mandiant/capa/pull/1696
|
||||||
|
rules = tmp_path / "rules"
|
||||||
|
rules.mkdir()
|
||||||
|
(rules / "create-or-open-registry-key.yml").write_text(
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
rule:
|
||||||
|
meta:
|
||||||
|
name: create or open registry key
|
||||||
|
authors:
|
||||||
|
- testing
|
||||||
|
scopes:
|
||||||
|
static: instruction
|
||||||
|
dynamic: call
|
||||||
|
features:
|
||||||
|
- or:
|
||||||
|
- api: advapi32.RegOpenKey
|
||||||
|
- api: advapi32.RegOpenKeyEx
|
||||||
|
- api: advapi32.RegCreateKey
|
||||||
|
- api: advapi32.RegCreateKeyEx
|
||||||
|
- api: advapi32.RegOpenCurrentUser
|
||||||
|
- api: advapi32.RegOpenKeyTransacted
|
||||||
|
- api: advapi32.RegOpenUserClassesRoot
|
||||||
|
- api: advapi32.RegCreateKeyTransacted
|
||||||
|
- api: ZwOpenKey
|
||||||
|
- api: ZwOpenKeyEx
|
||||||
|
- api: ZwCreateKey
|
||||||
|
- api: ZwOpenKeyTransacted
|
||||||
|
- api: ZwOpenKeyTransactedEx
|
||||||
|
- api: ZwCreateKeyTransacted
|
||||||
|
- api: NtOpenKey
|
||||||
|
- api: NtCreateKey
|
||||||
|
- api: SHRegOpenUSKey
|
||||||
|
- api: SHRegCreateUSKey
|
||||||
|
- api: RtlCreateRegistryKey
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
assert capa.main.main([str(path), "-r", str(rules)]) == 0
|
||||||
|
assert capa.main.main([str(path), "-q", "-r", str(rules)]) == 0
|
||||||
|
assert capa.main.main([str(path), "-j", "-r", str(rules)]) == 0
|
||||||
|
assert capa.main.main([str(path), "-v", "-r", str(rules)]) == 0
|
||||||
|
assert capa.main.main([str(path), "-vv", "-r", str(rules)]) == 0
|
||||||
|
|||||||
Reference in New Issue
Block a user