dissect.cobaltstrike 1.2.2.dev4__tar.gz → 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/.gitignore +6 -0
  2. dissect_cobaltstrike-1.3.0/CHANGELOG.md +169 -0
  3. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/PKG-INFO +1 -1
  4. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/_version.py +2 -2
  5. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/.github/workflows/dissect-ci.yml +0 -0
  6. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/.lfs-assets-id +0 -0
  7. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/.pre-commit-config.yaml +0 -0
  8. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/.readthedocs.yml +0 -0
  9. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/LICENSE +0 -0
  10. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/README.rst +0 -0
  11. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/codecov.yml +0 -0
  12. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/__init__.py +0 -0
  13. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/artifact.py +0 -0
  14. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/beacon.py +0 -0
  15. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/c2.py +0 -0
  16. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/c2profile.lark +0 -0
  17. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/c2profile.py +0 -0
  18. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/c_c2.py +0 -0
  19. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/c_obfuscate.py +0 -0
  20. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/c_obfuscate.pyi +0 -0
  21. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/client.py +0 -0
  22. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/guardrails.py +0 -0
  23. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/normalize.py +0 -0
  24. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/obfuscate.py +0 -0
  25. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/pcap.py +0 -0
  26. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/pe.py +0 -0
  27. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/stage.py +0 -0
  28. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/utils.py +0 -0
  29. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/version.py +0 -0
  30. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/dissect/cobaltstrike/xordecode.py +0 -0
  31. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/Makefile +0 -0
  32. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/_ext/generate_beacon_version_csv.py +0 -0
  33. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/beacon-version-identification.rst +0 -0
  34. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/c2profile-grammar.rst +0 -0
  35. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/cobaltstrike-beacon-versions.csv +0 -0
  36. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/codespell-ignore-words.txt +0 -0
  37. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/conf.py +0 -0
  38. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/examples.rst +0 -0
  39. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/images/beacon-client.png +0 -0
  40. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/images/teamserver-echoclient.png +0 -0
  41. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/images/teamserver_ls.png +0 -0
  42. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/images/vt-cobaltstrike-43-zip.png +0 -0
  43. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/index.rst +0 -0
  44. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/installation.rst +0 -0
  45. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/license.rst +0 -0
  46. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/scripts/checksum8-accesslogs.rst +0 -0
  47. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/scripts/dump_beacon_keys.rst +0 -0
  48. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/scripts/example_client.rst +0 -0
  49. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/scripts/index.rst +0 -0
  50. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/structures/c2_def.rst +0 -0
  51. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/structures/cs_def.rst +0 -0
  52. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/structures/guardrails_def.rst +0 -0
  53. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/structures/index.rst +0 -0
  54. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/structures/pe_def.rst +0 -0
  55. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/tools/beacon-artifact.rst +0 -0
  56. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/tools/beacon-client.rst +0 -0
  57. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/tools/beacon-dump.rst +0 -0
  58. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/tools/beacon-pcap.rst +0 -0
  59. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/tools/beacon-xordecode.rst +0 -0
  60. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/tools/c2profile-dump.rst +0 -0
  61. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/tutorials/decrypt_cobaltstrike_pcaps.rst +0 -0
  62. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/tutorials/index.rst +0 -0
  63. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/docs/tutorials/minimal_beacon_client.rst +0 -0
  64. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/pyproject.toml +0 -0
  65. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/scripts/checksum8-accesslogs.py +0 -0
  66. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/scripts/dump_beacon_keys.py +0 -0
  67. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/scripts/example_client.py +0 -0
  68. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/conftest.py +0 -0
  69. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/test_beacon.py +0 -0
  70. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/test_c2.py +0 -0
  71. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/test_c2profile.py +0 -0
  72. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/test_client.py +0 -0
  73. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/test_guardrails.py +0 -0
  74. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/test_pe.py +0 -0
  75. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/test_utils.py +0 -0
  76. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/test_version.py +0 -0
  77. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tests/test_xordecode.py +0 -0
  78. {dissect_cobaltstrike-1.2.2.dev4 → dissect_cobaltstrike-1.3.0}/tox.ini +0 -0
@@ -73,6 +73,9 @@ instance/
73
73
 
74
74
  # Sphinx documentation
75
75
  docs/_build/
76
+ # Test data extracted by the ipython examples during docs build
77
+ docs/*.bin
78
+ docs/*.profile
76
79
 
77
80
  # PyBuilder
78
81
  .pybuilder/
@@ -112,6 +115,9 @@ ipython_config.py
112
115
  # https://pdm.fming.dev/#use-with-ide
113
116
  .pdm.toml
114
117
 
118
+ # uv
119
+ uv.lock
120
+
115
121
  # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
116
122
  __pypackages__/
117
123
 
@@ -0,0 +1,169 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [1.3.0] - 2026-10-01
11
+
12
+ ### Added
13
+
14
+ - Support for the Cobalt Strike 4.11 `stage.transform-obfuscate` feature,
15
+ deobfuscating beacon payloads obfuscated with combinations of XOR, RC4,
16
+ base64 and lznt1 (`obfuscate.py`, `c_obfuscate`).
17
+ - New `stage.py` module to detect and resolve chained beacon stages (obfuscation
18
+ and XOR-decode layers).
19
+ - New `normalize.py` module to detect and adapt tampered beacon configurations
20
+ (e.g. modified `SettingsType` enum values) so they can still be parsed, via a
21
+ configurable `Normalizer` pipeline.
22
+ - `BeaconConfigBlock` and `BeaconModifications` dataclasses; `BeaconConfig` now
23
+ exposes `obfuscate_settings`, `stages` and `modifications`.
24
+ - New `BeaconSetting` values for Cobalt Strike 4.11–4.13 (chunked POST sizes,
25
+ DNS-over-HTTPS, process-injection drip load, check-in delay) and the
26
+ `ObfSetThreadContext` inject executors.
27
+ - Version and setting mappings for Cobalt Strike 4.11, 4.12 and 4.13.
28
+ - Parsing of `transform-obfuscate` blocks in Malleable C2 profiles
29
+ (grammar + `TransformObfuscateBlock`).
30
+ - `beacon-dump` CLI: `--fail-on-error` flag, recursion into directories, and a
31
+ verbose stock-type mismatch warning (`STOCK_TYPE` mapping).
32
+ - Additional PE export timestamp for Cobalt Strike 4.10 (#80).
33
+ - Documentation example and test coverage for transform-obfuscate beacons.
34
+
35
+ ### Changed
36
+
37
+ - Rewrote beacon configuration discovery to be payload-first: it searches for the
38
+ RSA encryption OID embedded in `SETTING_PUBKEY` and walks packed TLV settings to
39
+ recover the config start, treating setting index/type values as opaque.
40
+ - Support the 0x1800 (V2) configuration patch size used since Cobalt Strike 4.9.
41
+ - Improved deprecated-setting disambiguation using the maximum seen setting enum.
42
+ - Recover over-long `C2_REQUEST`/`C2_POSTREQ` transform programs.
43
+ - The Cobalt Strike version is now only deduced from the PE export timestamp when
44
+ it maps to a known version; from 4.11 onwards the export timestamp is no longer
45
+ present in the beacon.
46
+ - `pycryptodome` is now a core dependency; `lark` requires `>= 1.3.1`.
47
+ - Updated project dependencies (#82) and cstruct usage (#81).
48
+
49
+ ### Removed
50
+
51
+ - Dropped support for Python 3.9 (#82).
52
+
53
+ ## [1.2.1] - 2025-03-25
54
+
55
+ ### Added
56
+
57
+ - Support for beacon guardrails, including definitions and documentation (#73, #75).
58
+ - Support for the `SETTING_HTTP_DATA_REQUIRED` beacon setting (#71).
59
+ - Support for the `SETTING_DATA_STORE_SIZE` and `SETTING_BEACON_GATE` options (#68).
60
+ - Version detection for Cobalt Strike 4.9 and 4.10 (#66), and 4.10.1 (#76).
61
+ - Output of `bof_reuse_memory` and `bof_allocator` in the c2profile (#67).
62
+ - Beacon version table added to the documentation (#77).
63
+
64
+ ### Fixed
65
+
66
+ - `BeaconSetting` names with unknown values (#64).
67
+
68
+ ### Changed
69
+
70
+ - Speed up beacon file reading from zip files in tests (#65).
71
+
72
+ ## [1.2.0] - 2024-10-11
73
+
74
+ ### Changed
75
+
76
+ - Compatibility with `dissect.cstruct` v4 (#56).
77
+ - Updated minimal Python requirement to 3.9 (#58).
78
+ - Migrated packaging from setuptools to a full `pyproject.toml` (#61).
79
+ - Switched the GitHub workflow to `dissect-ci.yml` and updated GitHub Actions
80
+ and pre-commit checks (#59, #60, #62).
81
+ - Pinned `sphinx_rtd_theme >= 2.0` to fix readthedocs (#57).
82
+
83
+ ## [1.1.0] - 2024-09-23
84
+
85
+ ### Added
86
+
87
+ - Version detection for Cobalt Strike 4.8 (#44) and improved support for
88
+ Cobalt Strike 4.7 and 4.8 (#47).
89
+ - Beacon version information printed when running `beacon-dump -v` (#46).
90
+
91
+ ### Changed
92
+
93
+ - Switched the linter to `ruff` (#50) and added `codespell` to pre-commit (#41).
94
+ - Sped up `xor` using pseudo-SIMD and sped up finding non-standard beacon
95
+ XOR keys (#49).
96
+ - Improved C2 and client code to better handle certain beacon configs (#48).
97
+ - Decode `SETTING_DOMAINS` using latin-1 instead of ascii (#45).
98
+
99
+ ### Fixed
100
+
101
+ - Pinned `dissect.cstruct < 4.0` for compatibility (#54).
102
+
103
+ ## [1.0.0] - 2022-10-28
104
+
105
+ ### Added
106
+
107
+ - Support for the beacon client and decrypting traffic from PCAP files (#25).
108
+ - New `beacon-artifact` CLI tool, moved from `scripts/artifact.py` (#37).
109
+ - `BeaconConfig.public_key` property (#22).
110
+ - `netbios_encode` and `netbios_decode` helper functions in `utils.py` (#23).
111
+ - PE export stamps for Cobalt Strike 4.7 and 4.7.1 (#24).
112
+ - Message shown for trial beacons (#38).
113
+ - Tests for `dissect.cobaltstrike.client` (#35).
114
+ - Specific error message for the `flow.record` ImportError (#31).
115
+ - Improved documentation and tutorials (#30, #39).
116
+
117
+ ### Fixed
118
+
119
+ - `--arch` and `--barch` arguments not being parsed (#32).
120
+ - Ignore `COMMAND_NOOP` packets (#34).
121
+
122
+ ## [0.2.2] - 2022-09-14
123
+
124
+ ### Added
125
+
126
+ - Cobalt Strike 4.7 settings and version info (#19).
127
+ - `task_*` c2profile settings introduced in Cobalt Strike 4.6 (#20).
128
+ - `pe_export_stamp` for the Cobalt Strike 4.6 DNS Beacon (#16).
129
+ - `retain_file_offset` helper in `utils.py` (#21).
130
+
131
+ ### Fixed
132
+
133
+ - Missing DNS beacon settings in c2profile output (#17, #18).
134
+
135
+ ## [0.2.1] - 2022-06-16
136
+
137
+ ### Added
138
+
139
+ - `u64`, `p64`, `u64be` and `p64be` packing aliases (#15).
140
+ - PE export timestamps for Cobalt Strike 4.6.
141
+
142
+ ## [0.2.0] - 2022-04-11
143
+
144
+ ### Added
145
+
146
+ - Support for reading from stdin in `beacon-dump` (#4).
147
+ - Process exit code for `beacon-dump` (#9).
148
+
149
+ ### Fixed
150
+
151
+ - Handling for empty or all-zero xorkey buffer in `utils.xor` (#5).
152
+ - Exception handling in the `@catch_sigpipe` decorator (#2, #7).
153
+
154
+ ## [0.1.0] - 2022-03-25
155
+
156
+ ### Added
157
+
158
+ - Initial public release of `dissect.cobaltstrike`.
159
+
160
+ [Unreleased]: https://github.com/fox-it/dissect.cobaltstrike/compare/v1.3.0...HEAD
161
+ [1.3.0]: https://github.com/fox-it/dissect.cobaltstrike/compare/v1.2.1...v1.3.0
162
+ [1.2.1]: https://github.com/fox-it/dissect.cobaltstrike/compare/v1.2.0...v1.2.1
163
+ [1.2.0]: https://github.com/fox-it/dissect.cobaltstrike/compare/v1.1.0...v1.2.0
164
+ [1.1.0]: https://github.com/fox-it/dissect.cobaltstrike/compare/v1.0.0...v1.1.0
165
+ [1.0.0]: https://github.com/fox-it/dissect.cobaltstrike/compare/v0.2.2...v1.0.0
166
+ [0.2.2]: https://github.com/fox-it/dissect.cobaltstrike/compare/v0.2.1...v0.2.2
167
+ [0.2.1]: https://github.com/fox-it/dissect.cobaltstrike/compare/v0.2.0...v0.2.1
168
+ [0.2.0]: https://github.com/fox-it/dissect.cobaltstrike/compare/v0.1.0...v0.2.0
169
+ [0.1.0]: https://github.com/fox-it/dissect.cobaltstrike/releases/tag/v0.1.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: dissect.cobaltstrike
3
- Version: 1.2.2.dev4
3
+ Version: 1.3.0
4
4
  Summary: a Python library for dissecting Cobalt Strike related data
5
5
  Project-URL: Homepage, https://github.com/fox-it/dissect.cobaltstrike
6
6
  Project-URL: Documentation, https://dissect-cobaltstrike.readthedocs.io/
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.2.dev4'
22
- __version_tuple__ = version_tuple = (1, 2, 2, 'dev4')
21
+ __version__ = version = '1.3.0'
22
+ __version_tuple__ = version_tuple = (1, 3, 0)
23
23
 
24
24
  __commit_id__ = commit_id = None