PixelFerrite modules are currently manifest-driven. Runtime behavior is selected by module metadata and category.
Each module lives under modules/<category>/<...>/<module_name>/ and includes:
module.json(required)module.cpp(placeholder/extensibility artifact)
Example:
modules/payloads/windows/telemetry_win/
module.json
module.cpp
idnamecategorysupported_platformssupported_archauthorversionoptionssafety_level
payloadexploitauxiliaryencoderevasionnoptransportdetectionanalysislab
Each option object can define:
name(required)required(optional bool, default false)default(optional)description(optional)
Example:
{
"options": [
{
"name": "RHOSTS",
"required": true,
"description": "Comma-separated IPv4/IPv6 targets."
},
{
"name": "LPORT",
"required": false,
"default": "4444",
"description": "Simulated listener port."
}
]
}Current manifests typically use:
simulation_onlyauthorized_assessment_only
These indicate intent and policy level for safe framework behavior.
ModuleLoader scans recursively for module.json files under modules/ and constructs descriptors for:
- discovery listings (
show,search) - option validation (
check,run) - category-specific simulation routing
- Keep IDs stable and lowercase path-style (
payloads/windows/telemetry_win). - Provide meaningful options with clear descriptions.
- Declare both IPv4 and IPv6 options where relevant.
- Use conservative defaults for simulation reproducibility.
For schema and lint workflow, use:
data/schemas/module.schema.jsontools/module_lint/(scaffold placeholder for deeper checks)