
Módulo de keylogging para Windows del framework de implantes Sliver C2, que utiliza Raw Input para capturar las pulsaciones de teclas y expone comandos de inicio, detención y recuperación a los operadores.
Esta extensión para Sliver fue escrita principalmente como un ejercicio de aprendizaje
sobre cómo maneja Sliver las extensiones.
Quiero agradecer a todo el equipo de Sliver por su trabajo en este framework público de implants. Quisiera agradecer especialmente a @rkervell por responder muchas de mis preguntas sobre cómo maneja Sliver sus extensiones.
Básicamente utiliza raw input. Esto tiene ventajas y desventajas frente a otros métodos comunes de keylogging.
Me gusta porque no requiere inyectarse en otros binarios, ni requiere consultar una llamada determinada con frecuencia y potencialmente perderse resultados.
Este código es en parte trabajo propio y en parte una mezcla de ejemplos encontrados por internet.
Abra el archivo de solución con Visual Studio 2019 y compile las versiones x86 y x64.
Hasta que esto se incluya potencialmente en el armory, puede compilarse en un sistema Windows. Luego, la carpeta $(solutiondir)\bin resultante puede colocarse en el cliente de Sliver
y se puede ejecutar extensions install <path to folder> para instalar la extensión. Puede que necesite reiniciar o también ejecutar extensions load <path to folder>.
raw_keylogger <cmdid>
Los siguientes cmdid son válidos:
0 = stop
1 = start
2 = get keystrokes
si todo sale bien, se verá así

La API de Sliver tiene las siguientes dos partes principales
typedef int (*goCallback)(const char*, int);
extern "C" {
__declspec(dllexport) int __cdecl entrypoint(char* argsBuffer, uint32_t bufferSize, goCallback callback);
}
el implant llamará al "entrypoint" tal como se define en el archivo .json. Apunta a su función de entrypoint (no tiene que tener ese nombre, solo siga la firma).
goCallback es una función para devolver la salida a Go. Se llama así: callback(string, string_length)
Al codificar la extensión, por ahora "name" y "command_name" deben coincidir; de lo contrario, el implant recargará su extensión en cada llamada.
Al momento de escribir esto, las extensiones no BOF no admiten argumentos fuertemente tipados, por lo que todo lo proporcionado en la CLI después del nombre del comando se enviará como una cadena. Debe manejarlo desde allí en el lado del código nativo de la extensión.