1use env_logger;
12use log::LevelFilter;
13use pmsf::{
14 FrameworkConfig,
15 StageContext,
16 set_telemetry_callback,
17 TelemetryEvent,
18 run_persistence_chain,
19 run_execution_chain,
20 run_c2_chain,
21 run_anti_analysis_chain,
22};
23
24struct ConsoleTelemetry;
26
27impl TelemetryEvent for ConsoleTelemetry {
28 fn on_event(&self, stage: &str, technique: &str, status: &str) {
29 println!("[Telemetry] {}::{}, status={}", stage, technique, status);
30 }
31}
32
33fn main() {
34 env_logger::builder().filter_level(LevelFilter::Info).init();
36
37 set_telemetry_callback(Box::new(ConsoleTelemetry));
39
40 let config = FrameworkConfig::from_file("config.toml");
42 println!("Loaded configuration: {:?}", config);
43
44 let ctx = StageContext { payload: None, metadata: Default::default() };
46
47 println!("--> Running persistence chain...");
49 let _ = run_persistence_chain(&["RegistryRunKeys", "ScheduledTasks"]);
50
51 println!("--> Running execution chain...");
53 let _ = run_execution_chain(&["ClassicProcessInjection", "MappingInjection"]);
54
55 println!("--> Running C2 chain...");
57 let _ = run_c2_chain(&["HTTPSCommunication", "DNSTunneling"]);
58
59 println!("--> Running anti-analysis chain...");
61 let _ = run_anti_analysis_chain(&["AntiDebugging", "VMDetection"]);
62
63 println!("Demo completed successfully.");
64}