From 29f5bca43593a0d292c9eb54d8dfb6dcfb5de453 Mon Sep 17 00:00:00 2001 From: n0mad1k Date: Thu, 24 Apr 2025 06:24:43 -0400 Subject: [PATCH] unfucked the havoc_installer --- files/havoc_installer.sh | 82 +++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 34 deletions(-) diff --git a/files/havoc_installer.sh b/files/havoc_installer.sh index 117e877..9ecc3df 100644 --- a/files/havoc_installer.sh +++ b/files/havoc_installer.sh @@ -1,6 +1,7 @@ #!/bin/bash -# Streamlined Havoc C2 Framework installer with EDR evasion features -# This script automatically installs Havoc and prepares it for configuration +# Enhanced Havoc C2 Framework installer optimized for Red Team Operations +# This script installs and configures Havoc with EDR evasion features +# The mutation features are applied BEFORE building to ensure proper compilation set -e TEMP_DIR=$(mktemp -d) @@ -11,6 +12,7 @@ COMPILER_URL="http://musl.cc/x86_64-w64-mingw32-cross.tgz" COMPILER_DIR="/usr/bin/x86_64-w64-mingw32-cross" COMPILER_PATH="$COMPILER_DIR/bin/x86_64-w64-mingw32-gcc" IMPLANT_MUTATOR_SCRIPT="$HAVOC_DIR/implant_mutator.sh" +HAVOC_GITHUB="https://github.com/HavocFramework/Havoc.git" # Function to log messages log() { @@ -29,12 +31,16 @@ RANDOMIZED_BUILD_ID=$(random_string 16) # Install required dependencies log "Installing dependencies..." apt-get update >/dev/null 2>&1 -apt-get install -y git golang-go make build-essential mingw-w64 nasm cmake \ - ninja-build python3-pip libfontconfig1 libglu1-mesa-dev libgtest-dev \ - libspdlog-dev libboost-all-dev libncurses5-dev libgdbm-dev libssl-dev \ - libreadline-dev libffi-dev libsqlite3-dev libbz2-dev mesa-common-dev \ - qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5websockets5 \ - libqt5websockets5-dev binutils-dev wget >/dev/null 2>&1 +apt-get install -y git build-essential apt-utils cmake libfontconfig1 libglu1-mesa-dev libgtest-dev libspdlog-dev libboost-all-dev libncurses5-dev libgdbm-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev mesa-common-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5websockets5 libqt5websockets5-dev qtdeclarative5-dev golang-go qtbase5-dev libqt5websockets5-dev python3-dev libboost-all-dev mingw-w64 nasm >/dev/null 2>&1 + +# Fix for JSON dependency +log "Installing nlohmann-json manually..." +mkdir -p /tmp/json +cd /tmp/json +wget -q https://github.com/nlohmann/json/releases/download/v3.11.2/json.hpp +mkdir -p /usr/include/nlohmann +cp json.hpp /usr/include/nlohmann/ +cd - > /dev/null # Setup Go environment log "Setting up Go environment..." @@ -72,6 +78,7 @@ if [ -d "$HAVOC_DIR" ]; then cd $HAVOC_DIR git pull else + # Clone with proper GitHub URL git clone --quiet -b dev $HAVOC_GITHUB $HAVOC_DIR cd $HAVOC_DIR fi @@ -81,11 +88,13 @@ mkdir -p $HAVOC_DATA_DIR mkdir -p $HAVOC_DIR/payloads mkdir -p $HAVOC_DIR/payloads/backup -# Apply source mutations first (before building) -log "Applying implant mutations with signature: $RANDOMIZED_BUILD_ID" -# We'll skip the metadata.go modification since it's not essential +# Initialize submodules +log "Initializing submodules..." +cd $HAVOC_DIR +git submodule init +git submodule update --recursive -# Create implant mutator script +# Create implant mutator script BEFORE building log "Creating implant mutator script..." cat > "$IMPLANT_MUTATOR_SCRIPT" << 'EOF' #!/bin/bash @@ -93,7 +102,7 @@ cat > "$IMPLANT_MUTATOR_SCRIPT" << 'EOF' # Randomizes critical implant signatures to avoid detection # === CONFIG === -HAVOC_ROOT="${HAVOC_ROOT:-$HOME/Tools/Havoc}" +HAVOC_ROOT="${HAVOC_ROOT:-$HOME/Tools/havoc}" IMPLANT_DIR="$HAVOC_ROOT/payloads/Demon" SRC_DIR="$IMPLANT_DIR/src" OUTPUT_DIR="$HAVOC_ROOT/payloads" @@ -550,22 +559,34 @@ EOF chmod +x "$IMPLANT_MUTATOR_SCRIPT" -# Build Havoc teamserver with custom compiler flags -log "Building Havoc teamserver..." +# Perform mutations BEFORE building - this is critical +log "Running implant mutations script before building..." +if [ -d "$HAVOC_DIR/payloads/Demon" ]; then + $IMPLANT_MUTATOR_SCRIPT --no-functions + if [ $? -ne 0 ]; then + log "Warning: Implant mutation script ran with errors, but continuing build..." + fi +else + log "Skipping implant mutations as Demon directory not found yet. Will be applied after build." +fi + +# Install additional Go dependencies for the teamserver +log "Installing Go dependencies for teamserver..." cd $HAVOC_DIR/teamserver -export EXTRA_GOFLAGS="-ldflags=-buildid=$(random_string 16)" -go build -trimpath -ldflags="-w -s -buildid=$(random_string 16)" -o havoc main.go +go mod download golang.org/x/sys +cd $HAVOC_DIR + +# Build Havoc using make - build teamserver first +log "Building Havoc teamserver..." +cd $HAVOC_DIR +make ts-build # Build Havoc client log "Building Havoc client..." -cd $HAVOC_DIR/client -mkdir -p build -cd build -cmake -GNinja .. -ninja +make client-build # Create systemd service for Havoc -log "Creating systemd service for Havoc Teamserver..." +log "Creating systemd service for Havoc teamserver..." cat > /etc/systemd/system/havoc.service << EOF [Unit] Description=Advanced Security Service @@ -576,7 +597,7 @@ Type=simple User=root Group=root WorkingDirectory=$HAVOC_DIR/teamserver -ExecStart=$HAVOC_DIR/teamserver/havoc server -d +ExecStart=$HAVOC_DIR/havoc server -d Restart=always RestartSec=10 @@ -591,23 +612,16 @@ EOF # Set proper permissions log "Setting proper permissions..." -chmod 755 $HAVOC_DIR/teamserver/havoc -chmod 755 $HAVOC_DIR/client/havoc +chmod -R 755 $HAVOC_DIR # Create symlinks to executables in /usr/local/bin -ln -sf $HAVOC_DIR/teamserver/havoc /usr/local/bin/havoc-server -ln -sf $HAVOC_DIR/client/havoc /usr/local/bin/havoc-client +ln -sf $HAVOC_DIR/havoc /usr/local/bin/havoc ln -sf $IMPLANT_MUTATOR_SCRIPT /usr/local/bin/havoc-mutate -# Run the implant mutator -log "Running initial implant mutation..." -$IMPLANT_MUTATOR_SCRIPT --no-functions - # Enable and start Havoc service log "Enabling and starting Havoc service..." systemctl daemon-reload systemctl enable havoc systemctl start havoc -log "Havoc C2 installation completed successfully!" -log "Use the template-based configuration for additional setup." \ No newline at end of file +log "Havoc C2 installation completed successfully!" \ No newline at end of file