+[![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 @@
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,