diff --git a/Cargo.lock b/Cargo.lock index f8e4722..332045e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3945,85 +3945,8 @@ dependencies = [ "crossbeam-channel", "serde", "serde_json", - "unshell-obfuscate", -] - -[[package]] -name = "unshell-gui" -version = "0.1.0" -dependencies = [ - "chrono", - "eframe", - "egui", - "egui-async", - "egui_extras", - "egui_tiles", - "log", - "reqwest", - "serde", - "serde_json", - "unshell", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "unshell-manager" -version = "0.1.0" -dependencies = [ - "bincode", - "libc", - "libloading", - "rand 0.9.2", - "unshell", -] - -[[package]] -name = "unshell-obfuscate" -version = "0.1.0" -dependencies = [ - "aes", - "block-padding 0.4.2", - "cbc", - "getrandom 0.3.4", - "hex", - "hex-literal", - "proc-macro2", - "quote", - "rand 0.9.2", - "regex", - "sha2", "static_init", - "syn 2.0.114", -] - -[[package]] -name = "unshell-payload" -version = "0.0.0" -dependencies = [ - "server2", - "unshell", -] - -[[package]] -name = "unshell-server" -version = "0.1.0" -dependencies = [ - "axum", - "axum-extra", - "bcrypt", - "chrono", - "clap", - "jsonwebtoken", - "serde", - "serde_json", - "sled", - "static_init", - "tokio", - "toml", - "unshell", - "unshell-manager", + "ush-obfuscate", ] [[package]] @@ -4056,6 +3979,83 @@ dependencies = [ "serde", ] +[[package]] +name = "ush-gui" +version = "0.1.0" +dependencies = [ + "chrono", + "eframe", + "egui", + "egui-async", + "egui_extras", + "egui_tiles", + "log", + "reqwest", + "serde", + "serde_json", + "unshell", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ush-manager" +version = "0.1.0" +dependencies = [ + "bincode", + "libc", + "libloading", + "rand 0.9.2", + "unshell", +] + +[[package]] +name = "ush-obfuscate" +version = "0.1.0" +dependencies = [ + "aes", + "block-padding 0.4.2", + "cbc", + "getrandom 0.3.4", + "hex", + "hex-literal", + "proc-macro2", + "quote", + "rand 0.9.2", + "regex", + "sha2", + "static_init", + "syn 2.0.114", +] + +[[package]] +name = "ush-payload" +version = "0.0.0" +dependencies = [ + "serde_json", + "unshell", +] + +[[package]] +name = "ush-server" +version = "0.1.0" +dependencies = [ + "axum", + "axum-extra", + "bcrypt", + "chrono", + "clap", + "jsonwebtoken", + "serde", + "serde_json", + "sled", + "static_init", + "tokio", + "toml", + "unshell", +] + [[package]] name = "utf8_iter" version = "1.0.4" diff --git a/Cargo.toml b/Cargo.toml index 3dab831..a71794c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,13 +14,15 @@ include = ["LICENSE-APACHE", "LICENSE-MIT", "**/*.rs", "Cargo.toml"] [workspace] members = [ # Binaries - "unshell-gui", + "ush-gui", # UnShell Binaries - "unshell-server", "unshell-payload", + "ush-server", + "ush-payload", # Libraries - "unshell-manager", "unshell-obfuscate" + "ush-manager", + "ush-obfuscate" , "core-modules/server2"] [features] @@ -29,7 +31,7 @@ default = [] log = [] log_debug = ["log"] -obfuscate = ["unshell-obfuscate/obfuscate"] +obfuscate = ["ush-obfuscate/obfuscate"] [dependencies] chrono = { workspace = true } @@ -38,7 +40,8 @@ serde_json = { workspace = true } crossbeam-channel = "0.5.15" -unshell-obfuscate = { path = "./unshell-obfuscate" } +ush-obfuscate = { path = "./ush-obfuscate" } +static_init.workspace = true # unshell-crypt = {path = "./unshell-crypt"} [workspace.dependencies] @@ -53,7 +56,6 @@ static_init = "1.0.4" toml = "0.9.9" - [profile.release] opt-level = 2 diff --git a/build.sh b/build.sh index 919f427..9b1650a 100755 --- a/build.sh +++ b/build.sh @@ -5,9 +5,9 @@ # -Z build-std-features= \ # --profile minimize -p unshell-payload -- $@ -cargo build --profile minimize -p unshell-payload +cargo build --profile minimize -p ush-payload $@ -export BINARY=./target/minimize/unshell-payload +export BINARY=./target/minimize/ush-payload declare -a headers=( ".gnu_debuglink" # - Debug information link @@ -54,3 +54,7 @@ do strip --remove-section="$section" $BINARY echo "Removed section header $section" done + +echo "## STARTING " + +$BINARY diff --git a/src/error.rs b/src/error.rs index 6cbb8ab..e4f8fb6 100644 --- a/src/error.rs +++ b/src/error.rs @@ -7,9 +7,14 @@ pub type Result = std::result::Result; pub enum ModuleError { NoError, + // Tree errors TreeNotExist, TreeMessageError(String), + // Object errors + UnsupportedMethod, + InvalidType, + LibLoadingError(String), // LogError(log::SetLoggerError), LinkError(String), diff --git a/src/lib.rs b/src/lib.rs index d092bf4..27bdae7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,7 @@ pub mod config; mod error; pub mod logger; -pub mod manager; +pub mod tree; mod announcement; @@ -12,19 +12,5 @@ pub use error::{ModuleError, Result}; pub use announcement::Announcement; // Re-exports -// pub use unshell_crypt; -pub use unshell_obfuscate; - -// pub trait Component { -// fn name(&self) -> &'static str; -// // fn start_runtime(&self, manager: Arc>) -> Option>; - -// fn get_interface(&self) -> Box; -// fn clone_box(&self) -> Box; -// } - -// impl Clone for Box { -// fn clone(&self) -> Box { -// self.clone_box() -// } -// } +pub use serde_json::{Value, json}; +pub use ush_obfuscate as obfuscate; diff --git a/src/logger/macros.rs b/src/logger/macros.rs index 65d71e8..ce01c69 100644 --- a/src/logger/macros.rs +++ b/src/logger/macros.rs @@ -1,15 +1,14 @@ -#[cfg(feature = "log_debug")] #[macro_export] -macro_rules! debug { - ($fmt:tt) => {{ - use $crate::unshell_obfuscate; - let log_result = unshell_obfuscate::format_obs!($fmt); +macro_rules! log { + ($level:expr, $fmt:tt) => {{ + use $crate::obfuscate; + let log_result = obfuscate::format_obs!($fmt); $crate::logger::add_record( - $crate::logger::LogLevel::Debug, + $level, #[cfg(feature = "log_debug")] - Some(String::from(unshell_obfuscate::file_symbol!())), + Some(String::from(obfuscate::file_symbol!())), #[cfg(not(feature = "log_debug"))] None, @@ -17,15 +16,15 @@ macro_rules! debug { log_result ); }}; - ($fmt:tt, $($arg:expr),*) => {{ - use $crate::unshell_obfuscate; - let log_result = unshell_obfuscate::format_obs!($fmt, $($arg),*); + ($level:expr, $fmt:tt, $($arg:expr),*) => {{ + use $crate::obfuscate; + let log_result = obfuscate::format_obs!($fmt, $($arg),*); $crate::logger::add_record( - $crate::logger::LogLevel::Debug, + $level, #[cfg(feature = "log_debug")] - Some(String::from(unshell_obfuscate::file_symbol!())), + Some(String::from(obfuscate::file_symbol!())), #[cfg(not(feature = "log_debug"))] None, @@ -35,123 +34,30 @@ macro_rules! debug { }}; } -#[cfg(not(feature = "log_debug"))] #[macro_export] macro_rules! debug { - ($fmt:tt) => {{ - let _ = $fmt; - }}; - ($fmt:tt, $($arg:expr),*) => {{ - let _ = $fmt; - $(let _ = $arg;)* - }}; + ($($arg:tt)*) => { + $crate::log!($crate::logger::LogLevel::Debug, $($arg)*) + }; } #[macro_export] macro_rules! info { - ($fmt:tt) => {{ - use $crate::unshell_obfuscate; - let log_result = unshell_obfuscate::format_obs!($fmt); - - $crate::logger::add_record( - $crate::logger::LogLevel::Info, - - #[cfg(feature = "log_debug")] - Some(String::from(unshell_obfuscate::file_symbol!())), - #[cfg(not(feature = "log_debug"))] - None, - - std::time::SystemTime::now(), - log_result - ); - }}; - ($fmt:tt, $($arg:expr),*) => {{ - use $crate::unshell_obfuscate; - let log_result = unshell_obfuscate::format_obs!($fmt, $($arg),*); - - $crate::logger::add_record( - $crate::logger::LogLevel::Info, - - #[cfg(feature = "log_debug")] - Some(String::from(unshell_obfuscate::file_symbol!())), - #[cfg(not(feature = "log_debug"))] - None, - - std::time::SystemTime::now(), - log_result - ); - }}; + ($($arg:tt)*) => { + $crate::log!($crate::logger::LogLevel::Info, $($arg)*) + }; } #[macro_export] macro_rules! warn { - ($fmt:tt) => {{ - use $crate::unshell_obfuscate; - - let log_result = unshell_obfuscate::format_obs!($fmt); - - $crate::logger::add_record( - $crate::logger::LogLevel::Warn, - - #[cfg(feature = "log_debug")] - Some(String::from(unshell_obfuscate::file_symbol!())), - #[cfg(not(feature = "log_debug"))] - None, - - std::time::SystemTime::now(), - log_result - ); - }}; - ($fmt:tt, $($arg:expr),*) => {{ - use $crate::unshell_obfuscate; - - let log_result = unshell_obfuscate::format_obs!($fmt, $($arg),*); - - $crate::logger::add_record( - $crate::logger::LogLevel::Warn, - - #[cfg(feature = "log_debug")] - Some(String::from(unshell_obfuscate::file_symbol!())), - #[cfg(not(feature = "log_debug"))] - None, - - std::time::SystemTime::now(), - log_result - ); - }}; + ($($arg:tt)*) => { + $crate::log!($crate::logger::LogLevel::Warn, $($arg)*) + }; } #[macro_export] macro_rules! error { - ($fmt:tt) => {{ - let log_result = unshell_obfuscate::format_obs!($fmt); - - $crate::logger::add_record( - $crate::logger::LogLevel::Error, - - #[cfg(feature = "log_debug")] - Some(String::from(unshell_obfuscate::file_symbol!())), - #[cfg(not(feature = "log_debug"))] - None, - - std::time::SystemTime::now(), - log_result - ); - }}; - ($fmt:tt, $($arg:expr),*) => {{ - use $crate::unshell_obfuscate; - let log_result = unshell_obfuscate::format_obs!($fmt, $($arg),*); - - $crate::logger::add_record( - $crate::logger::LogLevel::Error, - - #[cfg(feature = "log_debug")] - Some(String::from(unshell_obfuscate::file_symbol!())), - #[cfg(not(feature = "log_debug"))] - None, - - std::time::SystemTime::now(), - log_result - ); - }}; + ($($arg:tt)*) => { + $crate::log!($crate::logger::LogLevel::Error, $($arg)*) + }; } diff --git a/src/logger/mod.rs b/src/logger/mod.rs index daa91ff..e74e6a3 100644 --- a/src/logger/mod.rs +++ b/src/logger/mod.rs @@ -10,6 +10,7 @@ mod pretty_logger; use std::time::SystemTime; pub use pretty_logger::PrettyLogger; +pub use pretty_logger::log; static mut LOGGER: &dyn Logger = &DefaultLogger; diff --git a/src/logger/pretty_logger.rs b/src/logger/pretty_logger.rs index 68ade74..c41b1c1 100644 --- a/src/logger/pretty_logger.rs +++ b/src/logger/pretty_logger.rs @@ -23,25 +23,33 @@ impl Logger for PrettyLogger { (*func)(&message) } - let log_level = match message.log_level { - LogLevel::Debug => format!("{DEBUG_COLOR}DBUG"), - LogLevel::Info => format!("{INFO_COLOR}INFO"), - LogLevel::Warn => format!("{WARN_COLOR}WARN"), - LogLevel::Error => format!("{ERROR_COLOR}ERR!"), - }; - - let date: DateTime = message.time.into(); - let date = date.to_rfc2822().to_string(); - - let location = message.location.unwrap_or("".to_string()); - - println!( - "{OFF_WHITE}[{TIME_COLOR}{}{OFF_WHITE}] {} {WHITE}{} {GREY}{}{WHITE}", - date, log_level, message.message, location - ); + log(&message); } } +pub fn log(message: &Record) { + let log_level = match message.log_level { + LogLevel::Debug => format!("{DEBUG_COLOR}DBUG"), + LogLevel::Info => format!("{INFO_COLOR}INFO"), + LogLevel::Warn => format!("{WARN_COLOR}WARN"), + LogLevel::Error => format!("{ERROR_COLOR}ERR!"), + }; + + let date: DateTime = message.time.into(); + let date = date.to_rfc2822().to_string(); + + let location = if let Some(ref location) = message.location { + location + } else { + &String::new() + }; + + println!( + "{OFF_WHITE}[{TIME_COLOR}{}{OFF_WHITE}] {} {WHITE}{} {GREY}{}{WHITE}", + date, log_level, message.message, location + ); +} + impl PrettyLogger { pub fn init() { crate::logger::set_logger_box(Box::new(PrettyLogger { output: None })); diff --git a/src/manager/log.rs b/src/manager/log.rs deleted file mode 100644 index 9d9b646..0000000 --- a/src/manager/log.rs +++ /dev/null @@ -1,36 +0,0 @@ -/// Implement logging for the manager -use crossbeam_channel::Sender; - -use crate::{ - logger::{Logger, Record}, - manager::Tree, -}; - -pub struct ManagerLogger { - tx: Sender, -} - -impl ManagerLogger { - pub fn new(tx: Sender) -> Self { - Self { tx } - } -} - -// impl Manager { -// /// Initiate the unshell logger, piped through the manager -// /// This will allow access to the logs through the tree -// pub fn init_logger(&self) { -// // Create the logger through the TX element of the manager -// let logger = ManagerLogger::new(self.logs_tx.clone()); - -// // Set the logger through unshell -// crate::logger::set_logger_box(Box::new(logger)); -// } -// } - -impl Logger for ManagerLogger { - fn log(&self, log: crate::logger::Record) { - // This will never panic if the program is operating properly - self.tx.send(log).unwrap(); - } -} diff --git a/src/manager/mod.rs b/src/manager/mod.rs deleted file mode 100644 index aa661a4..0000000 --- a/src/manager/mod.rs +++ /dev/null @@ -1,63 +0,0 @@ -use std::collections::HashMap; - -use crate::{ - ModuleError, - manager::tree_structs::{TreeMessage, TreeType}, -}; - -mod log; -mod tree_structs; - -pub trait TreeElement { - fn get_children(&self) -> HashMap; - fn get_type(&self) -> TreeType; - fn send_message(&mut self, message: TreeMessage) -> TreeMessage; - fn send_message_child(&mut self, element: String, message: TreeMessage) -> TreeMessage; -} - -pub struct Tree { - elements: HashMap>, -} - -impl Tree { - pub fn new() -> Self { - Self { - elements: HashMap::new(), - } - } - - pub fn add_element(&mut self, name: String, element: Box) { - self.elements.insert(name, element); - } -} - -impl TreeElement for Tree { - fn get_children(&self) -> HashMap { - self.elements - .iter() - .map(|c| (c.0.clone(), c.1.get_type())) - .into_iter() - .collect() - } - - fn get_type(&self) -> TreeType { - TreeType::RootTree - } - - fn send_message_child(&mut self, element_name: String, message: TreeMessage) -> TreeMessage { - if let Some(element) = self.elements.get_mut(&element_name) { - element.send_message(message) - } else { - TreeMessage::Result(ModuleError::TreeNotExist) - } - } - - fn send_message(&mut self, _message: TreeMessage) -> TreeMessage { - TreeMessage::Response - // if let Some(element) = self.elements.get_mut(&element_name) { - // element.send_message(message) - // } else { - // TreeMessage::Result(ModuleError::TreeNotExist) - // } - } -} diff --git a/src/manager/tree_structs.rs b/src/manager/tree_structs.rs deleted file mode 100644 index d01eba5..0000000 --- a/src/manager/tree_structs.rs +++ /dev/null @@ -1,13 +0,0 @@ -pub enum TreeMessage { - Request, - Response, - Result(crate::error::ModuleError), -} - -pub enum TreeType { - RootTree, - - TypeA, - TypeB, - TypeC, -} diff --git a/src/tree/log.rs b/src/tree/log.rs new file mode 100644 index 0000000..99faaa1 --- /dev/null +++ b/src/tree/log.rs @@ -0,0 +1,59 @@ +/// Implement logging for the manager +use crossbeam_channel::{Receiver, Sender}; +use serde_json::{Value, json}; + +use crate::{ + logger::{Logger, Record}, + tree::{Tree, TreeElement, symbols}, +}; + +struct LoggerTX(Sender); +struct LoggerRX(Receiver); + +impl Tree { + /// Initiate the unshell logger for the local binary, piped through the manager + /// This will allow access to the logs through the tree + pub fn init_logger(&mut self) { + // Create the logger through the TX element of the manager + + let (tx, rx) = crossbeam_channel::unbounded(); + let (tx, rx) = (LoggerTX(tx), LoggerRX(rx)); + + // Set the logger through unshell + crate::logger::set_logger_box(Box::new(tx)); + // Add the logger to the tree + self.add_element(symbols::LOGGER.to_string(), Box::new(rx)); + } +} + +impl Logger for LoggerTX { + fn log(&self, log: crate::logger::Record) { + // This will never panic if the program is operating properly + self.0.send(log).unwrap(); + } +} + +impl TreeElement for LoggerRX { + fn get_type(&self) -> Value { + json!(symbols::TYPE_QUEUE) + } + + fn send_message(&mut self, target: Value, message: Value) -> Value { + match (target, message) { + (Value::Null, Value::String(message)) => match message.as_ref() { + symbols::CMD_GET => { + if !self.0.is_empty() { + json!(self.0.recv().unwrap()) + } else { + json!(Value::Null) + } + } + symbols::CMD_GET_LENGTH => { + json!(self.0.len()) + } + _ => json!(symbols::ERR_INVALID_COMMAND), + }, + _ => json!(symbols::ERR_INVALID_CHILD), + } + } +} diff --git a/src/tree/mod.rs b/src/tree/mod.rs new file mode 100644 index 0000000..e563166 --- /dev/null +++ b/src/tree/mod.rs @@ -0,0 +1,81 @@ +use std::collections::HashMap; + +use serde_json::{Value, json}; + +mod log; +pub mod symbols; + +pub trait TreeElement { + // fn get_children(&self) -> HashMap; + fn get_type(&self) -> Value; + fn send_message(&mut self, target: Value, message: Value) -> Value; +} + +pub struct Tree { + elements: HashMap>, +} + +impl Tree { + pub fn new() -> Self { + Self { + elements: HashMap::new(), + } + } + + pub fn add_element(&mut self, name: String, element: Box) { + self.elements.insert(name, element); + } +} + +impl TreeElement for Tree { + fn get_type(&self) -> Value { + json!(symbols::TYPE_TREE) + } + + // fn send_message_child(&mut self, element: Value, message: TreeMessage) -> TreeMessage { + // let name = if let TreeType::String(name) = element { + // name + // } else { + // return TreeMessage::Error(ModuleError::InvalidType); + // }; + + // if let Some(element) = self.elements.get_mut(&name) { + // element.send_message(message) + // } else { + // TreeMessage::Error(ModuleError::TreeNotExist) + // } + // } + + fn send_message(&mut self, target: Value, message: Value) -> Value { + match target { + Value::Null => { + if let Some(message) = message.as_str() { + match message { + "GetChildren" => { + let children = self + .elements + .iter() + .map(|c| (Value::String(c.0.clone()), c.1.get_type())) + .into_iter() + .collect::>(); + + json!(children) + } + + _ => Value::String("UnsupportedMethod".to_owned()), + } + } else { + Value::String("UnsupportedMethod".to_owned()) + } + } + Value::String(target) => { + if let Some(child) = self.elements.get_mut(&target) { + child.send_message(Value::Null, message) + } else { + Value::String("UnsupportedMethod".to_owned()) + } + } + _ => Value::String("UnsupportedMethod".to_owned()), + } + } +} diff --git a/src/tree/symbols.rs b/src/tree/symbols.rs new file mode 100644 index 0000000..50ec788 --- /dev/null +++ b/src/tree/symbols.rs @@ -0,0 +1,15 @@ +use crate::obfuscate::symbol; + +pub const LOGGER: &'static str = symbol!("Logger"); + +pub const TYPE_TREE: &'static str = symbol!("Tree"); +pub const TYPE_QUEUE: &'static str = symbol!("Queue"); + +pub const CMD_GET: &'static str = symbol!("Get"); +pub const CMD_POLL: &'static str = symbol!("Poll"); +pub const CMD_GET_LENGTH: &'static str = symbol!("GetLength"); +pub const CMD_GET_CHILDREN: &'static str = symbol!("GetChildren"); + +pub const ERR_UNSUPPORTED_METHOD: &'static str = symbol!("UnsupportedMethod"); +pub const ERR_INVALID_COMMAND: &'static str = symbol!("InvalidCommand"); +pub const ERR_INVALID_CHILD: &'static str = symbol!("InvalidChild"); diff --git a/unshell-payload/Cargo.toml b/unshell-payload/Cargo.toml deleted file mode 100644 index cb21ed8..0000000 --- a/unshell-payload/Cargo.toml +++ /dev/null @@ -1,28 +0,0 @@ -cargo-features = ["trim-paths"] - -[package] -name = "unshell-payload" -edition = "2024" - -# [lib] -# crate-type = ["cdylib"] - -[features] -default = ["log"] -log = ["unshell/log", "server2/log"] -log_debug = ["unshell/log_debug", "server2/log_debug"] - - -# obfuscate = ["unshell-obfuscate/obfuscate"] -# log = ["unshell-lib/log"] -# log_debug = ["unshell-lib/log_debug"] - -# client = ["unshell-lib/client"] -# server = ["unshell-lib/server"] -# # server = ["unshell-lib/server"] - - -[dependencies] - -unshell.path = "../" -server2.path = "../core-modules/server2" diff --git a/unshell-payload/build.sh b/unshell-payload/build.sh deleted file mode 100755 index a3170f8..0000000 --- a/unshell-payload/build.sh +++ /dev/null @@ -1,14 +0,0 @@ -# OBFUSCATION_KEY=abc123abc \ -# RUST_LOG=info \ -# cargo run --no-default-features $@ --release # $(ls ../*/target/release/*.so) - -OBFUSCATION_KEY=abc123abc \ - -cargo build $@ --profile release - -# RUSTFLAGS="-Zlocation-detail=none -Zfmt-debug=none" \ -# cargo +nightly build \ -# -Z build-std=std,panic_abort \ -# -Z build-std-features="optimize_for_size" \ -# $@ \ -# --profile release diff --git a/unshell-gui/Cargo.toml b/ush-gui/Cargo.toml similarity index 98% rename from unshell-gui/Cargo.toml rename to ush-gui/Cargo.toml index 084e7d4..62344a6 100644 --- a/unshell-gui/Cargo.toml +++ b/ush-gui/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "unshell-gui" +name = "ush-gui" version.workspace = true edition.workspace = true authors.workspace = true diff --git a/unshell-gui/Trunk.toml b/ush-gui/Trunk.toml similarity index 100% rename from unshell-gui/Trunk.toml rename to ush-gui/Trunk.toml diff --git a/unshell-gui/assets/favicon.ico b/ush-gui/assets/favicon.ico similarity index 100% rename from unshell-gui/assets/favicon.ico rename to ush-gui/assets/favicon.ico diff --git a/unshell-gui/assets/manifest.json b/ush-gui/assets/manifest.json similarity index 100% rename from unshell-gui/assets/manifest.json rename to ush-gui/assets/manifest.json diff --git a/unshell-gui/assets/sw.js b/ush-gui/assets/sw.js similarity index 100% rename from unshell-gui/assets/sw.js rename to ush-gui/assets/sw.js diff --git a/unshell-gui/index.html b/ush-gui/index.html similarity index 100% rename from unshell-gui/index.html rename to ush-gui/index.html diff --git a/unshell-gui/src/app/app.rs b/ush-gui/src/app/app.rs similarity index 100% rename from unshell-gui/src/app/app.rs rename to ush-gui/src/app/app.rs diff --git a/unshell-gui/src/app/mod.rs b/ush-gui/src/app/mod.rs similarity index 100% rename from unshell-gui/src/app/mod.rs rename to ush-gui/src/app/mod.rs diff --git a/unshell-gui/src/app/windows.rs b/ush-gui/src/app/windows.rs similarity index 100% rename from unshell-gui/src/app/windows.rs rename to ush-gui/src/app/windows.rs diff --git a/unshell-gui/src/auth/js_poll.rs b/ush-gui/src/auth/js_poll.rs similarity index 100% rename from unshell-gui/src/auth/js_poll.rs rename to ush-gui/src/auth/js_poll.rs diff --git a/unshell-gui/src/auth/mod.rs b/ush-gui/src/auth/mod.rs similarity index 100% rename from unshell-gui/src/auth/mod.rs rename to ush-gui/src/auth/mod.rs diff --git a/unshell-gui/src/auth/webreq.rs b/ush-gui/src/auth/webreq.rs similarity index 100% rename from unshell-gui/src/auth/webreq.rs rename to ush-gui/src/auth/webreq.rs diff --git a/unshell-gui/src/blobs/mod.rs b/ush-gui/src/blobs/mod.rs similarity index 100% rename from unshell-gui/src/blobs/mod.rs rename to ush-gui/src/blobs/mod.rs diff --git a/unshell-gui/src/config/mod.rs b/ush-gui/src/config/mod.rs similarity index 100% rename from unshell-gui/src/config/mod.rs rename to ush-gui/src/config/mod.rs diff --git a/unshell-gui/src/config/mod~.rs b/ush-gui/src/config/mod~.rs similarity index 100% rename from unshell-gui/src/config/mod~.rs rename to ush-gui/src/config/mod~.rs diff --git a/unshell-gui/src/flowchart/container.rs b/ush-gui/src/flowchart/container.rs similarity index 100% rename from unshell-gui/src/flowchart/container.rs rename to ush-gui/src/flowchart/container.rs diff --git a/unshell-gui/src/flowchart/flowchart.rs b/ush-gui/src/flowchart/flowchart.rs similarity index 100% rename from unshell-gui/src/flowchart/flowchart.rs rename to ush-gui/src/flowchart/flowchart.rs diff --git a/unshell-gui/src/flowchart/force.rs b/ush-gui/src/flowchart/force.rs similarity index 100% rename from unshell-gui/src/flowchart/force.rs rename to ush-gui/src/flowchart/force.rs diff --git a/unshell-gui/src/flowchart/group.rs b/ush-gui/src/flowchart/group.rs similarity index 100% rename from unshell-gui/src/flowchart/group.rs rename to ush-gui/src/flowchart/group.rs diff --git a/unshell-gui/src/flowchart/mod.rs b/ush-gui/src/flowchart/mod.rs similarity index 100% rename from unshell-gui/src/flowchart/mod.rs rename to ush-gui/src/flowchart/mod.rs diff --git a/unshell-gui/src/interface/interface.rs b/ush-gui/src/interface/interface.rs similarity index 100% rename from unshell-gui/src/interface/interface.rs rename to ush-gui/src/interface/interface.rs diff --git a/unshell-gui/src/interface/mod.rs b/ush-gui/src/interface/mod.rs similarity index 100% rename from unshell-gui/src/interface/mod.rs rename to ush-gui/src/interface/mod.rs diff --git a/unshell-gui/src/lib.rs b/ush-gui/src/lib.rs similarity index 100% rename from unshell-gui/src/lib.rs rename to ush-gui/src/lib.rs diff --git a/unshell-gui/src/log_viewer/mod.rs b/ush-gui/src/log_viewer/mod.rs similarity index 100% rename from unshell-gui/src/log_viewer/mod.rs rename to ush-gui/src/log_viewer/mod.rs diff --git a/unshell-gui/src/main~.rs b/ush-gui/src/main~.rs similarity index 100% rename from unshell-gui/src/main~.rs rename to ush-gui/src/main~.rs diff --git a/unshell-gui/src/payload_config/mod.rs b/ush-gui/src/payload_config/mod.rs similarity index 100% rename from unshell-gui/src/payload_config/mod.rs rename to ush-gui/src/payload_config/mod.rs diff --git a/unshell-gui/src/payload_config/structs.rs b/ush-gui/src/payload_config/structs.rs similarity index 100% rename from unshell-gui/src/payload_config/structs.rs rename to ush-gui/src/payload_config/structs.rs diff --git a/unshell-manager/Cargo.lock b/ush-manager/Cargo.lock similarity index 100% rename from unshell-manager/Cargo.lock rename to ush-manager/Cargo.lock diff --git a/unshell-manager/Cargo.toml b/ush-manager/Cargo.toml similarity index 93% rename from unshell-manager/Cargo.toml rename to ush-manager/Cargo.toml index eedba00..7e7d760 100644 --- a/unshell-manager/Cargo.toml +++ b/ush-manager/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "unshell-manager" +name = "ush-manager" version.workspace = true edition.workspace = true authors.workspace = true diff --git a/unshell-manager/src/interface.rs b/ush-manager/src/interface.rs similarity index 100% rename from unshell-manager/src/interface.rs rename to ush-manager/src/interface.rs diff --git a/unshell-manager/src/lib.rs b/ush-manager/src/lib.rs similarity index 100% rename from unshell-manager/src/lib.rs rename to ush-manager/src/lib.rs diff --git a/unshell-manager/src/manager/announcement.rs b/ush-manager/src/manager/announcement.rs similarity index 100% rename from unshell-manager/src/manager/announcement.rs rename to ush-manager/src/manager/announcement.rs diff --git a/unshell-manager/src/manager/connection.rs b/ush-manager/src/manager/connection.rs similarity index 100% rename from unshell-manager/src/manager/connection.rs rename to ush-manager/src/manager/connection.rs diff --git a/unshell-manager/src/manager/mod.rs b/ush-manager/src/manager/mod.rs similarity index 99% rename from unshell-manager/src/manager/mod.rs rename to ush-manager/src/manager/mod.rs index 046563c..f64d1d6 100644 --- a/unshell-manager/src/manager/mod.rs +++ b/ush-manager/src/manager/mod.rs @@ -8,7 +8,7 @@ use std::{ time::Duration, }; -use unshell::unshell_obfuscate::symbol; +use unshell::obfuscate::symbol; use unshell::{Result, config::RuntimeConfig, debug, warn}; use crate::{ diff --git a/unshell-manager/src/module.rs b/ush-manager/src/module.rs similarity index 100% rename from unshell-manager/src/module.rs rename to ush-manager/src/module.rs diff --git a/unshell-manager/src/module_interface.rs b/ush-manager/src/module_interface.rs similarity index 100% rename from unshell-manager/src/module_interface.rs rename to ush-manager/src/module_interface.rs diff --git a/unshell-manager/src/network/mod.rs b/ush-manager/src/network/mod.rs similarity index 100% rename from unshell-manager/src/network/mod.rs rename to ush-manager/src/network/mod.rs diff --git a/unshell-manager/src/network/tcp_stream.rs b/ush-manager/src/network/tcp_stream.rs similarity index 100% rename from unshell-manager/src/network/tcp_stream.rs rename to ush-manager/src/network/tcp_stream.rs diff --git a/unshell-manager/src/proc_load.rs b/ush-manager/src/proc_load.rs similarity index 100% rename from unshell-manager/src/proc_load.rs rename to ush-manager/src/proc_load.rs diff --git a/unshell-obfuscate/Cargo.lock b/ush-obfuscate/Cargo.lock similarity index 100% rename from unshell-obfuscate/Cargo.lock rename to ush-obfuscate/Cargo.lock diff --git a/unshell-obfuscate/Cargo.toml b/ush-obfuscate/Cargo.toml similarity index 95% rename from unshell-obfuscate/Cargo.toml rename to ush-obfuscate/Cargo.toml index 930a835..47ce283 100644 --- a/unshell-obfuscate/Cargo.toml +++ b/ush-obfuscate/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "unshell-obfuscate" +name = "ush-obfuscate" version.workspace = true edition.workspace = true authors.workspace = true diff --git a/unshell-obfuscate/README.md b/ush-obfuscate/README.md similarity index 100% rename from unshell-obfuscate/README.md rename to ush-obfuscate/README.md diff --git a/unshell-obfuscate/TODO.txt b/ush-obfuscate/TODO.txt similarity index 100% rename from unshell-obfuscate/TODO.txt rename to ush-obfuscate/TODO.txt diff --git a/unshell-obfuscate/src/crypt/aes_decrypt.rs b/ush-obfuscate/src/crypt/aes_decrypt.rs similarity index 100% rename from unshell-obfuscate/src/crypt/aes_decrypt.rs rename to ush-obfuscate/src/crypt/aes_decrypt.rs diff --git a/unshell-obfuscate/src/crypt/aes_encrypt.rs b/ush-obfuscate/src/crypt/aes_encrypt.rs similarity index 94% rename from unshell-obfuscate/src/crypt/aes_encrypt.rs rename to ush-obfuscate/src/crypt/aes_encrypt.rs index f06d23f..59e1346 100644 --- a/unshell-obfuscate/src/crypt/aes_encrypt.rs +++ b/ush-obfuscate/src/crypt/aes_encrypt.rs @@ -1,7 +1,6 @@ use crate::crypt::{base62::Base62, hash}; -use aes::cipher::{BlockDecryptMut, BlockEncryptMut, KeyIvInit}; +use aes::cipher::{BlockEncryptMut, KeyIvInit}; use cbc::cipher::block_padding::Pkcs7; -use regex::Regex; fn pkcs7_padded_length(input_len: usize) -> usize { let block_size = 16; diff --git a/unshell-obfuscate/src/crypt/base62.rs b/ush-obfuscate/src/crypt/base62.rs similarity index 100% rename from unshell-obfuscate/src/crypt/base62.rs rename to ush-obfuscate/src/crypt/base62.rs diff --git a/unshell-obfuscate/src/crypt/mod.rs b/ush-obfuscate/src/crypt/mod.rs similarity index 98% rename from unshell-obfuscate/src/crypt/mod.rs rename to ush-obfuscate/src/crypt/mod.rs index 3703fee..f8a53c2 100644 --- a/unshell-obfuscate/src/crypt/mod.rs +++ b/ush-obfuscate/src/crypt/mod.rs @@ -1,4 +1,5 @@ pub mod aes_encrypt; +#[allow(dead_code)] pub mod base62; pub const ENV_KEY_NAME: &str = "OBFUSCATION_KEY"; diff --git a/unshell-obfuscate/src/format_helper.rs b/ush-obfuscate/src/format_helper.rs similarity index 100% rename from unshell-obfuscate/src/format_helper.rs rename to ush-obfuscate/src/format_helper.rs diff --git a/unshell-obfuscate/src/lib.rs b/ush-obfuscate/src/lib.rs similarity index 93% rename from unshell-obfuscate/src/lib.rs rename to ush-obfuscate/src/lib.rs index 0435fa5..0ae4e48 100644 --- a/unshell-obfuscate/src/lib.rs +++ b/ush-obfuscate/src/lib.rs @@ -25,17 +25,17 @@ use obfuscate as obs; #[proc_macro] pub fn obs(input: TokenStream) -> TokenStream { - obs::obs(input) + obs::xor(input) } #[proc_macro_attribute] pub fn obfuscated_symbol(_attr: TokenStream, item: TokenStream) -> TokenStream { - obs::obfuscated_symbol(_attr, item) + obs::aes_fn_name(_attr, item) } #[proc_macro] pub fn symbol(input: TokenStream) -> TokenStream { - obs::symbol(input) + obs::aes_str(input) } #[proc_macro] @@ -56,7 +56,7 @@ pub fn file_symbol(_input: TokenStream) -> TokenStream { // Return as a string literal let output = quote! { - unshell_obfuscate::symbol!(#concatted) + obfuscate::symbol!(#concatted) }; // let output = quote! { // #concatted @@ -83,7 +83,7 @@ pub fn format_obs(input: TokenStream) -> TokenStream { match segment { FormatSegment::Static(text) => { parts.push(quote! { - unshell_obfuscate::symbol!(#text).to_string() + obfuscate::symbol!(#text).to_string() }); } FormatSegment::Dynamic(spec, idx) => { diff --git a/unshell-obfuscate/src/no_obfuscate.rs b/ush-obfuscate/src/no_obfuscate.rs similarity index 71% rename from unshell-obfuscate/src/no_obfuscate.rs rename to ush-obfuscate/src/no_obfuscate.rs index 723aa03..d1ded17 100644 --- a/unshell-obfuscate/src/no_obfuscate.rs +++ b/ush-obfuscate/src/no_obfuscate.rs @@ -2,7 +2,7 @@ use proc_macro::TokenStream; use quote::quote; use syn::{ItemFn, LitStr, parse_macro_input}; -pub fn obs(input: TokenStream) -> TokenStream { +pub fn xor(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as LitStr); (quote::quote! { @@ -10,7 +10,7 @@ pub fn obs(input: TokenStream) -> TokenStream { }) .into() } -pub fn obfuscated_symbol(_attr: TokenStream, item: TokenStream) -> TokenStream { +pub fn aes_fn_name(_attr: TokenStream, item: TokenStream) -> TokenStream { let func = parse_macro_input!(item as ItemFn); TokenStream::from(quote! { #[unsafe(no_mangle)] @@ -18,7 +18,7 @@ pub fn obfuscated_symbol(_attr: TokenStream, item: TokenStream) -> TokenStream { }) } -pub fn symbol(input: TokenStream) -> TokenStream { +pub fn aes_str(input: TokenStream) -> TokenStream { input } diff --git a/unshell-obfuscate/src/obfuscate/mod.rs b/ush-obfuscate/src/obfuscate/mod.rs similarity index 94% rename from unshell-obfuscate/src/obfuscate/mod.rs rename to ush-obfuscate/src/obfuscate/mod.rs index d6761bf..6d70b03 100644 --- a/unshell-obfuscate/src/obfuscate/mod.rs +++ b/ush-obfuscate/src/obfuscate/mod.rs @@ -3,6 +3,7 @@ mod obs_xor; mod sym_aes_strings; pub use obs_junk_asm::junk_asm; +pub use obs_xor::xor; pub use sym_aes_strings::*; use crate::crypt::{BACKUP_ENV_KEY, ENV_KEY_NAME}; diff --git a/unshell-obfuscate/src/obfuscate/obs_junk_asm.rs b/ush-obfuscate/src/obfuscate/obs_junk_asm.rs similarity index 100% rename from unshell-obfuscate/src/obfuscate/obs_junk_asm.rs rename to ush-obfuscate/src/obfuscate/obs_junk_asm.rs diff --git a/unshell-obfuscate/src/obfuscate/obs_xor.rs b/ush-obfuscate/src/obfuscate/obs_xor.rs similarity index 100% rename from unshell-obfuscate/src/obfuscate/obs_xor.rs rename to ush-obfuscate/src/obfuscate/obs_xor.rs diff --git a/unshell-obfuscate/src/obfuscate/sym_aes_strings.rs b/ush-obfuscate/src/obfuscate/sym_aes_strings.rs similarity index 100% rename from unshell-obfuscate/src/obfuscate/sym_aes_strings.rs rename to ush-obfuscate/src/obfuscate/sym_aes_strings.rs diff --git a/ush-payload/Cargo.toml b/ush-payload/Cargo.toml new file mode 100644 index 0000000..a4c973a --- /dev/null +++ b/ush-payload/Cargo.toml @@ -0,0 +1,15 @@ +cargo-features = ["trim-paths"] + +[package] +name = "ush-payload" +edition = "2024" + +[features] +default = ["log"] +log = ["unshell/log"] +log_debug = ["unshell/log_debug"] +obfuscate = ["unshell/obfuscate"] + +[dependencies] +unshell.path = "../" +serde_json.workspace = true diff --git a/unshell-payload/README.md b/ush-payload/README.md similarity index 100% rename from unshell-payload/README.md rename to ush-payload/README.md diff --git a/unshell-payload/src/main.rs b/ush-payload/src/main.rs similarity index 74% rename from unshell-payload/src/main.rs rename to ush-payload/src/main.rs index f65aca1..ed57533 100644 --- a/unshell-payload/src/main.rs +++ b/ush-payload/src/main.rs @@ -1,23 +1,43 @@ -use unshell::{info, manager::Tree}; - -// use std::dyn +use unshell::{ + Value, info, + logger::{Record, log}, + obfuscate::{junk_asm, symbol}, + tree::{Tree, TreeElement, symbols}, +}; fn main() { - let manager = Tree::new(); + let mut manager = Tree::new(); manager.init_logger(); + info!("Test thing!"); info!("Test thing!"); - println!("Recieved logs: {}", manager.log_count()); + loop { + if test123(&mut manager) { + break; + } + } - // unshell::logger:: - - // server2::log_test_fn(); - // info!("This is a string!"); + // println!("Test"); } -pub fn test23() -> (i32, i32) { - (6, 3) +fn test123(manager: &mut Tree) -> bool { + let result = manager.send_message( + Value::String(symbol!("Logger").to_string()), + Value::String(symbols::CMD_GET.to_string()), + ); + + junk_asm!(20.); + + let is_null = result.is_null(); + + if let Ok(result) = serde_json::from_value::(result) { + log(&result); + } + + is_null + + // println!("Logger: {}", result); } // use std::{any::Any, collections::HashMap, fs::File, io::Read}; diff --git a/unshell-server/Cargo.lock b/ush-server/Cargo.lock similarity index 100% rename from unshell-server/Cargo.lock rename to ush-server/Cargo.lock diff --git a/unshell-server/Cargo.toml b/ush-server/Cargo.toml similarity index 77% rename from unshell-server/Cargo.toml rename to ush-server/Cargo.toml index 7cea62b..30b7f90 100644 --- a/unshell-server/Cargo.toml +++ b/ush-server/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "unshell-server" +name = "ush-server" version.workspace = true edition.workspace = true authors.workspace = true @@ -7,12 +7,12 @@ include.workspace = true [features] default = ["log_debug"] -log = ["unshell/log", "unshell-manager/log"] -log_debug = ["unshell/log_debug", "unshell-manager/log_debug"] +log = ["unshell/log"] +log_debug = ["unshell/log_debug"] [dependencies] unshell = { path = "../" } -unshell-manager = { path = "../unshell-manager" } +# ush-manager = { path = "../unshell-manager" } chrono = { workspace = true } toml = { workspace = true } diff --git a/unshell-server/TODO.txt b/ush-server/TODO.txt similarity index 100% rename from unshell-server/TODO.txt rename to ush-server/TODO.txt diff --git a/unshell-server/src/api.rs b/ush-server/src/api.rs similarity index 100% rename from unshell-server/src/api.rs rename to ush-server/src/api.rs diff --git a/unshell-server/src/auth/mod.rs b/ush-server/src/auth/mod.rs similarity index 100% rename from unshell-server/src/auth/mod.rs rename to ush-server/src/auth/mod.rs diff --git a/unshell-server/src/auth/structs.rs b/ush-server/src/auth/structs.rs similarity index 100% rename from unshell-server/src/auth/structs.rs rename to ush-server/src/auth/structs.rs diff --git a/unshell-server/src/lib.rs b/ush-server/src/lib.rs similarity index 100% rename from unshell-server/src/lib.rs rename to ush-server/src/lib.rs diff --git a/unshell-server/src/logger.rs b/ush-server/src/logger.rs similarity index 100% rename from unshell-server/src/logger.rs rename to ush-server/src/logger.rs diff --git a/unshell-server/src/main.rs b/ush-server/src/main.rs similarity index 100% rename from unshell-server/src/main.rs rename to ush-server/src/main.rs diff --git a/unshell-server/src/server/blobs.rs b/ush-server/src/server/blobs.rs similarity index 100% rename from unshell-server/src/server/blobs.rs rename to ush-server/src/server/blobs.rs diff --git a/unshell-server/src/server/database.rs b/ush-server/src/server/database.rs similarity index 100% rename from unshell-server/src/server/database.rs rename to ush-server/src/server/database.rs diff --git a/unshell-server/src/server/mod.rs b/ush-server/src/server/mod.rs similarity index 100% rename from unshell-server/src/server/mod.rs rename to ush-server/src/server/mod.rs diff --git a/unshell-server/src/server/tree2.rs b/ush-server/src/server/tree2.rs similarity index 100% rename from unshell-server/src/server/tree2.rs rename to ush-server/src/server/tree2.rs