
Модуль кейлоггинга для Windows в составе имплант-фреймворка Sliver C2, использующий Raw Input для захвата нажатий клавиш и предоставляющий операторам команды запуска, остановки и получения данных.
Это расширение для sliver было написано в основном как учебное упражнение
по изучению того, как sliver обрабатывает расширения.
Я хотел бы поблагодарить всю команду Sliver за их работу над этим публичным имплант-фреймворком. Особую благодарность хочу выразить @rkervell за ответы на многие мои вопросы, связанные с тем, как sliver обрабатывает свои расширения
По сути, здесь используется raw input. У этого подхода есть преимущества и недостатки по сравнению с другими распространёнными методами кейлоггинга.
Он мне нравится, потому что не требует внедрения в другие бинарные файлы, а также не требует частого опроса определённого вызова с возможной потерей результатов.
Этот код частично является моей собственной работой, а частично смесью примеров, найденных в интернете.
Откройте файл решения с помощью Visual Studio 2019 и соберите версии x86 и x64.
Пока это не будет потенциально включено в armory, его можно собрать в системе Windows. Затем полученную папку $(solutiondir)\bin можно разместить в клиенте sliver
и выполнить extensions install <path to folder> для установки расширения. Возможно, потребуется перезапустить или также выполнить extensions load <path to folder>
raw_keylogger <cmdid>
допустимы следующие cmdid
0 = stop
1 = start
2 = get keystrokes
если всё идёт хорошо, это будет выглядеть так

API Sliver имеет следующие две основные части
typedef int (*goCallback)(const char*, int);
extern "C" {
__declspec(dllexport) int __cdecl entrypoint(char* argsBuffer, uint32_t bufferSize, goCallback callback);
}
имплант вызовет "entrypoint", как определено в файле .json. Он указывает на вашу функцию entrypoint (не обязательно, чтобы она называлась именно так, просто следуйте сигнатуре)
goCallback — это функция для возврата вывода в go. Она вызывается так: callback(string, string_length)
При написании расширения на данный момент "name" и "command_name" должны совпадать, иначе имплант будет перезагружать ваше расширение при каждом вызове.
На момент написания этого текста расширения, не являющиеся BOF, не поддерживают строго типизированные аргументы, поэтому всё, что передаётся в cli после имени команды, отправляется в виде строки. Дальнейшую обработку нужно выполнять на стороне нативного кода расширения.