diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml
new file mode 100644
index 0000000..eaa4872
--- /dev/null
+++ b/.github/workflows/workflow.yml
@@ -0,0 +1,31 @@
+name: Catherine
+
+on:
+ push:
+ branches: ["main"]
+ pull_request:
+ branches: ["main"]
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ workflow:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Configuring
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y libgtk-3-dev libsoup2.4-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev
+
+ - name: Checking
+ run: cargo check --verbose
+
+ - name: Testing
+ run: cargo test --verbose
+
+ - name: Building
+ run: cargo build --verbose
diff --git a/.gitignore b/.gitignore
index 0668415..2e3f602 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,4 +18,4 @@ Cargo.lock
build/
__MACOSX/
__pycache__/
-.DS_Store
\ No newline at end of file
+.DS_Store
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 9004a30..d3b2cf9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -10,4 +10,4 @@ git checkout -b BRANCH_NAME
2. A pull request will need to be created and no merge conflicts should be present.
-For anyone looking to contribute, please do not hesitate to fix or improve anything in the repository.
\ No newline at end of file
+For anyone looking to contribute, please do not hesitate to fix or improve anything in the repository.
diff --git a/Cargo.toml b/Cargo.toml
index c68e074..ea4ed83 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "catherine"
-description = "The Catherine Framework is a general-purpose cybersecurity framework built to aggregate, validate, decode, decrypt, and maintain data."
-version = "0.5.0"
+description = "The Catherine Framework is a general-purpose cybersecurity framework built to provide extended support for defense operations."
+version = "0.6.0"
authors = ["azazelm3dj3d"]
license = "BSD-2-Clause"
categories = ["cryptography", "command-line-utilities", "encoding"]
@@ -20,7 +20,7 @@ serde = "1.0"
serde_json = "1.0"
libloading = "0.7"
prettytable-rs = "0.10.0"
-mercy = "1.2.22"
+mercy = "2.0.1"
rand = "0.7.2"
tauri = { version = "1.2.4", features = [] }
@@ -29,4 +29,4 @@ ipconfig = "0.3.0"
[features]
default = [ "custom-protocol" ]
-custom-protocol = [ "tauri/custom-protocol" ]
\ No newline at end of file
+custom-protocol = [ "tauri/custom-protocol" ]
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..31e06ab
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,34 @@
+# Project: Catherine Framework (https://github.com/azazelm3dj3d/catherine)
+# Author: azazelm3dj3d (https://github.com/azazelm3dj3d)
+# License: BSD 2-Clause
+
+NAME=catherine
+PROJ_VERSION=0.6.0
+
+run:
+ @echo "Building $(NAME) v$(PROJ_VERSION)"
+ make setup_env
+ make build
+ make modules
+
+setup_env:
+ sudo mkdir -p /opt/catherine/modules
+ sudo mkdir -p /opt/catherine/modules/db
+ sudo mkdir -p /opt/catherine/modules/formats/exe
+ sudo mkdir -p /opt/catherine/modules/formats/hex
+ sudo mkdir -p /opt/catherine/modules/mercy
+ sudo mkdir -p /opt/catherine/modules/net/netscan
+ sudo mkdir -p /opt/catherine/modules/web/parsers
+ pip3 install -r requirements.txt
+
+build:
+ cargo check && cargo build
+
+modules:
+ chmod +x build_modules.sh && sudo ./build_modules.sh
+
+ @echo "[+] Configuring Hex 'C' module..."
+ sudo cc src/modules/formats/hex/c_hex_dump.c -Wall -shared -o /opt/catherine/modules/formats/hex/hex.so
+
+ # Cleanup spec files from pyinstaller
+ sudo rm *.spec
diff --git a/README.md b/README.md
index cbfbc3e..f049edf 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,17 @@
-
+
-
- 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 aggregate, validate, decode, decrypt, and maintain data. 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. 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`.
+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.
+
+NOTE: Modules do require Go, Python, and C build utilities to be installed.
Catherine provides a Command Line Interface (CLI) and Graphical User Interface (GUI) built into the executable. This means whether you install from source or `Cargo`, you can choose your method of use.
+This project will most likely be in an experimental state for a long time. This project is a personal endeavor to explore different ways to control or manipulate data utilizing Rust. A more stable and production-oriented crate is available here: [Mercy](https://github.com/azazelm3dj3d/mercy). Mercy is an open-source Rust crate and CLI designed for building cybersecurity utilities and projects.
+
## Installation
You can easily install via the `Cargo` CLI:
@@ -26,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
@@ -34,16 +36,13 @@ cargo build
Now you'll have a local debug build available for testing under `target/debug/catherine`.
-Catherine also offers custom modules for Linux operating systems. You can access these modules by installing Catherine via the `catherine_install` script.
-
-You can review the script [here](https://github.com/azazelm3dj3d/catherine/blob/main/catherine_install).
+If you're interested in working with the Catherine modules, you can use the `make` build ecosystem to create executables for Catherine:
```bash
-# The script requires sudo privileges to build a directory under `/opt/catherine/`
-sudo ./catherine_install
+make
```
-NOTE: I am working on converting all external [modules](https://github.com/azazelm3dj3d/catherine-modules) (Python, C, Go) into native modules (Rust) to offer everything in a built-in executable via `Cargo` without any extra steps, but for now, I've made sure to keep them accessible (excluding the GUI) for extended functionality.
+I am working on converting all external [modules](https://github.com/azazelm3dj3d/catherine-modules) (Python, C, Go) into native modules (Rust) to offer everything in a built-in executable via `Cargo` without any extra steps, but for now, I've made sure to keep them accessible (excluding the GUI) for extended functionality.
## Usage
@@ -59,6 +58,6 @@ If a GUI is more your style, there is a simple version available with the majori
🦀 Catherine [v0.x.x] (None) ☀️ 〉launch
```
-NOTE: I am still working on making the GUI a little nicer looking, but a basic version is currently available for testing.
+If a bug or issue is found, please report it [here](https://github.com/azazelm3dj3d/catherine/issues).
-If a bug or issue is found, please report it [here](https://github.com/azazelm3dj3d/catherine/issues).
\ No newline at end of file
+*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/build.rs b/build.rs
index 3b92901..dbd46db 100644
--- a/build.rs
+++ b/build.rs
@@ -6,4 +6,4 @@
fn main() {
tauri_build::build()
-}
\ No newline at end of file
+}
diff --git a/build_modules.sh b/build_modules.sh
new file mode 100755
index 0000000..ea72d2c
--- /dev/null
+++ b/build_modules.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+
+# Project: Catherine Framework (https://github.com/azazelm3dj3d/catherine)
+# Author: azazelm3dj3d (https://github.com/azazelm3dj3d)
+# License: BSD 2-Clause
+
+# NetScan
+# TODO: Test this function to verify it works, Go is the odd man out
+function netscan() {
+ cd src/modules/net/netscan/src
+ echo "[+] Configuring NetScan module..."
+
+ go build src/modules/net/netscan/src/main.go -o /opt/catherine/modules/net/netscan
+
+ if [ -f "/opt/catherine/modules/net/netscan" ]
+ then
+ echo "[+] NetScan module successfully built"
+ else
+ echo "[-] NetScan module was not built properly"
+ fi
+
+ echo ""
+}
+
+# Web parsers
+function parsers() {
+ # Link parser
+ echo "[+] Configuring Link Parser module..."
+ pyinstaller src/modules/web/parsers/links.py --onefile --clean -n links --distpath /opt/catherine/modules/web/parsers/ 2>/dev/null
+
+ if [ -f "/opt/catherine/modules/web/parsers/links" ]
+ then
+ echo "[+] Link Parser module successfully built"
+ else
+ echo "[-] Link Parser module was not built properly"
+ fi
+
+ echo ""
+}
+
+# Exec Dump
+function exec_dump() {
+ echo "[+] Configuring Windows Exe Dump module..."
+ pyinstaller src/modules/formats/exe/win_exe_dump.py --onefile --clean -n win_exe_dump --distpath /opt/catherine/modules/formats/exe/ 2>/dev/null
+
+ if [ -f "/opt/catherine/modules/formats/exe/win_exe_dump" ]
+ then
+ echo "[+] Windows Exe Dump module successfully built"
+ else
+ echo "[-] Windows Exe Dump module was not built properly"
+ fi
+
+ echo ""
+}
+
+# Redis
+function db_redis() {
+ echo "[+] Configuring Redis Database module..."
+ pyinstaller src/modules/db/redis.py --onefile --clean -n redis --distpath /opt/catherine/modules/db/ 2>/dev/null
+
+ if [ -f "/opt/catherine/modules/db/redis" ]
+ then
+ echo "[+] Redis Database module successfully built"
+ else
+ echo "[-] Redis Database module was not built properly"
+ fi
+
+ echo ""
+}
+
+# Mercy Extension
+function mercy_ext() {
+ echo "[+] Configuring Mercy Extension module..."
+ pyinstaller src/modules/mercy/extension.py --onefile --clean -n extension --distpath /opt/catherine/modules/mercy/ 2>/dev/null
+
+ if [ -f "/opt/catherine/modules/mercy/extension" ]
+ then
+ echo "[+] Mercy Extension module successfully built"
+ else
+ echo "[-] Mercy Extension module was not built properly"
+ fi
+
+ echo ""
+}
+
+# netscan
+parsers
+exec_dump
+db_redis
+mercy_ext
diff --git a/catherine_install b/catherine_install
deleted file mode 100755
index 7202e36..0000000
--- a/catherine_install
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/bash
-
-# Project: Catherine Framework (https://github.com/azazelm3dj3d/catherine)
-# Author: azazelm3dj3d (https://github.com/azazelm3dj3d)
-# License: BSD 2-Clause
-
-# Created directory for Catherine
-catherine_dir="/opt/catherine"
-
-# Installs Catherine
-function install_catherine() {
- if [[ ! -d "$catherine_dir" ]]; then
- mkdir $catherine_dir
- echo "[+] Created Catherine cache successfully"
- fi
-
- if ! catherine_installed="$(type -p "catherine")" || [[ -z $catherine_installed ]]; then
- cargo install catherine
- echo "[+] Catherine installed successfully"
- fi
-}
-
-install_catherine
-
-function install_modules() {
- cd $catherine_dir
-
- if [[ -d "$catherine_dir/modules" ]]; then
- rm -r "$catherine_dir/modules"
- git clone https://github.com/azazelm3dj3d/catherine-modules.git
- mv "$catherine_dir/catherine-modules" "$catherine_dir/modules"
-
- echo "[+] Catherine modules installed successfully"
- else
- git clone https://github.com/azazelm3dj3d/catherine-modules.git
- mv "$catherine_dir/catherine-modules" "$catherine_dir/modules"
-
- if [[ -d "$catherine_dir/modules" ]]; then
- echo "[+] Catherine modules installed successfully"
- fi
- fi
-}
-
-install_modules
-
-function installation_complete() {
- echo ""
- echo "Catherine should now be installed!"
- echo "You can start the framework by running 'catherine' in your terminal"
- exit
-}
-
-installation_complete
\ No newline at end of file
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
new file mode 100644
index 0000000..555c15d
Binary files /dev/null and b/icons/icon.png differ
diff --git a/modules.json b/modules.json
new file mode 100644
index 0000000..e68040a
--- /dev/null
+++ b/modules.json
@@ -0,0 +1,55 @@
+{
+ "author": "azazelm3dj3d",
+ "version": "0.1.26",
+ "numOfModules": "6",
+ "ModulesList": [
+ {
+ "id": 1,
+ "name": "NetScan",
+ "description": "Collects publicly available network information about a host",
+ "version": "1.0.9",
+ "source_path": "net/netscan/src/*",
+ "dist_path": "net/netscan/dist/netscan"
+ },
+ {
+ "id": 2,
+ "name": "links",
+ "description": "Parses web content, extracting external and internal links",
+ "version": "0.2.14",
+ "source_path": "web/parsers/links.py",
+ "dist_path": "web/parsers/dist/links"
+ },
+ {
+ "id": 3,
+ "name": "Mercy Extension",
+ "description": "Suite of methods for decryption and decoding data, extends the Mercy Rust crate",
+ "version": "1.4.15",
+ "source_path": "mercy/extenstion.py",
+ "dist_path": "mercy/dist/extenstion"
+ },
+ {
+ "id": 4,
+ "name": ["c_hex_dump", "rust_hex_dump"],
+ "description": "Dumps hexadecimal information for most file types (.exe, .toml, .c, etc.)",
+ "version": "0.1.11",
+ "source_path": ["data/hex/c/c_hex_dump.c", "data/hex/rust/rust_hex_dump.rs"],
+ "dist_path": ["data/hex/c/dist/hex.so", "data/hex/rust/rust_hex_dump.rs"]
+ },
+ {
+ "id": 5,
+ "name": "redis_analysis",
+ "description": "Real-time Redis database analysis and monitoring",
+ "version": "1.3.36",
+ "source_path": "db/redis/redis_analysis.py",
+ "dist_path": "db/redis/dist/redis_analysis"
+ },
+ {
+ "id": 6,
+ "name": "exec_dump_win",
+ "description": "Multi-format parser built to extract various data points from Windows executables, object binaries, DLLs and more (32-bit & 64-bit)",
+ "version": "0.1.10",
+ "source_path": "data/exe/exec_dump_win.py",
+ "dist_path": "data/exe/dist/exec_dump_win"
+ }
+ ]
+}
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
new file mode 100644
index 0000000..555c15d
Binary files /dev/null and b/public/catherine_icon.png differ
diff --git a/public/crack_hash.html b/public/crack_hash.html
new file mode 100644
index 0000000..098aade
--- /dev/null
+++ b/public/crack_hash.html
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+ Catherine Framework
+
+
+
+