
Indirekter dynamischer Syscall, SSN + Syscall-Adresssortierung mittels modifiziertem TartarusGate-Ansatz + Remote-Prozess-Injection via APC Early Bird + Erzeugt einen Opferprozess als Zielprozess + (ACG+BlockDll)-Minderungsrichtlinie auf erzeugtem Prozess + PPID-Spoofing + API-Auflösung vom TIB + API-Hashing
Ein anpassbares Dropper-Tool für Windows.
Nachteil: Wenn Threads fortgesetzt werden, werden alle Ereignisse, die während der Sperrung des Ereignisprotokolls aufgetreten sind, erneut protokolliert!
Also dachte ich, sie stattdessen zu töten!
„Es ist invasiver als das Anhalten, aber die Entscheidung liegt immer beim Bediener. Außerdem wird das Töten von Threads auf Kernel-Ebene protokolliert.“ - @SEKTOR7net
Directly via VS compiler:


./compile.bat
PS C:> .\x64\Release\indirect.exe
[!] Wrong!
[->] Syntax: .\x64\Release\indirect.exe <PPID to spoof>
https://github.com/reveng007/DarkWidow/assets/61424547/62a90c5b-84af-4389-8ddc-9f7926debdcf

TIB:
GS- und FS-Register:
PEB-LDR-Struktur:
BlackHat - Was Malware-Autoren nicht wollen, dass Sie wissen - Evasive Hollow Process Injection von @monnappa22
Ein Bild des Prozessspeichers aus dem obigen Link:

Von labs.cognisys.group, einem Blog von @D1rkMtr
:

TIB -> TEB -> PEB -> Nt-API auflösen und API-Hashing
https://stackoverflow.com/questions/41277888/iterating-over-peb-dllname-shows-only-exe-name
https://doxygen.reactos.org/d7/d55/ldrapi_8c_source.html#l01124
labs.cognisys.group, einem Blog von @D1rkMtr
Ein Bild des Snippets aus dem obigen Link, das ich hier verwendet habe, um die API dynamisch aufzulösen, ohne Offsets hart zu codieren:

Der API-Hashing-Code, den ich angewendet habe:
#include <stdint.h>
#include <stdio.h>
#include <Windows.h>
DWORD64 djb2(const char* str)
{
DWORD64 dwHash = 0x7734773477347734;
int c;
while (c = *str++)
dwHash = ((dwHash << 0x5) + dwHash) + c;
return dwHash;
}
int main(int argc, char** argv)
{
if (argc < 2)
{
printf("[!] Wrong!\n");
printf("[->] Syntax: .\\%s <NTFuncName>\n\n", argv[0]);
return 1;
}
const char* string = argv[1];
DWORD64 hashvalue = djb2(string);
printf("Hash Value: 0x%llX\n", hashvalue);
return 0;
}
ACG (Arbitrary Code Guard)/BlockDll-Mitigationsrichtlinie:

PPID-Spoofing-Erkennung:
Moneta-Erkennung und PESieve-Erkennung:\
