Skip to content

Development

Info

Portions of this project were implemented with the assistance of Microsoft Copilot (Basic) (19.2608.34011.0).

This document provides an overview of the project structure and development practices used by the framework.

Installation

For the development installation, see Installation.

Project Structure

The framework is organised into a number of top-level packages:

Package Responsibility
analysis Password analysis and report generation
auditing End-to-end workflow orchestration
cli Command-line interface entry points
common Shared utilities, constants, and helpers
cracking Hashcat integration, campaign execution, estimation, and statistics
docs Project documentation
lm LM password mapping and candidate generation
ntds NTDS, BloodHound, and password dataset processing
password-audit/
├── analysis/
├── auditing/
├── cli/
├── common/
├── cracking/
├── docs/
├── lm/
└── ntds/

Each package is intended to remain largely self-contained, with shared functionality placed in common where appropriate.

Design Philosophy

The project is designed around a simple principle: command-line modules should remain thin wrappers around reusable workflow functions. In general:

  • CLI modules are responsible for argument parsing and user interaction.
  • Workflow modules coordinate the execution of features.
  • Supporting modules implement the business logic.
  • Export and reporting modules write results to disk.
  • Shared functionality belongs in common.

This separation makes features easier to test, reuse, and maintain.

Workflow Architecture

Most user-facing functionality follows the same pattern:

CLI
 ↓
Workflow
 ↓
Business Logic
 ↓
Results / Exports

Audit

Coordinates the full password auditing workflow:

cli/audit.py
        ↓
auditing/workflow.py
        ├── ntds/workflow.py
        ├── cracking/scheduler.py
        └── analysis/workflow.py

Organise

Processes NTDS, BloodHound, and Hashcat artefacts:

cli/organise.py 
↓ 
ntds/workflow.py 
↓ 
ntds/results.py 
↓ 
ntds/exports.py

Crack

Executes Hashcat campaigns and records statistics:

cli/crack.py
        ↓
cracking/scheduler.py
        ├── cracking/phases.py
        ├── cracking/hashcat.py
        ├── cracking/history.py
        └── cracking/reporting.py

Analyse

Performs password analysis and generates reports:

cli/analyse.py
        ↓
analysis/workflow.py
        ├── analysis/parsers.py
        ├── analysis/patterns.py
        ├── analysis/results.py
        └── analysis/reports.py

LM

Processes recovered LM passwords and generates candidate datasets:

cli/lm.py
        ↓
lm/workflow.py
        ├── lm/mapping.py
        ├── lm/candidates.py
        └── ntds/exports.py

Contributing New Features

When adding new functionality, try to follow the existing architecture:

  • Implement the business logic in the appropriate package.
  • Add or extend a workflow function.
  • Expose the functionality through the CLI.
  • Document the feature and update command examples.

For example, adding a new analysis feature might involve:

analysis/ 
├── parsers.py 
├── results.py 
└── workflow.py 

cli/ 
└── analyse.py