diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 973d775..eaa4872 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -1,8 +1,8 @@ -name: Catherine Workflow +name: Catherine on: push: - branches: ["main", "v0.6"] + branches: ["main"] pull_request: branches: ["main"] diff --git a/Cargo.toml b/Cargo.toml index 33d2df1..ea4ed83 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ serde = "1.0" serde_json = "1.0" libloading = "0.7" prettytable-rs = "0.10.0" -mercy = "2.0.0" +mercy = "2.0.1" rand = "0.7.2" tauri = { version = "1.2.4", features = [] } diff --git a/README.md b/README.md index 1122527..f049edf 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,8 @@
- +
-

- Catherine -

+[![Catherine](https://github.com/azazelm3dj3d/catherine/actions/workflows/workflow.yml/badge.svg)](https://github.com/azazelm3dj3d/catherine/actions/workflows/workflow.yml) The Catherine Framework is a general-purpose cybersecurity framework built to provide extended support for defense operations. Catherine currently collects information from dumping hexadecimal content from files, validates malicious domains & IP addresses, attempts to crack unknown hashes, handles real-time database analysis, various types of decoding, and much more in a quick CLI utility. Thanks to Catherine being built in an easily packaged executable, you can quickly download the tool by running `cargo install catherine` via the `Cargo` ecosystem. Catherine can also be quickly compiled by pulling down the source code from `git` and simply running `cargo build` or `make` to build alongside modules. @@ -30,7 +28,7 @@ First, clone the repository using `git`: git clone https://github.com/azazelm3dj3d/catherine.git ``` -Once you've cloned the repository and you're in the correct directory, simply run the following command: +Once you've cloned the repository, and you're in the correct directory, simply run the following command: ```bash cargo build @@ -61,3 +59,5 @@ If a GUI is more your style, there is a simple version available with the majori ``` If a bug or issue is found, please report it [here](https://github.com/azazelm3dj3d/catherine/issues). + +*GUI logo provided by Freepik w/ modification from azazelm3dj3d. diff --git a/assets/catherine_banner.png b/assets/catherine_banner.png new file mode 100644 index 0000000..3762b00 Binary files /dev/null and b/assets/catherine_banner.png differ diff --git a/assets/catherine_icon.jpg b/assets/catherine_icon.jpg new file mode 100644 index 0000000..498b67a Binary files /dev/null and b/assets/catherine_icon.jpg differ diff --git a/assets/catherine_icon.png b/assets/catherine_icon.png index 30071a2..555c15d 100644 Binary files a/assets/catherine_icon.png and b/assets/catherine_icon.png differ diff --git a/icons/icon.jpg b/icons/icon.jpg new file mode 100644 index 0000000..498b67a Binary files /dev/null and b/icons/icon.jpg differ diff --git a/icons/icon.png b/icons/icon.png index 30071a2..555c15d 100644 Binary files a/icons/icon.png and b/icons/icon.png differ diff --git a/public/catherine_icon.jpg b/public/catherine_icon.jpg new file mode 100644 index 0000000..498b67a Binary files /dev/null and b/public/catherine_icon.jpg differ diff --git a/public/catherine_icon.png b/public/catherine_icon.png index 30071a2..555c15d 100644 Binary files a/public/catherine_icon.png and b/public/catherine_icon.png differ diff --git a/public/crack_hash.html b/public/crack_hash.html index 1b5bc69..098aade 100644 --- a/public/crack_hash.html +++ b/public/crack_hash.html @@ -19,68 +19,74 @@ @@ -101,7 +107,7 @@
-
diff --git a/public/decode.html b/public/decode.html index 94ccb31..f76802c 100644 --- a/public/decode.html +++ b/public/decode.html @@ -19,68 +19,74 @@ @@ -114,7 +120,7 @@
-
diff --git a/public/defang.html b/public/defang.html index c09727b..f276369 100644 --- a/public/defang.html +++ b/public/defang.html @@ -19,68 +19,74 @@ @@ -101,7 +107,7 @@
-
diff --git a/public/extract_zip.html b/public/extract_zip.html index fa26ca6..d4601a7 100644 --- a/public/extract_zip.html +++ b/public/extract_zip.html @@ -19,68 +19,74 @@ @@ -101,7 +107,7 @@
-
diff --git a/public/gen_domain.html b/public/gen_domain.html index c359ca6..5908112 100644 --- a/public/gen_domain.html +++ b/public/gen_domain.html @@ -19,68 +19,74 @@ @@ -101,7 +107,7 @@
-
diff --git a/public/identify.html b/public/identify.html index 52a330d..c203e56 100644 --- a/public/identify.html +++ b/public/identify.html @@ -19,68 +19,74 @@ @@ -101,7 +107,7 @@
-
diff --git a/public/index.html b/public/index.html index 72e165b..17c9855 100644 --- a/public/index.html +++ b/public/index.html @@ -19,74 +19,83 @@
- + Skull logo representing the Catherine framework +

+ Built by azazelm3dj3d (https://github.com/azazelm3dj3d) +

diff --git a/public/js/index.js b/public/js/index.js index e5a30e7..5fdd517 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -82,7 +82,7 @@ const domainGen = () => { }) } -// Extract a zip file contents +// Extract zip file contents const zipExtract = () => { invoke('extract_zip', { extractZipFile: document.getElementById("extractZipFile").value @@ -91,6 +91,15 @@ const zipExtract = () => { }) } +// Parse email contents +const emailParse = () => { + invoke('parse_email', { + parseEmailFile: document.getElementById("parseEmailFile").value + }).then((response) => { + document.getElementById("res_9").innerHTML = response; + }) +} + // Exit application const exitCatherine = () => { invoke("exit_catherine") diff --git a/public/parse_email.html b/public/parse_email.html new file mode 100644 index 0000000..43f9831 --- /dev/null +++ b/public/parse_email.html @@ -0,0 +1,129 @@ + + + + + + + + + + Catherine Framework + + + +
+ + +
+
+
+
+ Parse Email +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+

Output

+
+

+
+
+
+
+
+
+ + + + + diff --git a/public/sysdump.html b/public/sysdump.html index 197da48..d0f29d2 100644 --- a/public/sysdump.html +++ b/public/sysdump.html @@ -19,68 +19,74 @@ @@ -91,7 +97,7 @@ Dump System Information (Linux only)
-
diff --git a/public/whois.html b/public/whois.html index 2adc65d..9b78e68 100644 --- a/public/whois.html +++ b/public/whois.html @@ -19,68 +19,74 @@ @@ -101,7 +107,7 @@
-
diff --git a/src/catherine.rs b/src/catherine.rs index b470d3d..7d4d6a0 100644 --- a/src/catherine.rs +++ b/src/catherine.rs @@ -211,11 +211,39 @@ pub fn init(boot_msg: &str) { experimental("domain_gen", domain_str); }, - "extract_zip" => { - let zip_name: String = catherine_shell(NAME, VERSION, "extract/zip".blue()); - let zip_str: &str = &zip_name; + "set_extract" => { + println!("\nAvailable options:"); + println!("[0] zip"); + println!("[1] email, eml\n"); + + let extract_method = catherine_shell(NAME, VERSION, "set_extract".blue()); + let set_method: &str = &extract_method; + + match set_method { + "0" | "zip" => { + let zip_name: String = catherine_shell(NAME, VERSION, "set_extract/zip".blue()); + let zip_str: &str = &zip_name; + + experimental("zip", zip_str); + }, + + "1" | "email" | "eml" => { + + let eml_file: String = catherine_shell(NAME, VERSION, "set_extract/eml".blue()); + let eml_str: &str = &eml_file; + + println!("{}", extra("parse_email", eml_str)); + }, + + _ => { } + } + }, + + "detect_lang" => { + let lang_data: String = catherine_shell(NAME, VERSION, "detect_lang".blue()); + let lang_str: &str = &lang_data; - experimental("zip", zip_str); + println!("{}", extra("detect_lang", lang_str)); }, // Launches the GUI diff --git a/src/core/commands.rs b/src/core/commands.rs index 50c81cc..9145488 100644 --- a/src/core/commands.rs +++ b/src/core/commands.rs @@ -312,7 +312,7 @@ pub fn win_adapter_dump() { pub fn help_menu() { println!("\n=== General ==="); - pretty_output("start_server\nscan_ports\nsearch_exploit\nset_decode\nsys_info\ndefang\nwhois\nmal_query\nid\ncrack_hash\ndomain_gen\nextract_zip\nlaunch\n", "Start a Rust server\nScan for open local ports\nSearch ExploitDB for an available exploit to review\nDecode an encoded message using one of our provided methods\nPrint local system information to stdout\nDefang a URL or IP address (prints to stdout)\nRun a domain registrar search against the WHOIS API\nRun a domain name search to validate if it's malicious\nAttempt to identify a string's origins\nAttempt to crack an unknown hash in real-time\nGenerate a string for domain squatting or phishing assessments\nExtract zip contents that are not password protected\nLaunch a GUI built with Tauri", "Command", "Description"); + pretty_output("start_server\nscan_ports\nsearch_exploit\nset_decode\nsys_info\ndefang\nwhois\nmal_query\nid\ncrack_hash\ndomain_gen\nset_extract\ndetect_lang\nlaunch\n", "Start a Rust server\nScan for open local ports\nSearch ExploitDB for an available exploit to review\nDecode an encoded message using one of our provided methods\nPrint local system information to stdout\nDefang a URL or IP address (prints to stdout)\nRun a domain registrar search against the WHOIS API\nRun a domain name search to validate if it's malicious\nAttempt to identify a string's origins\nAttempt to crack an unknown hash in real-time\nGenerate a string for domain squatting or phishing assessments\nExtract contents from selected files using one of our provided methods\nAttempt to detect the language being used (beta)\nLaunch a GUI built with Tauri", "Command", "Description"); println!("\n=== Module ==="); pretty_output("set_module\nview_modules", "Set one of Catherine's modules\nCurrently installed modules", "Command", "Description"); diff --git a/src/ui/controller.rs b/src/ui/controller.rs index 21e1763..b56416b 100644 --- a/src/ui/controller.rs +++ b/src/ui/controller.rs @@ -75,6 +75,11 @@ fn extract_zip(extract_zip_file: &str) { experimental("zip", extract_zip_file) } +#[tauri::command] +fn parse_email(parse_email_file: &str) -> String { + format!("{}", extra("parse_email", parse_email_file)) +} + #[tauri::command] fn exit_catherine() -> String { print!("\nThanks for checking out the Catherine Framework!"); @@ -104,6 +109,7 @@ pub fn launch_gui() { crack_hash, domain_gen, extract_zip, + parse_email, exit_catherine ]) .run(tauri::generate_context!()) diff --git a/tauri.conf.json b/tauri.conf.json index bb2a869..30513ba 100644 --- a/tauri.conf.json +++ b/tauri.conf.json @@ -25,7 +25,7 @@ "icon": [ "icons/icon.png" ], - "identifier": "com.tauri.dev", + "identifier": "com.azazelm3dj3d.catherine", "longDescription": "", "macOS": { "entitlements": null,