
Module de keylogging Windows pour le framework d'implant Sliver C2, utilisant Raw Input pour capturer les frappes clavier et exposer les commandes de démarrage, d'arrêt et de récupération aux opérateurs.
Cette extension pour sliver a été écrite principalement comme exercice d'apprentissage
sur la manière dont sliver gère les extensions.
Je tiens à remercier toute l'équipe de Sliver pour son travail sur ce framework d'implant public. Je tiens tout particulièrement à remercier @rkervell pour avoir répondu à nombre de mes questions concernant la façon dont sliver gère ses extensions.
Essentiellement, il utilise l'entrée brute. Cela présente des avantages et des inconvénients par rapport aux autres méthodes courantes d'enregistrement de frappe.
Je l'apprécie car elle ne nécessite pas d'injection dans d'autres binaires, ni d'interroger fréquemment un appel donné avec le risque de manquer des résultats.
Ce code est en partie mon propre travail et en partie un assemblage d'exemples trouvés sur Internet.
ouvrez le fichier solution avec Visual Studio 2019, puis compilez les versions x86 et x64.
Jusqu'à ce que cette extension soit éventuellement incluse dans l'armory, elle peut être compilée sur un système Windows. Ensuite, le dossier $(solutiondir)\bin résultant peut être placé sur le client sliver,
et extensions install <path to folder> peut être exécuté pour installer l'extension. Vous devrez peut-être redémarrer ou également exécuter extensions load <path to folder>.
raw_keylogger <cmdid>
les cmdid suivants sont valides :
0 = stop
1 = start
2 = get keystrokes
si tout se passe bien, cela ressemblera à ceci :

L'API de Sliver comporte les deux principales parties suivantes :
typedef int (*goCallback)(const char*, int);
extern "C" {
__declspec(dllexport) int __cdecl entrypoint(char* argsBuffer, uint32_t bufferSize, goCallback callback);
}
l'implant appellera l'« entrypoint » tel que défini dans le fichier .json. Il pointe vers votre fonction d'entrée (elle n'a pas à porter ce nom, il suffit de suivre la signature).
goCallback est une fonction permettant de renvoyer la sortie à go. Elle est appelée comme ceci : callback(string, string_length)
Pour l'instant, lors du codage de l'extension, « name » et « command_name » doivent correspondre, sinon l'implant rechargera votre extension à chaque appel.
À l'heure actuelle, les extensions non-BOF ne prennent pas en charge les arguments fortement typés, donc tout ce qui est fourni sur la cli après le nom de la commande sera envoyé sous forme de chaîne. Vous devez le gérer à partir de là du côté du code natif de l'extension.