Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
ed1bf4d
Simple REPL
MatrixEditor Feb 15, 2026
9c9d262
Merge branch 'master' into feat/repl-ui
MatrixEditor Mar 9, 2026
122123b
chore: Split up repl into separate files
MatrixEditor Mar 13, 2026
6deb11b
Merge branch 'master' into feat/repl-ui
MatrixEditor Mar 13, 2026
df370f6
feat: add protocol-manager
MatrixEditor Mar 14, 2026
8923421
Merge branch 'master' into feat/repl-ui
MatrixEditor Mar 14, 2026
6e544e9
feat: class-style protocol modules
MatrixEditor Mar 14, 2026
d293bd1
feat: add async server thread to smtp and quic protocols
MatrixEditor Mar 14, 2026
0cf0e8e
refactor: organize imports
MatrixEditor Mar 14, 2026
c3e8d30
feat(repl): add basic actions
MatrixEditor Mar 14, 2026
3a2494a
chore:(standalone): always center the logo
MatrixEditor Mar 14, 2026
6f4385f
fix(repl): always handle unexpected errors
MatrixEditor Mar 14, 2026
0bd638d
feat(repl): add database commands
MatrixEditor Mar 14, 2026
760e219
feat(repl): add minimalistic protocol command
MatrixEditor Mar 14, 2026
dea48ac
feat(repl): add the ability to start services
MatrixEditor Mar 14, 2026
567e341
docs(loader): add docstrings to BaseProtocolModule
MatrixEditor Mar 15, 2026
5d7afc2
refactor(session): Move set_interface into SessionConfig
MatrixEditor Mar 15, 2026
97c64ef
feat(servers): add getters for current address and port
MatrixEditor Mar 15, 2026
3c9a6d6
refactor: update QUIC and SMTP to reflect BaseServerThread changes
MatrixEditor Mar 15, 2026
1b5dfaf
docs(repl): add docstrings to ReplAction
MatrixEditor Mar 15, 2026
cf44ed0
feat(repl): add inline completion support
MatrixEditor Mar 15, 2026
34fc40a
docs(repl): add docstrings to help command
MatrixEditor Mar 15, 2026
0823d73
feat(repl): add completion support to 'db' command
MatrixEditor Mar 15, 2026
d99b71b
feat(repl): rework 'proto' command
MatrixEditor Mar 15, 2026
2ee8870
feat(repl): add 'env', 'ip' and 'config' commands
MatrixEditor Mar 15, 2026
ec6be40
docs: update CLI reference and add TUI docs
MatrixEditor Mar 15, 2026
3befa03
refactor: fix code-style issues
MatrixEditor Mar 15, 2026
0c35f7c
docs: update version references
MatrixEditor Mar 15, 2026
2693d4a
docs: Add TUI overview and convert logo to jpg
MatrixEditor Mar 15, 2026
6784383
docs: update demo video
MatrixEditor Mar 15, 2026
9caada7
chore: bump version to 1.0.0.dev21
MatrixEditor Mar 15, 2026
c8b7dd3
ci: update publish workflow
MatrixEditor Mar 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 25 additions & 24 deletions .github/workflows/wheel-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,30 +34,31 @@ jobs:
fetch-depth: 0
persist-credentials: false

- name: Verify successful CI runs for release commit
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ github.event.release.tag_name }}
REPOSITORY: ${{ github.repository }}
run: |
set -euo pipefail

release_sha="$(git rev-list -n 1 "refs/tags/${RELEASE_TAG}")"
echo "Checking CI status for ${RELEASE_TAG} at ${release_sha}"

for workflow in ci-lint.yml ci-test.yml; do
conclusion="$(
gh api \
"repos/${REPOSITORY}/actions/workflows/${workflow}/runs?head_sha=${release_sha}&status=completed&event=push&per_page=1" \
--jq '.workflow_runs[0].conclusion // ""'
)"

if [[ "${conclusion}" != "success" ]]; then
echo "Required workflow ${workflow} is not green for ${release_sha}."
echo "Latest completed push-run conclusion: ${conclusion:-<none>}"
exit 1
fi
done
# REVISIT: needs to be verified
# - name: Verify successful CI runs for release commit
# env:
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# RELEASE_TAG: ${{ github.event.release.tag_name }}
# REPOSITORY: ${{ github.repository }}
# run: |
# set -euo pipefail

# release_sha="$(git rev-list -n 1 "refs/tags/${RELEASE_TAG}")"
# echo "Checking CI status for ${RELEASE_TAG} at ${release_sha}"

# for workflow in ci-lint.yml ci-test.yml; do
# conclusion="$(
# gh api \
# "repos/${REPOSITORY}/actions/workflows/${workflow}/runs?head_sha=${release_sha}&status=completed&event=push&per_page=1" \
# --jq '.workflow_runs[0].conclusion // ""'
# )"

# if [[ "${conclusion}" != "success" ]]; then
# echo "Required workflow ${workflow} is not green for ${release_sha}."
# echo "Latest completed push-run conclusion: ${conclusion:-<none>}"
# exit 1
# fi
# done

build:
name: Build distributions
Expand Down
30 changes: 16 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ on the [Documentation](https://matrixeditor.github.io/dementor/) page.
- Near-complete protocol parity with Responder (see [Docs - Compatibility](https://matrixeditor.github.io/dementor/compat.html))
- Easy integration of new protocols via the extension system
- A lot of new protocols (e.g. IPP, MySQL, X11, ...)
- Interactive TUI which supports modifying the runtime configuration of services

## Installation

Expand Down Expand Up @@ -38,20 +39,21 @@ Let's take a look.
```
Usage: Dementor [OPTIONS]

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --interface -I NAME Network interface to use (required for poisoning) │
│ --analyze -A Only analyze traffic, don't respond to requests │
│ --config -c PATH Path to a configuration file (otherwise standard path is used) │
│ --option -O KEY=VALUE Add an extra option to the global configuration file. │
│ --yes,--yolo -y Do not ask before starting attack mode. │
│ --target -t NAME[,...] Target host(s) to attack │
│ --ignore -i NAME[,...] Target host(s) to ignore │
│ --quiet -q Don't print banner at startup │
│ --version Show Dementor's version number │
│ --ts Log timestamps to terminal output too │
│ --paths Displays the default configuration paths │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────╮
│ --interface -I NAME Network interface to use (required for poisoning) │
│ --analyze -A Only analyze traffic, don't respond to requests │
│ --config -c PATH Path to a configuration file (otherwise standard path is used) │
│ --option -O KEY=VALUE Add an extra option to the global configuration file. │
│ --yes,--yolo -y Do not ask before starting attack mode. │
│ --target -t NAME[,...] Target host(s) to attack │
│ --ignore -i NAME[,...] Target host(s) to ignore │
│ --quiet -q Don't print banner at startup │
│ --version Show Dementor's version number │
│ --ts Log timestamps to the terminal too │
│ --paths Displays the default configuration paths │
│ --repl -F Starts Dementor in interactive mode supporting runtime configuration │
│ --help Show this message and exit. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────╯
```


Expand Down
2 changes: 1 addition & 1 deletion dementor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,5 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

__version__ = "1.0.0.dev20"
__version__ = "1.0.0.dev21"
__author__ = "MatrixEditor"
21 changes: 21 additions & 0 deletions dementor/assets/Dementor.toml
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,27 @@ Key = "default.key"
# TargetSMBPort = 445
# TargetSMBHost =

# Enable automatic generation of self-signed certificates if none are found.
SelfSigned = true

# Common Name (CN) for the self-signed certificate.
CertCommonName = "dementor.local"

# Organization name for the self-signed certificate.
CertOrganization = "Dementor"

# Country code for the self-signed certificate.
CertCountry = "US"

# State/Province for the self-signed certificate.
CertState = "CA"

# Locality/City for the self-signed certificate.
CertLocality = "San Francisco"

# Validity period in days for the self-signed certificate.
CertValidityDays = 365


# =============================================================================
# Proxy
Expand Down
Loading