From 998b1bf8bfee13975fae42920aaf32da4e8ce43b Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Sat, 9 Nov 2024 01:10:08 +0100 Subject: [PATCH 01/13] =?UTF-8?q?build:=20=F0=9F=93=A6=20Update=20and=20ad?= =?UTF-8?q?d=20toml=20and=20serde?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 18 ++++++++++-------- Cargo.toml | 2 ++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8927443..2126cf6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "anstream" -version = "0.6.17" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -95,9 +95,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.1.34" +version = "1.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b9470d453346108f93a59222a9a1a5724db32d0a4727b7ab7ace4b4d822dc9" +checksum = "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" dependencies = [ "shlex", ] @@ -203,9 +203,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" [[package]] name = "heck" @@ -231,9 +231,9 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "libc" -version = "0.2.161" +version = "0.2.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" [[package]] name = "malware-traces-generator" @@ -244,6 +244,8 @@ dependencies = [ "embed-resource", "rand", "regex_generate", + "serde", + "toml", "windows", ] diff --git a/Cargo.toml b/Cargo.toml index 9adc939..f12f113 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,8 @@ base64 = { version = "0.22.1" } clap = { version = "4.5.20", features = ["derive"] } rand = "0.8.5" regex_generate = "0.2.3" +toml = "0.8.19" +serde = { version = "1.0.214", features = ["derive"] } [build-dependencies] embed-resource = "2.5.0" From af304a474785b6e8af6188aba4cb4386425fa02e Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Sat, 9 Nov 2024 01:32:28 +0100 Subject: [PATCH 02/13] =?UTF-8?q?feat:=20=E2=9C=A8=20Add=20generator=20com?= =?UTF-8?q?mand=20with=20clap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cli.rs | 3 ++- src/generator.rs | 18 ++++++++++++++++++ src/main.rs | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/generator.rs diff --git a/src/cli.rs b/src/cli.rs index 809dd46..0b80eb0 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::traces::Traces; +use crate::{generator::Generator, traces::Traces}; use clap::{Parser, Subcommand}; #[derive(Debug, Parser)] @@ -16,4 +16,5 @@ pub struct Arguments { #[derive(Debug, Subcommand)] pub enum Commands { Traces(Traces), + Generator(Generator), } diff --git a/src/generator.rs b/src/generator.rs new file mode 100644 index 0000000..0ec30a1 --- /dev/null +++ b/src/generator.rs @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2023 The MalwareTracesGenerator development team +// +// SPDX-License-Identifier: GPL-3.0-or-later + +use clap::Parser; +use std::{error::Error, path::PathBuf}; + +#[derive(Debug, Parser)] +pub struct Generator { + #[clap(required = true, help = "Path to the configuration file")] + path: PathBuf, +} + +impl Generator { + pub fn generate(&self) -> Result<(), Box> { + Ok(()) + } +} diff --git a/src/main.rs b/src/main.rs index 17a0eae..e621d6d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later mod cli; +mod generator; mod traces; mod windows; @@ -14,6 +15,7 @@ use traces::Runnable; fn main() -> Result<(), Box> { match Arguments::parse().command { Commands::Traces(action) => action.run()?, + Commands::Generator(generator) => generator.generate()?, }; Ok(()) From 7f5a5af3a325500a844cccf12c7959983ebf2409 Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Sun, 10 Nov 2024 00:35:40 +0100 Subject: [PATCH 03/13] =?UTF-8?q?feat:=20=E2=9C=A8=20Handle=20file=20path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/generator.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/generator.rs b/src/generator.rs index 0ec30a1..893ec35 100644 --- a/src/generator.rs +++ b/src/generator.rs @@ -3,7 +3,16 @@ // SPDX-License-Identifier: GPL-3.0-or-later use clap::Parser; -use std::{error::Error, path::PathBuf}; +use serde::Deserialize; +use std::{error::Error, fs::read_to_string, path::PathBuf}; +use toml::from_str; + +#[derive(Debug, Deserialize)] +struct Configuration { + name: String, + version: String, + traces: Vec, +} #[derive(Debug, Parser)] pub struct Generator { @@ -13,6 +22,10 @@ pub struct Generator { impl Generator { pub fn generate(&self) -> Result<(), Box> { + if !self.path.try_exists()? || !self.path.is_file() { + return Ok(()); + } + Ok(()) } } From 8370c0598104f0e5c634c72a9d07bf360b24f81b Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Sun, 10 Nov 2024 00:41:33 +0100 Subject: [PATCH 04/13] =?UTF-8?q?feat:=20=E2=9C=A8=20Add=20Deserialize=20m?= =?UTF-8?q?acro=20on=20our=20commands.=20For=20now,=20we=20are=20not=20sur?= =?UTF-8?q?e=20for=20the=20use=20of=20untagged=20enums=20or=20not?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/traces.rs | 7 +++++-- src/traces/drivers.rs | 7 +++++-- src/traces/drivers/byovd.rs | 3 ++- src/traces/processes.rs | 7 +++++-- src/traces/processes/spoofing.rs | 3 ++- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/traces.rs b/src/traces.rs index 348620b..7ce1f38 100644 --- a/src/traces.rs +++ b/src/traces.rs @@ -4,18 +4,21 @@ use crate::traces::{drivers::Drivers, processes::Processes}; use clap::{Args, Subcommand}; +use serde::Deserialize; use std::error::Error; pub mod drivers; pub mod processes; -#[derive(Debug, Args)] +#[derive(Debug, Args, Deserialize)] pub struct Traces { #[clap(subcommand)] + #[serde(flatten)] pub command: Commands, } -#[derive(Debug, Subcommand)] +#[derive(Debug, Subcommand, Deserialize)] +#[serde(rename_all = "snake_case", untagged)] pub enum Commands { Drivers(Drivers), Processes(Processes), diff --git a/src/traces/drivers.rs b/src/traces/drivers.rs index 64f5827..68f5b6c 100644 --- a/src/traces/drivers.rs +++ b/src/traces/drivers.rs @@ -4,17 +4,20 @@ use crate::traces::{drivers::byovd::Byovd, Runnable}; use clap::{Args, Subcommand}; +use serde::Deserialize; use std::error::Error; pub mod byovd; -#[derive(Debug, Args)] +#[derive(Debug, Args, Deserialize)] pub struct Drivers { #[clap(subcommand)] + #[serde(flatten)] pub command: Commands, } -#[derive(Debug, Subcommand)] +#[derive(Debug, Subcommand, Deserialize)] +#[serde(rename_all = "snake_case")] pub enum Commands { Byovd(Byovd), } diff --git a/src/traces/drivers/byovd.rs b/src/traces/drivers/byovd.rs index b3ca762..a4a0476 100644 --- a/src/traces/drivers/byovd.rs +++ b/src/traces/drivers/byovd.rs @@ -4,6 +4,7 @@ use crate::{traces::Runnable, windows::users::is_administrator}; use clap::Parser; +use serde::Deserialize; use std::{error::Error, path::PathBuf}; use windows::{ core::{Owned, HSTRING, PCWSTR}, @@ -17,7 +18,7 @@ use windows::{ }, }; -#[derive(Debug, Parser)] +#[derive(Debug, Parser, Deserialize)] pub struct Byovd { #[clap(required = true, help = "Name of the service")] service_name: String, diff --git a/src/traces/processes.rs b/src/traces/processes.rs index 97e2f38..47890ae 100644 --- a/src/traces/processes.rs +++ b/src/traces/processes.rs @@ -4,17 +4,20 @@ use crate::traces::{processes::spoofing::Spoofing, Runnable}; use clap::{Args, Subcommand}; +use serde::Deserialize; use std::error::Error; pub mod spoofing; -#[derive(Debug, Args)] +#[derive(Debug, Args, Deserialize)] pub struct Processes { #[clap(subcommand)] + #[serde(flatten)] pub command: Commands, } -#[derive(Debug, Subcommand)] +#[derive(Debug, Subcommand, Deserialize)] +#[serde(rename_all = "snake_case")] pub enum Commands { Spoofing(Spoofing), } diff --git a/src/traces/processes/spoofing.rs b/src/traces/processes/spoofing.rs index d0d622b..88fe7b2 100644 --- a/src/traces/processes/spoofing.rs +++ b/src/traces/processes/spoofing.rs @@ -4,6 +4,7 @@ use crate::{traces::Runnable, windows::processes::get_pid}; use clap::Parser; +use serde::Deserialize; use std::{ error::Error, ffi::OsString, iter::once, mem::size_of, os::windows::ffi::OsStrExt, path::PathBuf, @@ -21,7 +22,7 @@ use windows::{ }, }; -#[derive(Debug, Parser)] +#[derive(Debug, Parser, Deserialize)] pub struct Spoofing { #[clap(required = true, help = "Path to the executable")] executable: PathBuf, From 0a76d6ce4316ef498e3d4f9f77f9105e077e80c3 Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Sun, 10 Nov 2024 00:49:01 +0100 Subject: [PATCH 05/13] =?UTF-8?q?refactor:=20=F0=9F=94=A8=20Remove=20usele?= =?UTF-8?q?ss=20Debug=20derive?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cli.rs | 4 ++-- src/generator.rs | 6 +++--- src/traces.rs | 4 ++-- src/traces/drivers.rs | 4 ++-- src/traces/drivers/byovd.rs | 2 +- src/traces/processes.rs | 4 ++-- src/traces/processes/spoofing.rs | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 0b80eb0..fa6cafe 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -5,7 +5,7 @@ use crate::{generator::Generator, traces::Traces}; use clap::{Parser, Subcommand}; -#[derive(Debug, Parser)] +#[derive(Parser)] #[clap(author, version)] #[clap(arg_required_else_help = true)] pub struct Arguments { @@ -13,7 +13,7 @@ pub struct Arguments { pub command: Commands, } -#[derive(Debug, Subcommand)] +#[derive(Subcommand)] pub enum Commands { Traces(Traces), Generator(Generator), diff --git a/src/generator.rs b/src/generator.rs index 893ec35..7ddd41e 100644 --- a/src/generator.rs +++ b/src/generator.rs @@ -7,14 +7,14 @@ use serde::Deserialize; use std::{error::Error, fs::read_to_string, path::PathBuf}; use toml::from_str; -#[derive(Debug, Deserialize)] -struct Configuration { +#[derive(Deserialize)] +struct TracesData { name: String, version: String, traces: Vec, } -#[derive(Debug, Parser)] +#[derive(Parser)] pub struct Generator { #[clap(required = true, help = "Path to the configuration file")] path: PathBuf, diff --git a/src/traces.rs b/src/traces.rs index 7ce1f38..db5215a 100644 --- a/src/traces.rs +++ b/src/traces.rs @@ -10,14 +10,14 @@ use std::error::Error; pub mod drivers; pub mod processes; -#[derive(Debug, Args, Deserialize)] +#[derive(Args, Deserialize)] pub struct Traces { #[clap(subcommand)] #[serde(flatten)] pub command: Commands, } -#[derive(Debug, Subcommand, Deserialize)] +#[derive(Subcommand, Deserialize)] #[serde(rename_all = "snake_case", untagged)] pub enum Commands { Drivers(Drivers), diff --git a/src/traces/drivers.rs b/src/traces/drivers.rs index 68f5b6c..e0c21c8 100644 --- a/src/traces/drivers.rs +++ b/src/traces/drivers.rs @@ -9,14 +9,14 @@ use std::error::Error; pub mod byovd; -#[derive(Debug, Args, Deserialize)] +#[derive(Args, Deserialize)] pub struct Drivers { #[clap(subcommand)] #[serde(flatten)] pub command: Commands, } -#[derive(Debug, Subcommand, Deserialize)] +#[derive(Subcommand, Deserialize)] #[serde(rename_all = "snake_case")] pub enum Commands { Byovd(Byovd), diff --git a/src/traces/drivers/byovd.rs b/src/traces/drivers/byovd.rs index a4a0476..a598759 100644 --- a/src/traces/drivers/byovd.rs +++ b/src/traces/drivers/byovd.rs @@ -18,7 +18,7 @@ use windows::{ }, }; -#[derive(Debug, Parser, Deserialize)] +#[derive(Parser, Deserialize)] pub struct Byovd { #[clap(required = true, help = "Name of the service")] service_name: String, diff --git a/src/traces/processes.rs b/src/traces/processes.rs index 47890ae..539de9b 100644 --- a/src/traces/processes.rs +++ b/src/traces/processes.rs @@ -9,14 +9,14 @@ use std::error::Error; pub mod spoofing; -#[derive(Debug, Args, Deserialize)] +#[derive(Args, Deserialize)] pub struct Processes { #[clap(subcommand)] #[serde(flatten)] pub command: Commands, } -#[derive(Debug, Subcommand, Deserialize)] +#[derive(Subcommand, Deserialize)] #[serde(rename_all = "snake_case")] pub enum Commands { Spoofing(Spoofing), diff --git a/src/traces/processes/spoofing.rs b/src/traces/processes/spoofing.rs index 88fe7b2..da4a3c9 100644 --- a/src/traces/processes/spoofing.rs +++ b/src/traces/processes/spoofing.rs @@ -22,7 +22,7 @@ use windows::{ }, }; -#[derive(Debug, Parser, Deserialize)] +#[derive(Parser, Deserialize)] pub struct Spoofing { #[clap(required = true, help = "Path to the executable")] executable: PathBuf, From ecfde068a627d65f2870744d8d0b05af3428e151 Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Sun, 10 Nov 2024 00:50:46 +0100 Subject: [PATCH 06/13] =?UTF-8?q?feat:=20=E2=9C=A8=20Run=20the=20specified?= =?UTF-8?q?=20traces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/generator.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/generator.rs b/src/generator.rs index 7ddd41e..56e5dab 100644 --- a/src/generator.rs +++ b/src/generator.rs @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later +use crate::traces::{Runnable, Traces}; use clap::Parser; use serde::Deserialize; use std::{error::Error, fs::read_to_string, path::PathBuf}; @@ -26,6 +27,12 @@ impl Generator { return Ok(()); } + let data: TracesData = from_str(read_to_string(self.path.clone())?.as_str())?; + + for trace in data.traces { + let _ = trace.run()?; + } + Ok(()) } } From b7be769048a81cec612bdf62377aff67d657d887 Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Sun, 10 Nov 2024 01:03:18 +0100 Subject: [PATCH 07/13] =?UTF-8?q?refactor:=20=F0=9F=94=A8=20Move=20every?= =?UTF-8?q?=20commands=20in=20a=20commands=20folder=20to=20reduce=20the=20?= =?UTF-8?q?pollution=20in=20the=20src=20directory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cli.rs | 2 +- src/commands.rs | 6 ++++++ src/{ => commands}/generator.rs | 2 +- src/{ => commands}/traces.rs | 2 +- src/{ => commands}/traces/drivers.rs | 2 +- src/{ => commands}/traces/drivers/byovd.rs | 2 +- src/{ => commands}/traces/processes.rs | 2 +- src/{ => commands}/traces/processes/spoofing.rs | 2 +- src/main.rs | 5 ++--- 9 files changed, 15 insertions(+), 10 deletions(-) create mode 100644 src/commands.rs rename src/{ => commands}/generator.rs (94%) rename src/{ => commands}/traces.rs (92%) rename src/{ => commands}/traces/drivers.rs (91%) rename src/{ => commands}/traces/drivers/byovd.rs (96%) rename src/{ => commands}/traces/processes.rs (90%) rename src/{ => commands}/traces/processes/spoofing.rs (97%) diff --git a/src/cli.rs b/src/cli.rs index fa6cafe..1ba13ef 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::{generator::Generator, traces::Traces}; +use crate::commands::{generator::Generator, traces::Traces}; use clap::{Parser, Subcommand}; #[derive(Parser)] diff --git a/src/commands.rs b/src/commands.rs new file mode 100644 index 0000000..bc54c38 --- /dev/null +++ b/src/commands.rs @@ -0,0 +1,6 @@ +// SPDX-FileCopyrightText: 2023 The MalwareTracesGenerator development team +// +// SPDX-License-Identifier: GPL-3.0-or-later + +pub mod generator; +pub mod traces; diff --git a/src/generator.rs b/src/commands/generator.rs similarity index 94% rename from src/generator.rs rename to src/commands/generator.rs index 56e5dab..9488efa 100644 --- a/src/generator.rs +++ b/src/commands/generator.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::traces::{Runnable, Traces}; +use crate::commands::traces::{Runnable, Traces}; use clap::Parser; use serde::Deserialize; use std::{error::Error, fs::read_to_string, path::PathBuf}; diff --git a/src/traces.rs b/src/commands/traces.rs similarity index 92% rename from src/traces.rs rename to src/commands/traces.rs index db5215a..6364211 100644 --- a/src/traces.rs +++ b/src/commands/traces.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::traces::{drivers::Drivers, processes::Processes}; +use crate::commands::traces::{drivers::Drivers, processes::Processes}; use clap::{Args, Subcommand}; use serde::Deserialize; use std::error::Error; diff --git a/src/traces/drivers.rs b/src/commands/traces/drivers.rs similarity index 91% rename from src/traces/drivers.rs rename to src/commands/traces/drivers.rs index e0c21c8..6f7fb81 100644 --- a/src/traces/drivers.rs +++ b/src/commands/traces/drivers.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::traces::{drivers::byovd::Byovd, Runnable}; +use crate::commands::traces::{drivers::byovd::Byovd, Runnable}; use clap::{Args, Subcommand}; use serde::Deserialize; use std::error::Error; diff --git a/src/traces/drivers/byovd.rs b/src/commands/traces/drivers/byovd.rs similarity index 96% rename from src/traces/drivers/byovd.rs rename to src/commands/traces/drivers/byovd.rs index a598759..8740d72 100644 --- a/src/traces/drivers/byovd.rs +++ b/src/commands/traces/drivers/byovd.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::{traces::Runnable, windows::users::is_administrator}; +use crate::{commands::traces::Runnable, windows::users::is_administrator}; use clap::Parser; use serde::Deserialize; use std::{error::Error, path::PathBuf}; diff --git a/src/traces/processes.rs b/src/commands/traces/processes.rs similarity index 90% rename from src/traces/processes.rs rename to src/commands/traces/processes.rs index 539de9b..925bffd 100644 --- a/src/traces/processes.rs +++ b/src/commands/traces/processes.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::traces::{processes::spoofing::Spoofing, Runnable}; +use crate::commands::traces::{processes::spoofing::Spoofing, Runnable}; use clap::{Args, Subcommand}; use serde::Deserialize; use std::error::Error; diff --git a/src/traces/processes/spoofing.rs b/src/commands/traces/processes/spoofing.rs similarity index 97% rename from src/traces/processes/spoofing.rs rename to src/commands/traces/processes/spoofing.rs index da4a3c9..9f055e6 100644 --- a/src/traces/processes/spoofing.rs +++ b/src/commands/traces/processes/spoofing.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::{traces::Runnable, windows::processes::get_pid}; +use crate::{commands::traces::Runnable, windows::processes::get_pid}; use clap::Parser; use serde::Deserialize; use std::{ diff --git a/src/main.rs b/src/main.rs index e621d6d..74cdd71 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,14 +3,13 @@ // SPDX-License-Identifier: GPL-3.0-or-later mod cli; -mod generator; -mod traces; +mod commands; mod windows; use clap::Parser; use cli::{Arguments, Commands}; +use commands::traces::Runnable; use std::error::Error; -use traces::Runnable; fn main() -> Result<(), Box> { match Arguments::parse().command { From 93bb02bee67d94678e7956a12af149f875d57212 Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Sun, 10 Nov 2024 01:08:46 +0100 Subject: [PATCH 08/13] =?UTF-8?q?refactor:=20=F0=9F=94=A8=20Name=20enums?= =?UTF-8?q?=20in=20singular?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why did I put them in plural in the first place... --- src/cli.rs | 4 ++-- src/commands/traces.rs | 8 ++++---- src/commands/traces/drivers.rs | 6 +++--- src/commands/traces/processes.rs | 6 +++--- src/main.rs | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 1ba13ef..553952f 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -10,11 +10,11 @@ use clap::{Parser, Subcommand}; #[clap(arg_required_else_help = true)] pub struct Arguments { #[clap(subcommand)] - pub command: Commands, + pub command: Command, } #[derive(Subcommand)] -pub enum Commands { +pub enum Command { Traces(Traces), Generator(Generator), } diff --git a/src/commands/traces.rs b/src/commands/traces.rs index 6364211..5ce2313 100644 --- a/src/commands/traces.rs +++ b/src/commands/traces.rs @@ -14,12 +14,12 @@ pub mod processes; pub struct Traces { #[clap(subcommand)] #[serde(flatten)] - pub command: Commands, + pub command: Command, } #[derive(Subcommand, Deserialize)] #[serde(rename_all = "snake_case", untagged)] -pub enum Commands { +pub enum Command { Drivers(Drivers), Processes(Processes), } @@ -31,8 +31,8 @@ pub trait Runnable { impl Runnable for Traces { fn run(&self) -> Result<(), Box> { match &self.command { - Commands::Drivers(drivers) => drivers as &dyn Runnable, - Commands::Processes(processes) => processes, + Command::Drivers(drivers) => drivers as &dyn Runnable, + Command::Processes(processes) => processes, } .run() } diff --git a/src/commands/traces/drivers.rs b/src/commands/traces/drivers.rs index 6f7fb81..c655e64 100644 --- a/src/commands/traces/drivers.rs +++ b/src/commands/traces/drivers.rs @@ -13,19 +13,19 @@ pub mod byovd; pub struct Drivers { #[clap(subcommand)] #[serde(flatten)] - pub command: Commands, + pub command: Command, } #[derive(Subcommand, Deserialize)] #[serde(rename_all = "snake_case")] -pub enum Commands { +pub enum Command { Byovd(Byovd), } impl Runnable for Drivers { fn run(&self) -> Result<(), Box> { match &self.command { - Commands::Byovd(byovd) => byovd as &dyn Runnable, + Command::Byovd(byovd) => byovd as &dyn Runnable, } .run() } diff --git a/src/commands/traces/processes.rs b/src/commands/traces/processes.rs index 925bffd..778b299 100644 --- a/src/commands/traces/processes.rs +++ b/src/commands/traces/processes.rs @@ -13,19 +13,19 @@ pub mod spoofing; pub struct Processes { #[clap(subcommand)] #[serde(flatten)] - pub command: Commands, + pub command: Command, } #[derive(Subcommand, Deserialize)] #[serde(rename_all = "snake_case")] -pub enum Commands { +pub enum Command { Spoofing(Spoofing), } impl Runnable for Processes { fn run(&self) -> Result<(), Box> { match &self.command { - Commands::Spoofing(spoofing) => spoofing as &dyn Runnable, + Command::Spoofing(spoofing) => spoofing as &dyn Runnable, } .run() } diff --git a/src/main.rs b/src/main.rs index 74cdd71..19597b0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,14 +7,14 @@ mod commands; mod windows; use clap::Parser; -use cli::{Arguments, Commands}; +use cli::{Arguments, Command}; use commands::traces::Runnable; use std::error::Error; fn main() -> Result<(), Box> { match Arguments::parse().command { - Commands::Traces(action) => action.run()?, - Commands::Generator(generator) => generator.generate()?, + Command::Traces(action) => action.run()?, + Command::Generator(generator) => generator.generate()?, }; Ok(()) From d7fcf8584fe3fe5f9f9ac333efc314882b59b7d8 Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Sun, 10 Nov 2024 01:09:28 +0100 Subject: [PATCH 09/13] =?UTF-8?q?refactor:=20=F0=9F=94=A8=20Rename=20an=20?= =?UTF-8?q?old=20variable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 19597b0..998ccc2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,7 +13,7 @@ use std::error::Error; fn main() -> Result<(), Box> { match Arguments::parse().command { - Command::Traces(action) => action.run()?, + Command::Traces(traces) => traces.run()?, Command::Generator(generator) => generator.generate()?, }; From 36fea662fc5561d047e35e19a2987d7768d9d30a Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Mon, 11 Nov 2024 18:33:12 +0100 Subject: [PATCH 10/13] =?UTF-8?q?feat:=20=E2=9C=A8=20Rename=20generator=20?= =?UTF-8?q?to=20generate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cli.rs | 4 ++-- src/commands.rs | 2 +- src/commands/{generator.rs => generate.rs} | 6 +++--- src/main.rs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) rename src/commands/{generator.rs => generate.rs} (88%) diff --git a/src/cli.rs b/src/cli.rs index 553952f..413e907 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::commands::{generator::Generator, traces::Traces}; +use crate::commands::{generate::Generate, traces::Traces}; use clap::{Parser, Subcommand}; #[derive(Parser)] @@ -16,5 +16,5 @@ pub struct Arguments { #[derive(Subcommand)] pub enum Command { Traces(Traces), - Generator(Generator), + Generate(Generate), } diff --git a/src/commands.rs b/src/commands.rs index bc54c38..e52caa5 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -2,5 +2,5 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -pub mod generator; +pub mod generate; pub mod traces; diff --git a/src/commands/generator.rs b/src/commands/generate.rs similarity index 88% rename from src/commands/generator.rs rename to src/commands/generate.rs index 9488efa..d9197ce 100644 --- a/src/commands/generator.rs +++ b/src/commands/generate.rs @@ -16,13 +16,13 @@ struct TracesData { } #[derive(Parser)] -pub struct Generator { +pub struct Generate { #[clap(required = true, help = "Path to the configuration file")] path: PathBuf, } -impl Generator { - pub fn generate(&self) -> Result<(), Box> { +impl Generate { + pub fn generate_traces(&self) -> Result<(), Box> { if !self.path.try_exists()? || !self.path.is_file() { return Ok(()); } diff --git a/src/main.rs b/src/main.rs index 998ccc2..a6f5deb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,7 @@ use std::error::Error; fn main() -> Result<(), Box> { match Arguments::parse().command { Command::Traces(traces) => traces.run()?, - Command::Generator(generator) => generator.generate()?, + Command::Generate(generate) => generate.generate_traces()?, }; Ok(()) From 4f04df59174e7d6e2137d96d2d098affa5b3890a Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Mon, 11 Nov 2024 19:01:42 +0100 Subject: [PATCH 11/13] =?UTF-8?q?refactor:=20=F0=9F=94=A8=20Make=20every?= =?UTF-8?q?=20command=20Runnable,=20it=20simplifies=20a=20lot=20the=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cli.rs | 13 ++++++++++++- src/commands.rs | 6 ++++++ src/commands/generate.rs | 6 +++--- src/commands/traces.rs | 9 ++++----- src/commands/traces/drivers.rs | 2 +- src/commands/traces/drivers/byovd.rs | 2 +- src/commands/traces/processes.rs | 2 +- src/commands/traces/processes/spoofing.rs | 2 +- src/main.rs | 11 +++-------- 9 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 413e907..24aa452 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -2,8 +2,9 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::commands::{generate::Generate, traces::Traces}; +use crate::commands::{generate::Generate, traces::Traces, Runnable}; use clap::{Parser, Subcommand}; +use std::error::Error; #[derive(Parser)] #[clap(author, version)] @@ -18,3 +19,13 @@ pub enum Command { Traces(Traces), Generate(Generate), } + +impl Runnable for Arguments { + fn run(&self) -> Result<(), Box> { + match &self.command { + Command::Traces(traces) => traces as &dyn Runnable, + Command::Generate(generate) => generate, + } + .run() + } +} diff --git a/src/commands.rs b/src/commands.rs index e52caa5..451be06 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -2,5 +2,11 @@ // // SPDX-License-Identifier: GPL-3.0-or-later +use std::error::Error; + pub mod generate; pub mod traces; + +pub trait Runnable { + fn run(&self) -> Result<(), Box>; +} diff --git a/src/commands/generate.rs b/src/commands/generate.rs index d9197ce..217035d 100644 --- a/src/commands/generate.rs +++ b/src/commands/generate.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::commands::traces::{Runnable, Traces}; +use crate::commands::{traces::Traces, Runnable}; use clap::Parser; use serde::Deserialize; use std::{error::Error, fs::read_to_string, path::PathBuf}; @@ -21,8 +21,8 @@ pub struct Generate { path: PathBuf, } -impl Generate { - pub fn generate_traces(&self) -> Result<(), Box> { +impl Runnable for Generate { + fn run(&self) -> Result<(), Box> { if !self.path.try_exists()? || !self.path.is_file() { return Ok(()); } diff --git a/src/commands/traces.rs b/src/commands/traces.rs index 5ce2313..00450e7 100644 --- a/src/commands/traces.rs +++ b/src/commands/traces.rs @@ -2,7 +2,10 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::commands::traces::{drivers::Drivers, processes::Processes}; +use crate::commands::{ + traces::{drivers::Drivers, processes::Processes}, + Runnable, +}; use clap::{Args, Subcommand}; use serde::Deserialize; use std::error::Error; @@ -24,10 +27,6 @@ pub enum Command { Processes(Processes), } -pub trait Runnable { - fn run(&self) -> Result<(), Box>; -} - impl Runnable for Traces { fn run(&self) -> Result<(), Box> { match &self.command { diff --git a/src/commands/traces/drivers.rs b/src/commands/traces/drivers.rs index c655e64..b0b3582 100644 --- a/src/commands/traces/drivers.rs +++ b/src/commands/traces/drivers.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::commands::traces::{drivers::byovd::Byovd, Runnable}; +use crate::commands::{traces::drivers::byovd::Byovd, Runnable}; use clap::{Args, Subcommand}; use serde::Deserialize; use std::error::Error; diff --git a/src/commands/traces/drivers/byovd.rs b/src/commands/traces/drivers/byovd.rs index 8740d72..9c8552e 100644 --- a/src/commands/traces/drivers/byovd.rs +++ b/src/commands/traces/drivers/byovd.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::{commands::traces::Runnable, windows::users::is_administrator}; +use crate::{commands::Runnable, windows::users::is_administrator}; use clap::Parser; use serde::Deserialize; use std::{error::Error, path::PathBuf}; diff --git a/src/commands/traces/processes.rs b/src/commands/traces/processes.rs index 778b299..2238f5f 100644 --- a/src/commands/traces/processes.rs +++ b/src/commands/traces/processes.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::commands::traces::{processes::spoofing::Spoofing, Runnable}; +use crate::commands::{traces::processes::spoofing::Spoofing, Runnable}; use clap::{Args, Subcommand}; use serde::Deserialize; use std::error::Error; diff --git a/src/commands/traces/processes/spoofing.rs b/src/commands/traces/processes/spoofing.rs index 9f055e6..5ce0a1f 100644 --- a/src/commands/traces/processes/spoofing.rs +++ b/src/commands/traces/processes/spoofing.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use crate::{commands::traces::Runnable, windows::processes::get_pid}; +use crate::{commands::Runnable, windows::processes::get_pid}; use clap::Parser; use serde::Deserialize; use std::{ diff --git a/src/main.rs b/src/main.rs index a6f5deb..a63e0bd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,15 +7,10 @@ mod commands; mod windows; use clap::Parser; -use cli::{Arguments, Command}; -use commands::traces::Runnable; +use cli::Arguments; +use commands::Runnable; use std::error::Error; fn main() -> Result<(), Box> { - match Arguments::parse().command { - Command::Traces(traces) => traces.run()?, - Command::Generate(generate) => generate.generate_traces()?, - }; - - Ok(()) + Arguments::parse().run() } From 5bf21ea0c2afec8c9f1fedeb94939567bd0a6622 Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Mon, 11 Nov 2024 19:04:19 +0100 Subject: [PATCH 12/13] =?UTF-8?q?refactor:=20=F0=9F=94=A8=20Move=20cli=20l?= =?UTF-8?q?ogic=20to=20commands=20because=20it=20makes=20more=20senses?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cli.rs | 31 ------------------------------- src/commands.rs | 30 ++++++++++++++++++++++++++++-- src/main.rs | 4 +--- 3 files changed, 29 insertions(+), 36 deletions(-) delete mode 100644 src/cli.rs diff --git a/src/cli.rs b/src/cli.rs deleted file mode 100644 index 24aa452..0000000 --- a/src/cli.rs +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-FileCopyrightText: 2023 The MalwareTracesGenerator development team -// -// SPDX-License-Identifier: GPL-3.0-or-later - -use crate::commands::{generate::Generate, traces::Traces, Runnable}; -use clap::{Parser, Subcommand}; -use std::error::Error; - -#[derive(Parser)] -#[clap(author, version)] -#[clap(arg_required_else_help = true)] -pub struct Arguments { - #[clap(subcommand)] - pub command: Command, -} - -#[derive(Subcommand)] -pub enum Command { - Traces(Traces), - Generate(Generate), -} - -impl Runnable for Arguments { - fn run(&self) -> Result<(), Box> { - match &self.command { - Command::Traces(traces) => traces as &dyn Runnable, - Command::Generate(generate) => generate, - } - .run() - } -} diff --git a/src/commands.rs b/src/commands.rs index 451be06..8835879 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -2,11 +2,37 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use std::error::Error; - pub mod generate; pub mod traces; +use crate::commands::{generate::Generate, traces::Traces}; +use clap::{Parser, Subcommand}; +use std::error::Error; + +#[derive(Parser)] +#[clap(author, version)] +#[clap(arg_required_else_help = true)] +pub struct Arguments { + #[clap(subcommand)] + pub command: Command, +} + +#[derive(Subcommand)] +pub enum Command { + Traces(Traces), + Generate(Generate), +} + pub trait Runnable { fn run(&self) -> Result<(), Box>; } + +impl Runnable for Arguments { + fn run(&self) -> Result<(), Box> { + match &self.command { + Command::Traces(traces) => traces as &dyn Runnable, + Command::Generate(generate) => generate, + } + .run() + } +} diff --git a/src/main.rs b/src/main.rs index a63e0bd..8b41b3b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,13 +2,11 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -mod cli; mod commands; mod windows; use clap::Parser; -use cli::Arguments; -use commands::Runnable; +use commands::{Arguments, Runnable}; use std::error::Error; fn main() -> Result<(), Box> { From 89689053dd9b0c2c892eb41678f4b64fbf62e554 Mon Sep 17 00:00:00 2001 From: AntwortEinesLebens Date: Fri, 20 Dec 2024 19:14:47 +0100 Subject: [PATCH 13/13] =?UTF-8?q?feat:=20=E2=9C=A8=20Add=20fields=20we=20h?= =?UTF-8?q?ave=20agreed=20on?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/generate.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/commands/generate.rs b/src/commands/generate.rs index 217035d..d70130c 100644 --- a/src/commands/generate.rs +++ b/src/commands/generate.rs @@ -9,10 +9,23 @@ use std::{error::Error, fs::read_to_string, path::PathBuf}; use toml::from_str; #[derive(Deserialize)] -struct TracesData { +struct Configuration { + metadata: Metadata, + traces: Vec, +} + +#[derive(Deserialize)] +struct Metadata { name: String, version: String, - traces: Vec, + references: Vec, + authors: Option>, +} + +#[derive(Deserialize)] +struct Author { + name: String, + email: Option, } #[derive(Parser)] @@ -27,10 +40,10 @@ impl Runnable for Generate { return Ok(()); } - let data: TracesData = from_str(read_to_string(self.path.clone())?.as_str())?; + let configuration: Configuration = from_str(read_to_string(self.path.clone())?.as_str())?; - for trace in data.traces { - let _ = trace.run()?; + for trace in configuration.traces { + trace.run()?; } Ok(())