Дрессированные окна Александр Гайша Хакер, номер #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; |