
Modulo di keylogging per Windows per il framework di implant Sliver C2, che utilizza Raw Input per catturare le sequenze di tasti ed esporre agli operatori comandi di avvio, arresto e recupero.
Questa estensione per sliver è stata scritta principalmente come esercizio di apprendimento
su come sliver gestisce le estensioni.
Vorrei ringraziare l'intero team di Sliver per il loro lavoro su questo framework implant pubblico. Vorrei ringraziare in particolare @rkervell per aver risposto a molte delle mie domande relative a come sliver gestisce le sue estensioni
Fondamentalmente utilizza raw input. Questo presenta vantaggi e svantaggi rispetto ad altri comuni metodi di keylogging.
Mi piace perché non richiede l'iniezione in altri binari, né richiede di interrogare frequentemente una determinata chiamata con il rischio di perdere risultati.
Questo codice è in parte lavoro mio e in parte un insieme di esempi trovati in giro per internet.
aprire il file della soluzione usando Visual Studio 2019 e compilare le versioni x86 e x64
Fino a quando non verrà potenzialmente incluso nell'armory, può essere compilato su un sistema Windows. In seguito, la cartella $(solutiondir)\bin risultante può essere posizionata sul client sliver
e si può eseguire extensions install <path to folder> per installare l'estensione. potrebbe essere necessario riavviare o anche eseguire extensions load <path to folder>
raw_keylogger <cmdid>
i seguenti cmdid sono validi
0 = stop
1 = start
2 = get keystrokes
se tutto va bene apparirà così

L'API di Sliver ha le seguenti due parti principali
typedef int (*goCallback)(const char*, int);
extern "C" {
__declspec(dllexport) int __cdecl entrypoint(char* argsBuffer, uint32_t bufferSize, goCallback callback);
}
l'implant chiamerà l'"entrypoint" come definito nel file .json. punta alla tua funzione entrypoint (non deve necessariamente avere quel nome, basta seguire la firma)
goCallback è una funzione per restituire l'output a Go. viene chiamata come callback(string, string_length)
Quando si programma l'estensione, per ora "name" e "command_name" devono corrispondere, altrimenti l'implant ricaricherà la tua estensione a ogni chiamata.
Al momento in cui scrivo, le estensioni non-BOF non supportano argomenti fortemente tipizzati, quindi tutto ciò che viene fornito sulla CLI dopo il nome del comando verrà inviato come stringa. devi gestirlo da lì lato codice nativo dell'estensione.