
Syscall dynamique indirect, tri des adresses SSN + Syscall via approche TartarusGate modifiée + Injection de processus distant via APC Early Bird + Génère un processus sacrificiel comme processus cible + Politique d'atténuation (ACG+BlockDll) sur le processus généré + Usurpation de PPID + Résolution d'API depuis TIB + Hachage d'API
Un outil dropper personnalisable ciblant Windows.
Inconvénient : Si les threads sont repris, tous les événements survenus pendant la suspension du journal des événements sont à nouveau enregistrés !
Donc, j'ai pensé à les tuer à la place !
"C'est plus invasif que la suspension, mais la décision revient toujours à l'opérateur. De plus, tuer des threads est journalisé au niveau du noyau" - @SEKTOR7net
Directement via le compilateur VS :


./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 :
Registres GS et FS :
Structure PEB LDR :
BlackHat - What Malware Authors Don't Want You to Know - Evasive Hollow Process Injection par @monnappa22
Une image de la mémoire du processus depuis le lien ci-dessus :

Depuis labs.cognisys.group, un blog de @D1rkMtr
:

TIB -> TEB -> PEB -> Résoudre Nt API et hachage d'API
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, un blog de @D1rkMtr
Une image de l'extrait du lien ci-dessus, que j'ai utilisé ici pour résoudre dynamiquement l'API sans coder en dur les offsets :

Le code de hachage d'API que j'ai appliqué :
#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;
}
Politique d'atténuation ACG (Arbitrary Code Guard)/BlockDll :

Détection de l'usurpation de PPID :
Détection Moneta et PESieve :\
