Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Довольно часто разработчики защит читают содержимое окна, посылая ему сообщение WM_GETTEXT. Это ставит в тупик неопытных кракеров. Установка точек останова на GetWindowsText и GetDIgItemText ни к чему не приведет. В таком случае необходимо использовать шпионские средства для анализа взаимодействия приложения с окном. Б Windows все делается посредством сообщений, поэтому их перехват позволит выяснить алгоритм работы защитного механизма.
Выбор программ-шпионов достаточно широк. Очень неплохо для этой цели подходит ВС от NuMega, однако достаточно и более скромных средств. Например, распространяемый вместе с Microsoft Spy++ (см. рис. на следующей странице).
Рассмотрим полученный рапорт:
ОООООЕ9С S. WM_GETTEXT cchTextMax:30 lpszText:0063F750
ОООООЕ9С R.WM_GETTEXT cchCopied:^ ipszText:0063F750 ("Kris Kasperski")
Умница spyxx даже показал адрес, по которому считанная строка располагается в памяти. Впрочем, он мало что нам дает. Скорее всего буфер расположен в стеке, и активно используется приложением. Нам необходимо перехватить WM_GETTEXT непосредственно в отладчике. Для этого нужно знать дескриптор окна. В этом нам и поможет шпион.
Перехват сообщений в Soft-lcc осуществляется командой BMSG. Подробности ее использования можно найти в документации или встроенной помощи. После ввода строки в окно редактирования и нажатия на ENTER отладчик всплывет со следующим сообщением:
Break due to BMSG 1.1429 WV. GETTEXT (ET=513.11 milliseconds)
HWnd=0428 wParam = 001E 1Param = 28D70000 msd=000D WM_GETTEXT
Обратите внимание, что мы находимся в 16-разрядном сегменте н IParam это не 32-битное смещение, а 16-битное сегмент:смещение. Убедиться и этом можно, если вывести дамп этой области и дождаться выхода из процедуры. Если все сделано правильно, то в окне дамна окажется введенная строка. Теперь можно поставить на нее точку останова и обнаружить манипулирующий с ней код.
Впрочем, в данном примере он отсутствует. CrackOA просто демонстрирует один иа вариантов обмена с окном. Аналогичным образом происходит и динамический обмен с окном. Подробное изложение его механизма несложно для понимания, и его можно найти в MSDN. Приблизительно же происходит следующее. Если содержимое окна изменено, то оно посылает сообщение EN_CHANGE, (через WM_COMMAND), в ответ ему приходит запрос WM_GETTEXT. Такой механизм очень популярен и используется многими программистами. С другой стороны, все, что делает GelWindowText, — это посылает окну WM_GETTEXT и возвращает полученный результат.
Фактически удобнее и быстрее всегда перехватывать именно это сообщение, а не функции API или библиотек, которые очень трудно удержать в голове.
Дата публикования: 2014-11-18; Прочитано: 378 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!