Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Ответ
 
Опции темы
Старый 28.02.2016, 23:29   #1
 Разведчик
Аватар для HideFebruary
 
HideFebruary лучик света в грозовом небеHideFebruary лучик света в грозовом небеHideFebruary лучик света в грозовом небеHideFebruary лучик света в грозовом небеHideFebruary лучик света в грозовом небеHideFebruary лучик света в грозовом небеHideFebruary лучик света в грозовом небе
Регистрация: 25.02.2016
Сообщений: 5
Популярность: 771
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 5 сообщениях
 
Post KeyLogger [0]

Вводная часть по написанию кейлоггера.
Требования к рабочему месту: Visual Studio Community 2015; .NET Framework 4.6.

Идею подкинул один товарищ который опубликовал данную тему: http://zhyk.ru/forum/showthread.php?t=1011202

Сам я до этого никогда не писал подобные вещи и мне стало интересно. По ссылке я мало чего понял. Излишние комментарии, нечитабельный код и отсутствие хоть каких-нибудь объяснений.

После недолгой и мучительной медитации я все-таки понял, что делает вброшенный код, нашел единственную полезную строчку и скопипастил её.

Код:
[DllImport ( "User32.dll" )]
private static extern short GetAsyncKeyState ( Keys key );
Данный метод WinApi, как можно догадаться, получает состояние интересующей нас клавиши. После быстрых тестов обнаружил, что метод возвращает три разных значения, но нам подойдет только одно из них: -32767. Значение символизирует нажатие кнопки, что нам и нужно.

Теперь единственное, что нам нужно это пропустить через метод интересующие нас клавиши. Все клавиши перечислены в перечислении (простите за тавтологию) Keys. Как Вы наверное знаете (хотя скорее нет), в классе Enum есть замечательный метод с названием GetValues, который коллосально уменьшит код и упростит нам задачу.

У каждой клавиши есть свой номер, в перечислении Keys определены названия и номера клавиш, например: Keys.A = 65. Эти номера нужны для получения состояний.

Я создал класс под названием KeyState и добавил в него такой метод:
Код:
public bool IsPressing ( Keys key )
            => GetAsyncKeyState ( key ) == PRESSING;
Константа PRESSING в нашем классе равна значению нажатия клавиши:
Код:
private const int PRESSING = -32767;
Так как мы пишем кейлоггер, добавим метод который вернет все нажатые клавиши по запросу:
Код:
public IEnumerable<Keys> GetPressingKeys ()
            => Enum.GetValues ( typeof ( Keys ) ).Cast<Keys> ().Where ( IsPressing );
Метод делает следующее:
  • Enum.GetValues ( typeof ( Keys ) ) - возвращает коллекцию значений нужного нам перечисления, то есть значения всех клавиш.
  • .Cast<Keys> () - преобразует каждый элемент коллекции в значение типа Keys.
  • .Where ( IsPressing ); - возвращает из всего списка только те клавиши, которые удовлетворяют нашему методу, то есть нажатые.
А вообще учите Linq, очень крутая штука

Итак, теперь необходимо проверить работу нашего класса, запишем в мейне такой цикл:
Код:
var keyState = new KeyState();

while ( true )
{
   foreach( var key in keyState.GetPressingKeys () )
   {
      WriteLine ( key.ToString () );
   });

   Thread.Sleep (100);          
}
Пример работы на скрине:
Спойлер

На этом всё. В спойлере весь исходный код:
Спойлер

А это следующая статья по этой тематике: KeyLogger [1]

Последний раз редактировалось HideFebruary; 04.03.2016 в 19:50. Причина: добавил цвета
  Ответить с цитированием
Пользователь сказал cпасибо:
Sinyss (23.05.2016)
Ответ

Метки
c sharp, dotnet, keylogger


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C#] keylogger zZkamedosZz C# 5 07.02.2016 05:25
[Программа] KGB Keylogger alexmaggot Школа Читера 2 16.01.2015 12:15
Keylogger dimabb Архив 1 06.05.2012 00:55

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 23:27.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net