|
| 1 | +[tool.poetry] |
| 2 | +name = "CAPEv2" |
| 3 | +version = "0.1.0" |
| 4 | +description = "CAPE: Malware Configuration And Payload Extraction" |
| 5 | +authors = [ "Kevin O'Reilly <[email protected]>", "doomedraven <[email protected]>"] |
| 6 | +license = "MIT" |
| 7 | +package-mode = false |
| 8 | + |
| 9 | +[tool.poetry.dependencies] |
| 10 | +python = ">=3.10, <4.0" |
| 11 | +alembic = "1.9.4" |
| 12 | +gevent = "24.2.1" |
| 13 | +greenlet = "3.0.3" |
| 14 | +Pebble = "5.1.0" |
| 15 | +# pymisp = "2.4.144" |
| 16 | +cryptography = ">=44.0.1" |
| 17 | +requests = {version = "2.32.4", extras = ["security", "socks"]} |
| 18 | +# pyOpenSSL = "24.0.0" |
| 19 | +pefile = "*" |
| 20 | +tldextract = ">=5.1.2" |
| 21 | +oletools = "0.60.2" |
| 22 | +olefile = "0.47" |
| 23 | +# mixbox = "1.0.5" |
| 24 | +capstone = "5.0.5" |
| 25 | +pycryptodomex = ">=3.20.0" |
| 26 | +# xmltodict = "0.12.0" |
| 27 | +requests-file = ">=1.5.1" |
| 28 | +orjson = ">=3.9.15" |
| 29 | +# maec = "4.1.0.17" |
| 30 | +# regex = "2021.7.6" |
| 31 | +SFlock2 = {version = ">=0.3.76", extras = ["shellcode","linux"]} |
| 32 | +# volatility3 = "2.11.0" |
| 33 | +# XLMMacroDeobfuscator = "0.2.7" |
| 34 | +pyzipper = "0.3.6" |
| 35 | +flare-capa = "9.1.0" |
| 36 | + |
| 37 | +Cython = "3.0.11" |
| 38 | +Django = ">=4.2.18" |
| 39 | +SQLAlchemy = "2.0.41" |
| 40 | +SQLAlchemy-Utils = "0.41.1" |
| 41 | +Jinja2 = "^3.1.6" |
| 42 | +chardet = "4.0.0" |
| 43 | +pygal = "2.4.0" |
| 44 | +dpkt = "1.9.6" |
| 45 | +dnspython = "2.7.0" |
| 46 | +pytz = "2021.1" |
| 47 | +maxminddb = "2.6.3" |
| 48 | +Pillow = ">=8.2.0" |
| 49 | +python-whois = "0.9.5" |
| 50 | +bs4 = "0.0.1" |
| 51 | +pydeep2 = "0.5.1" |
| 52 | +django-recaptcha = "4.0.0" # https://pypi.org/project/django-recaptcha/ |
| 53 | +django-crispy-forms = "2.3" |
| 54 | +crispy-bootstrap4 = "2024.10" |
| 55 | +django-settings-export = "1.2.1" |
| 56 | +django-csp = "3.8" |
| 57 | +django-extensions = "3.2.3" |
| 58 | +django-ratelimit = "4.1.0" |
| 59 | +# qrcode = "7.2" |
| 60 | +python-tlsh = "4.5.0" |
| 61 | +djangorestframework = "3.15.2" |
| 62 | +yara-python = "4.5.1" |
| 63 | +pymongo = ">=4.0.1" |
| 64 | +# ImageHash = "4.3.1" |
| 65 | +LnkParse3 = "1.5.0" |
| 66 | +cachetools = "^5.5.1" |
| 67 | +django-allauth = "65.3.1" # https://django-allauth.readthedocs.io/en/latest/configuration.html |
| 68 | +# socks5man = {git = "https://github.com/CAPESandbox/socks5man.git", rev = "7b335d027297b67abdf28f38cc7d5d42c9d810b5"} |
| 69 | +# httpreplay = {git = "https://github.com/CAPESandbox/httpreplay.git", rev = "0d5a5b3144ab15f93189b83ca8188afde43db134"} |
| 70 | +# bingraph = {git = "https://github.com/CAPESandbox/binGraph.git", rev = "552d1210ac6770f8b202d0d1fc4610cc14d878ec"} |
| 71 | +psycopg2-binary = "^2.9.10" |
| 72 | +ruff = ">=0.7.2" |
| 73 | +paramiko = "3.5.0" |
| 74 | +psutil = "6.1.1" |
| 75 | +peepdf-3 = "5.0.0" |
| 76 | +pyre2-updated = ">=0.3.8" |
| 77 | +Werkzeug = "3.1.3" |
| 78 | +packaging = "24.2" |
| 79 | +# command line config manipulation |
| 80 | +crudini = "0.9.5" |
| 81 | +python-dateutil = "2.9.0.post0" |
| 82 | + |
| 83 | +# guac-session |
| 84 | +pyguacamole = "^0.11" |
| 85 | +uvicorn = {extras = ["standard"], version = "^0.18.2"} |
| 86 | +gunicorn = "^23.0.0" |
| 87 | +channels = "^3.0.5" |
| 88 | +setproctitle = "1.3.2" |
| 89 | + |
| 90 | +CAPE-parsers = ">=0.1.36" |
| 91 | +maco = "1.1.8" |
| 92 | + |
| 93 | +[tool.poetry.extras] |
| 94 | +maco = ["maco"] |
| 95 | + |
| 96 | +[tool.poetry.group.dev.dependencies] |
| 97 | +black = "^24.3.0" |
| 98 | +isort = "^5.10.1" |
| 99 | +mypy = "1.14.1" |
| 100 | +pytest = "7.2.2" |
| 101 | +pytest-pretty = "1.1.0" |
| 102 | +pytest-cov = "3.0.0" |
| 103 | +pytest-mock = "3.7.0" |
| 104 | +pytest-django = "4.5.2" |
| 105 | +pytest_asyncio = "0.18.3" |
| 106 | +pytest-xdist = "3.6.1" |
| 107 | +pytest-asyncio = "0.18.3" |
| 108 | +pytest-freezer = "0.4.8" |
| 109 | +tenacity = "8.1.0" |
| 110 | +types-requests = "^2.32" |
| 111 | +httpretty = "^1.1.4" |
| 112 | +func-timeout = "^4.3.5" |
| 113 | +pre-commit = "^2.19.0" |
| 114 | + |
| 115 | +[tool.black] |
| 116 | +line-length = 132 |
| 117 | +include = "\\.py(_disabled)?$" |
| 118 | + |
| 119 | +[tool.isort] |
| 120 | +profile = "black" |
| 121 | +no_lines_before = ["FUTURE", "STDLIB"] |
| 122 | +line_length = 132 |
| 123 | +supported_extensions = ["py", "py_disabled"] |
| 124 | + |
| 125 | +[tool.flake8] |
| 126 | +max-line-length = 132 |
| 127 | +exclude = ".git,__pycache__,.cache,.venv" |
| 128 | + |
| 129 | +[tool.pytest.ini_options] |
| 130 | +django_find_project = false |
| 131 | +DJANGO_SETTINGS_MODULE = "web.settings" |
| 132 | +pythonpath = [".", "web"] |
| 133 | +testpaths = ["tests", "agent"] |
| 134 | +norecursedirs = "tests/zip_compound" |
| 135 | +asyncio_mode = "auto" |
| 136 | + |
| 137 | +[build-system] |
| 138 | +requires = ["poetry-core>=1.0.0"] |
| 139 | +build-backend = "poetry.core.masonry.api" |
| 140 | +requires-poetry = ">=2.0" |
| 141 | + |
| 142 | +[tool.ruff] |
| 143 | +line-length = 132 |
| 144 | +exclude = [ |
| 145 | + "./analyzer/linux/dbus_next", |
| 146 | +] |
| 147 | + |
| 148 | +[tool.ruff.lint] |
| 149 | +select = [ |
| 150 | + "F", # pyflakes |
| 151 | + "E", # pycodestyle errors |
| 152 | + "W", # pycodestyle warnings |
| 153 | + # "I", # isort |
| 154 | + # "N", # pep8-naming |
| 155 | + "G", # flake8-logging-format |
| 156 | +] |
| 157 | + |
| 158 | +ignore = [ |
| 159 | + "E501", # ignore due to conflict with formatter |
| 160 | + "N818", # exceptions don't need the Error suffix |
| 161 | + "E741", # allow ambiguous variable names |
| 162 | + "E402", |
| 163 | + "W605", # ToDo to fix - Invalid escape sequence |
| 164 | +] |
| 165 | + |
| 166 | +fixable = ["ALL"] |
| 167 | + |
| 168 | +[tool.ruff.lint.per-file-ignores] |
| 169 | +"stubs/*" = [ |
| 170 | + "N", # naming conventions don't matter in stubs |
| 171 | + "F403", # star imports are okay in stubs |
| 172 | + "F405", # star imports are okay in stubs |
| 173 | +] |
| 174 | + |
| 175 | +[tool.ruff.format] |
| 176 | +quote-style = "double" |
| 177 | +indent-style = "space" |
| 178 | +skip-magic-trailing-comma = false |
| 179 | +line-ending = "auto" |
| 180 | + |
| 181 | +[tool.ruff.lint.isort] |
| 182 | +known-first-party = ["libqtile", "test"] |
| 183 | +default-section = "third-party" |
| 184 | + |
| 185 | +[tool.mypy] |
| 186 | +warn_unused_configs = true |
| 187 | +files = [ |
| 188 | + "agent/**/*.py", |
| 189 | +] |
0 commit comments