Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
WTSRM2 — Libreria header-only C++17 per lo sviluppo evasivo su Windows: hashing delle API in fase di compilazione, unhooking delle DLL, cancellazione dei breakpoint hardware, rimozione dei VEH e soppressione delle callback di notifica delle DLL per eludere gli hook degli EDR. | Kitploit
Strumenti/GitHubGitHub/rad9800/wtsrm2
Evasione IDS/IPSRed TeamingSviluppo Payload
GitHubrad9800/wtsrm2

WTSRM2

Libreria header-only C++17 per lo sviluppo evasivo su Windows: hashing delle API in fase di compilazione, unhooking delle DLL, cancellazione dei breakpoint hardware, rimozione dei VEH e soppressione delle callback di notifica delle DLL per eludere gli hook degli EDR.

Vedi Repository
164323 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

WTSRM2

Questo è un seguito del mio progetto originale WTSRM e del relativo talk.

Questo progetto è stato riscritto per utilizzare C++17 al fine di creare un template che ci permetta di cambiare facilmente le funzionalità richieste in fase di compilazione! È implementato come un file header-only, così da poterlo aggiungere facilmente ai propri progetti.

Alcune delle funzionalità attualmente implementate includono:

  • Nessuna dipendenza da CRT (binario da 10KB)
  • Unhook di tutte le DLL di Windows tramite patch su '.text' usando \KnownDlls\ o \System32\
  • Uso di VirtualProtect o WriteProcessMemory per il patching
  • API hashing in fase di compilazione
  • Rimozione e ripristino dei Vectored Exception Handler
  • Rimozione delle callback di notifica delle DLL di Ldr
  • Cancellazione dei breakpoint hardware
  • Caricamento di librerie tramite work item

Possiamo configurare questo comportamento come segue

root@kitploit:~
#define HASHING_ALGORITHM hash_string_fnv1a	// algoritmo constexpr

namespace config
{
	...

	//
	// configura il comportamento
	//
	inline constexpr unsigned unhooking = system32 | write_process_memory;
	inline constexpr auto work_item_load_library = true; // usa un work item per LL

	//
	// configura le funzionalità evasive
	//
	inline constexpr auto clear_and_restore_veh = true; // pulisci e ripristina i veh
	inline constexpr auto unregister_dll_notifs = true; // LdrRegisterDllNotification
	inline constexpr auto clear_thread_hwbps = true; // pulisci gli hwbps
}

Poiché utilizziamo constexpr, non paghiamo per le funzionalità che non usiamo, dato che sono codice morto e vengono ottimizzate fuori dal programma.

Uso di questo header

Per importare le DLL, prima dobbiamo creare l'hash usando la macro DLL_HASH

root@kitploit:~
DLL_HASH(DBGHELP, L"DBGHELP.DLL")

Poi dobbiamo aggiungerla a module_address_table che funge da nostro IAT interno. La costante hash_ viene creata dalla macro DLL_HASH. Per le DLL non comuni che non sono sempre caricate, dobbiamo specificare il loro nome in modo da poterle caricare.

root@kitploit:~
inline addr_struct<decltype(HASHING_ALGORITHM(TOKENIZEA(T))), wchar_t> module_address_table[] =
{
	{hash_NTDLL, nullptr,},
	{hash_KERNEL32, nullptr,},
	{hash_DBGHELP, nullptr, L"DBGHELP.DLL"}
};

Per importare funzioni, prima dobbiamo creare l'hash del nome della funzione e il typedef usando la macro HASH_FUNC

root@kitploit:~
HASH_FUNC(NtUnmapViewOfSection, NTSTATUS, HANDLE, PVOID)

Il primo parametro è il nome della funzione, il secondo è il tipo di ritorno, e poi gli argomenti della funzione. Siamo quindi tenuti ad aggiungerla alla nostra api_address_table che verrà popolata con gli indirizzi correnti delle funzioni

root@kitploit:~
inline addr_struct<decltype(HASHING_ALGORITHM(TOKENIZEA(T))), void> api_address_table[] =
{
	{hash_GetProcAddress, nullptr},		
	{hash_NtUnmapViewOfSection, nullptr},

Se non si aggiunge questa funzione alla tabella, il programma non andrà in crash, ma restituirà -1 nel tentativo di aumentare la stabilità.

Per usare un'API, si usa la macro API()() come dimostrato

root@kitploit:~
API(NtWaitForSingleObject)(NtCurrentProcess(), FALSE, &timeout);

Per aggiungere la propria funzione di API hashing, bisogna usare questo template per poter lavorare con i tipi richiesti.

root@kitploit:~
template <typename T>
constexpr auto hash_string_(const T* buffer)
{
	TRIVIAL_TYPE_CHECK()

}

Grazie a queste persone, in nessun ordine particolare, per le loro idee e i loro contributi @peterwintrsmith @modexpblog @jonaslyk @JustasMasiulis

Scarica lo strumento