Программирование на C++ глазами хакера


Динамическая библиотека для расшифровки паролей - часть 2


#include <windows.h> #include "stdafx.h" #include "OpenPassDLL.h"

HHOOK SysHook; HWND Wnd; HINSTANCE hInst;

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { hInst=(HINSTANCE)hModule; return TRUE; }

LRESULT CALLBACK SysMsgProc(

int code, // hook code (код ловушки) WPARAM wParam, // removal flag (флаг) LPARAM lParam // address of structure with message // (адрес структуры с сообщением) ) { //Передать сообщение другим ловушкам в системе CallNextHookEx(SysHook, code, wParam, lParam);

//Проверяю сообщение if (code == HC_ACTION) { //Получаю идентификатор окна сгенерировавшего сообщение Wnd=((tagMSG*)lParam)->hwnd;

//Проверяю тип сообщения. //Если была нажата левая кнопка мыши if (((tagMSG*)lParam)->message == WM_RBUTTONDOWN) { SendMessage(Wnd, EM_SETPASSWORDCHAR, 0, 0); InvalidateRect(Wnd, 0, true); } }

return 0; }

///////////////////////////////////////////////////////////////////

DllExport void RunStopHook(bool State, HINSTANCE hInstance) { if (true) SysHook = SetWindowsHookEx(WH_GETMESSAGE, &SysMsgProc, hInst, 0); else UnhookWindowsHookEx(SysHook); }

Разберем подробно исходный код динамической библиотеки. В самом начале подключаются заголовочные файлы. OpenPassDLL.h — это созданный нами файл, в котором объявлены макрос и функция, которая будет экспортирована.

Далее идет определение глобальных переменных библиотеки. Их будет три:

  • SysHook — идентификатор ловушки системных сообщений;
  • Wnd — указатель на окно (со звездочками), в котором щелкнул пользователь. Эту переменную можно было сделать и локальной, но я решил ее вынести в глобальную область для последующего использования;
  • HInst — идентификатор экземпляра библиотеки.

Описания закончены. В области программы первой идет функция DllMain. Это стандартная функция, которая выполняется при загрузке библиотеки. В ней можно производить действия по начальной инициализации. В нашем случае ничего инициализировать не надо, но в качестве первого параметра этой функции мы получаем экземпляр библиотеки, который сохраняем в переменной hInst.




Начало  Назад  Вперед



Книжный магазин