![]() |
|
![]() ![]() ![]() |
|
kdaemonv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 21.10.2005 Репутация: нет Всего: нет |
Вопрос в следующем:
имеется какая либо программа (к примеру виндовый сапер), и необходимо найти точку входа в процедуру обработки какого-либо события (к примеру, нажатие на кнопку начала игры, или выбор пункта меню, или срабатывание таймера, или ...). С помощью каких утилит можно выцепить эту инфу? И, насколько я понимаю, возможны варианты когда эту инфу можно выцепить напрямую из экзешника, а возможно придется и запускать экзешник (может некоторые объекты будут созданы динамически). Здесь http://forum.vingrad.ru/index.php?showtopic=82319 я начал этот вопрос, но вразумительного ответа не получил. Я прошу не говорить, что мне нужно дизассемблировать программку. Я смотрел такие утилиты как WinSight32 из Дельфи и Spy++ из С++, но то ли я не догнал, где там можно найти инфу такого рода, то ли ее там нет. Насколько я понимаю в винде все является окнами: form, button, label - это все графические объекты (а значит - окно, со своими событиями и свойствами; я конечно же могу быть ой как не прав - ну извините, можете по-ходу объяснить и этот вопрос). А значит когда приложение создает какой-то графический объект (окно, кнопку, надпись), оно должно где-то в системе регистрировать этот объект (наверное номер регистрации - хэндл ![]() И еще: таймер в приложении ведь не графический объект (да и он не один такой). Как узнать адрес процедуры обработки срабатывания таймера или других событий неграфических объектов??? |
|||
|
||||
rsm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
Угадал. Пожалуйста, сколько угодно - перехватывай отладчиком вызов функций CreateWindowEx, DialogBox (и т.д.), а потом перехватывай вызовы оконных функций (см. MSDN). И будешь ты ловить все сообщения от всех контролов всех окон (включая диалоговые). Будет ли от этого польза - тебе виднее (раз уж ты так увлекся именно вызовами). Про таймеры - см. MSDN по SetTimer, SetWaitableTimer, ну и пожалуй плюс еще Sleep. Для программ на Дельфи, которые по сути представляют собой интепретатор + скрипт формы, хорошо помогают проги типа Source Rescuer и DeDe - обычно, там можно сразу подсмотреть адрес функции, отвечающей за обработку какого-либо события. |
|||
|
||||
kdaemonv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 21.10.2005 Репутация: нет Всего: нет |
Спасибо rsm! Ты меня направил на путь истинный ;)
Хоть я и не матерый хакер, но пожалуй имею право тебя немного поправить (тем более, может кому-то понадобится такая же информация - не стоит заставлять его повторять мои поиски). Я тут почитал установленные с Delphi файлы помощи MS SDK (я бы их не читал, не зная какую функцию мне искать) и выяснил что сначала в приложении заполняется структура WNDCLASS*. Затем она регистрируется в системе функцией RegisterClass*. И лишь затем создается окно функцией CreateWindow*. Так вот нужные мне данные это lpfnWndProc в классах WNDCLASS (если искать в стеке - второе двойное слово, начиная с адреса переданного процедуре RegisterClass* - то есть точки останова более результативно и логично ставить на процедуру RegisterClass) и WNDCLASSEX (третье двойное слово). И пару ласковых относительно Delphi - ну они и намудровали ![]() Немного потанцевав с бубном вокруг простейшего приложения на Delphi (сильно не вникая - ну их), сделал следующее заключение: при создании любого окна/контрола параметру lpfnWndProc присваивается ссылка на одну и ту же функцию InitWndProc (из модуля VCL/Controls), которая получая управление меняет этот параметр у уже созданного окна при помощи функции SetWindowLong* с параметром nIndex = GWL_WNDPROC. Так что, при отладке приложений, написанных на Delphi, стоит ставить точки останова и на процедуру SetWindowLong*. Если кто-то хочет что-то уточнить - пишите, с удовольствием почитаю. А относительно таймеров еще не разбирался - скоро разберусь. Еще возникли вопросы вокруг DialogBox и MessageBox - но попробую сам разобраться - теперь хоть знаю в какую сторону рыть. * - значит что я имею ввиду и родственные структуры и процедуры (WNDCLASSEX, CreateWindowsEx etc.) |
|||
|
||||
rsm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
Не всегда ![]() Ставить можно, но только с умом, т.е. с фильтрацией нужных окон и посылаемых им сообщений. В противном случае отладчик просто утонет в вызовах - окон много и каждому посылается куча сообщений. |
|||
|
||||
Maha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 8.3.2006 Репутация: нет Всего: нет |
pohojay problema nahoju proceduri kotorie otve4ayt sa kakoeto deistvie w 4yjom processe i ho4y ih udaleno wisiwaty tak wot injecty etot process dopisiway tyda swoi code no wot wiswaty mne te proceduri ne udaetza proishodit ckrashe proceduri wot code:
4ital 4to mojno eshe DLL , no kakto prosto tupo wresaty w virtualku swoi code mne bolshe nrawitza problema w tom kak prawelno wisiwaty eti proceduri ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |