This is a machine translation. The original page (in English) is available here.
Окна
Мак ОС
Мобильный

Последние новости: 19 сентября, 2016 - мы добавили новые категории для контроля испытаний продукции: микрофон и веб-камера, запись и т. д... RSS канал

Главная>Статьи>Клавиатура Крюк

AnyKeylogger для Mac

Хук Клавиатуры

по Аркон

Крючок-это механизм, с помощью которого функция может перехватывать события, прежде чем они достигнут приложения. Функция может действовать на события, изменить или отменить их. Функции, которые принимают события называются функции фильтра, каждый фильтр функция классифицируется по типу. Крючки обеспечивают мощные возможности: процесс или изменять каждое сообщение; записывать и воспроизводить события клавиатуры и мыши; не допустить очередного фильтра от того, чтобы называться; и многие другие возможности... в общем, есть два вида крючков: общесистемные и конкретных нитей.Общесистемный Хук используется для фильтрации Сообщений всех приложений(то есть: при записи кейлоггера). И нить конкретным крюк используется для фильтрации сообщений от конкретного потока. В этом уроке, я рассмотрю только общесистемный Хук клавиатуры. Для установки системных ловушек нужны библиотеки dll.

Dll-это косвенным образом исполняемого файла, который не имеет петли Сообщений, чтобы получить ввод пользователя. Библиотеки отдельные файлы, содержащие функции(не только), которые могут вызываться программами и другими dll. Для конечного пользователя dll-это программа, которая не может быть выполнена прямо из программы яслях(или другой оболочки), но от системы точки зрения, есть два различия между dll и приложения: библиотеки dll не может иметь несколько экземпляров, загруженной в память. и dll примазывается к процессам, только случаи применения процессов. Библиотеки dll расшифровывается как Dynamic-динамически Подключаемая Библиотека.Динамической компоновки представляет собой механизм для связывания библиотек для приложений во время выполнения. Эти библиотеки(dll) находиться в их собственные исполняемые файлы(.dll) и не копируются в исполняемые файлы приложений(.exe), как со статической компоновки. Важно понимать, что .Dll загружается в адресное пространство указанного связывания приложения, а не в глобальной куче! Преимущества использования динамического метода сшивания:
Они могут быть обновлены без необходимости применения повторной компиляции или перекомпоновка.
Когда несколько приложений используют тот же .Библиотеки dll .Dll очень просто после загрузки всех приложений(снижение памяти и дискового пространства).

Почему нам нужен dll для системных ловушек происходит потому, что мы хотим, чтобы функция фильтра будет в любом адресное пространство приложения. Поэтому, когда вы выбираете функцию фильтра Сообщений крюк который лежит в .dll файлы для Windows карты .dll файлы автоматически во всех приложениях адресном пространстве. Таким образом Вы получите свои функции фильтр для каждого процесса! Поэтому, когда мы динамическое связывание крюк, который находится в .Dll, он будет системных ловушек(конечно это зависит от тоже типа фильтр). Хорошо, теперь после важного теоретического материала..
Давайте приступать к написанию кода .Dll для общесистемный Хук клавиатуры, а затем я объясню, как динамическое связывание .Dll в наше приложение.
Пожалуйста, загрузите исходный код для того, чтобы увидеть, как это все написано и сделано.

// Это наша клавиатура обратного срабатывания:
// И _declspec(dllexport) или означает, что мы хотим, чтобы другие
// приложений/библиотек dll вызывать эту функцию, в некоторых случаях не
// нужно этот префикс, но для безопасности мы будем использовать его.
И _declspec(dllexport) или LRESULT обратного вызова KBHookProc(код int,
Параметр wparam параметр wparam, lparam должен параметр lparam)
{
// Если код меньше 0 звоним на следующий крючок,
// это, как крючки работают, ничего особенного
если (код < 0) возврат(CallNextHookEx(hhook, код, параметр wparam, lparam должен));

// Информация о том, что происходит с клавиатурой
если (параметр lparam & (1 << 31)) // бит 31 говорит ли клавиша вниз

// Вызова на следующий крючок.
возвращение(CallNextHookEx(hhook, код, параметр wparam, lparam должен));
}

// Это же как winmain в Майне, но и для библиотек,
// получения экземпляра проблемы, причины как .Библиотеки dll вызывается, защищены.
Типа bool APIENTRY функции dllmain(hInstance HINSTANCE, типа DWORD dwReason,
Lpvoid в lpReserved)
{
// На самом деле существует 4 причины, мы будем обрабатывать только 2 из них,
// потому что это достаточно для наших прог.
если (dwReason == класс dll_process_attach) // Загрузка .Dll файлы
{
если(pcount == 0)
{
// Инит // первый раз загрузка
// Установить крюк..
}
pcount++;
}
еще если (dwReason == как dll_process_detach)
{
// UnInit перед освобождает .Dll из памяти.
если(pcount == 1)
{
// Бесплатно
// Убить крюка..
}
pcount--;
}
возврат(1);
}

Вы видите, это довольно легко, я бы сказал. В любом случае, pcount наш процесс счетчик, он говорит, сколько раз .Dll был вызван. pcount-это специальная переменная, она должна быть в глобальной куче, потому что если его не будет то каждый раз в нашей .Библиотеки dll вызывается, он будет инициализирован с 0 снова и снова...поэтому для того, чтобы предотвратить это, мы говорим компилятору поместить переменную в глобальной куче. Мы делаем это для крючка, ручки тоже, потому что крючок только один раз. Если мы устанавливаем крюк каждый раз, когда .Библиотеки dll вызывается, это будет изгадил крюк и он не будет работать должным образом, и как мы желаем!Для того, чтобы сообщить компилятору, что мы хотим, чтобы положить переменную в глобальной куче мы делаем это:

в #Pragma data_seg("SharedBlock")
HHOOK hhook = нуль;
Тип int pcount = 0;
с #Pragma data_seg()

Заметьте, каждая переменная должна быть инициализирована. ок, мы собираемся HHOOK hhook = нуль; неподписанных длительное нажатие клавиш = 0; и int pcount = 0; С #Pragma data_seg() мы только закончили писать .Dll файлы каждый .Dll файл должен иметь .Def файл непосредственно компилятор. В .Def файл, мы расскажем в компилятор функции, которые мы хотим экспортировать, да, те с и _declspec(dllexport) или, и мы сообщим компилятору о общий блок данных. (См. исходный код для полного понимания .Файл Def).После того, как .Dll файл будет готов, вы должны скопировать его в приложение, которое загружает .Каталог библиотеки dll и скопировать его в папку %windir%\система.

ОК, вот и все .В dll запихнуть, сейчас загрузим .Dll-файл мы создали! Сначала мы должны объявить указатели на функции с параметрами, которые они получают.

typedef в пустоту (*LPFunction)(недействительными);
LPFunction функции = значение NULL;

// Это указатель на функцию, которой нет
// параметров и возвращает пустоту.

HMODULE DLLmodule = ошибка при вызове loadlibrary("mydll.dll");
если (!DLLmodule) // .Dll файл не найден!

// Эта функция получает код конкретного хотел, функция памяти,
// Обратите внимание на заглавные буквы, хотела, чтобы имя функции должно быть точно,
// как .Файл Def и .Cpp файл ДЛЛ мы писали.

функция = (LPFucntion)GetProcAddress(DLLmodule, "функция");
если (!функция) осуществления // код функции не нашел!

// Теперь можно вызывать функцию.
функция();

// После завершения использования .Dll файлы, не забудьте освободить его!
Метод Freelibrary(DLLmodule);

Ура, вот оно!! Ну, это только основы, и это не сработает, если вы копировать вставить.
Прочитать полный текст статьи
Главная>Статьи>Клавиатура Крюк
Важно! Установка средств мониторинга компьютеров Вы не владеете или не имеете разрешение монитора может нарушить местным, государственным или Федеральным законом.
Предложить перевод