Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #86, ФЕВРАЛЬ 2006 г.

Дрессированные окна

Александр Гайша

Хакер, номер #086, стр. 086-116-6


Какой переборщик вышел у меня в итоге, ты можешь посмотреть, если залезешь на диск. Очень советую как следует изучить сорцы, чтобы ухватить все нюансы, упущенные в этой статье ;).

[вот, собственно, и все]

Вот и пришло время заканчивать сие утомительное повествование. Ты теперь знаешь, как взаимодействовать с чужими окнами, сможешь их находить, считывать текст, заполнять поля, изменять текст и содержимое окон, в общем, творить все, что душе угодно. Да и не техническая сторона тут важна. Главное состоит в том, что можно без разбирательств во внутренней логике системы защиты взломать ее с довольно приличной скоростью, хотя и на порядки меньшей, чем перебор по внутреннему алгоритму системы. Зато не надо разбираться в ассемблерных кодах и прочих потрохах, так как система все сделает сама, а ты знай себе, чай с вареньем попивай, а не пальцы об клаву гаси. И, если не получится таким методом пароль снять, только потом уже засядешь за сложные вещи, всякие там реверсы и инженеринги.

Теперь разреши откланяться и пожелать тебе, чтобы все взламываемые пароли не выходили за рамки банального «1» и всегда отыскивались.

сообщения windows

Сообщение windows – это структура или запись, которая содержит 6 полей: хэндл целевого окна, идентификатор сообщения (то есть его номер), два параметра – wParam (2 байта) и lParam (4 байта), время возникновения сообщения и координаты курсора в этот момент.

hwind:HWND;

mess:UINT;

wPar:WPARAM;

lPar:LPARAM;

time:DWORD;

pt:POINT;

В оконную функцию передаются только первые 4 поля.

[определение оконной процедуры]

UINT WndProc(hwind:HWND; mess:UINT; wPar:WPARAM; lPar:LPARAM); stdcall;

Меньший параметр обычно используется для передачи каких-либо смысловых численных значений. Например, пользователь нажал на кнопку с номером таким-то, и он передался через wParam. Четырехбайтный параметр lParam обычно содержит какой-либо имеющий смысл для данного сообщения адрес. Например, адрес строки, которая передается окну.

поиск окон

Простой поиск окна по его заголовку обычно делают функцией FindWindow.

function FindWindow(lpClassName: LPCTSTR; lpWindowName: LPCTSTR):HWND;

Первый параметр – указатель на строку с именем класса окна. Обычно здесь ставим nil, так как имя класса нам обычно неизвестно. А вот второй параметр – указатель на строку с заголовком окна - пустым оставлять нельзя ;). Окна ищутся верхнего уровня, то есть обычные окна (включая диалоговые и всякие там плавающие, панели и т.д.), но не элементы управления.

Расширенная версия FindWindowEx позволяет искать окна по известному родительскому окну и первому дочернему, после которого надо искать:

function FindWindowEx(hwndParent: HWND; hwndChildAfter: HWND; lpszClass: LPCTSTR; lpszWindow: LPCTSTR): HWND;

потоки

Потоки – нужная вещь для нормального программирования под винду. Чтобы создать новый поток, надо воспользоваться следующей функцией:

function CreateThread(pThreadAttributes: LPSECURITY_ATTRIBUTES; dwStackSize: DWORD; lpStartAddress: LPTHREAD_START_ROUTINE; lpParameter: LPVOID; dwCreationFlags: DWORD;var lpThreadId: LPDWORD): HANDLE;

Назад на стр. 086-116-5  Содержание  Вперед на стр. 086-116-7