use env_logger;
use log::LevelFilter;
use pmsf::{
FrameworkConfig,
StageContext,
set_telemetry_callback,
TelemetryEvent,
run_persistence_chain,
run_execution_chain,
run_c2_chain,
run_anti_analysis_chain,
};
struct ConsoleTelemetry;
impl TelemetryEvent for ConsoleTelemetry {
fn on_event(&self, stage: &str, technique: &str, status: &str) {
println!("[Telemetry] {}::{}, status={}", stage, technique, status);
}
}
fn main() {
env_logger::builder().filter_level(LevelFilter::Info).init();
set_telemetry_callback(Box::new(ConsoleTelemetry));
let config = FrameworkConfig::from_file("config.toml");
println!("Loaded configuration: {:?}", config);
let ctx = StageContext { payload: None, metadata: Default::default() };
println!("--> Running persistence chain...");
let _ = run_persistence_chain(&["RegistryRunKeys", "ScheduledTasks"]);
println!("--> Running execution chain...");
let _ = run_execution_chain(&["ClassicProcessInjection", "MappingInjection"]);
println!("--> Running C2 chain...");
let _ = run_c2_chain(&["HTTPSCommunication", "DNSTunneling"]);
println!("--> Running anti-analysis chain...");
let _ = run_anti_analysis_chain(&["AntiDebugging", "VMDetection"]);
println!("Demo completed successfully.");
}