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

Последние новости: 12 ноября 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(код инт
Параметр 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) // Загрузка .ДЛЛ
{
если(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);

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