Сейчас на форуме: _MBK_ (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› как правильно поставить бряк на оконной процедуре в OllyDbg? |
Посл.ответ | Сообщение |
|
Создано: 25 января 2011 02:11 · Поправил: zaichik · Личное сообщение · #1 Друзья! Короче есть прога (она очень проста для взлома), и там два поля для ввода для ввода имени и ключа и кнопка OK, которая активируется, если и имя и ключ будут введены правильно. То есть я сделал вывод, что надо отлавливать сообщения приходящие оконной процедуре окна и далее уже смотреть, как эта процедура их обрабатывает. Куда пихает коды символов и прочее и прочее Ну всё, собсно. В OllyDbg открываю окошко где имена титлы и хэндлы окон программы, и ставлю БЕЗУСЛОВНЫЙ БРЯК на оконную процедуру. Она начинается по адресу 00465274. Ошибиться трудно, там всего три адреса (второй на процедуру по умолчанию, третий на какую-то херь, я не разобрался на какую именно) Но когда ставишь безусловный бряк на 00465274 и потом а дампе видишь, что да, стоит этот бряк, никуда не делся, значит на ЛЮБЫХ сообщения он должен срабатывать! Но он не срабатывает. Хоть мышью вожу по окнам, хоть клавишами тычу хоть что. Вот здесь рассказано, как эту прогу взломать ДРУГИМ способом, Но я хотел бы с бряком с этим разобраться А вот и сама прога, спасибо кто поможет ...Уже и хардварные бряки ставил, ничё не добился, окна только перерисовываются ужасно меделенно, но бряки не срабатывают. ![]() |
|
Создано: 25 января 2011 05:02 · Личное сообщение · #2 |
|
Создано: 25 января 2011 07:30 · Личное сообщение · #3 |
|
Создано: 25 января 2011 14:51 · Личное сообщение · #4 Спасибо, конечно, но моих знаний хватит на то только, чтобы просто бряки на нужные адреса поставить и убедиться- да, бряки срабатывают Откуда взялись эти адреса? Вычислены или ещё как-то? Несомненно, я вернусь к этому вопросу, но не терпится щас узнать +++++++++++++ По оконной процедуре вопрос остаётся открытым. Даже если так искать имя и серийник неэффективно- щас это неважно. Бряк ДОЛЖЕН на ней срабатывать. Не срабатывает. Почему? Вот вопрос. ![]() |
|
Создано: 25 января 2011 17:20 · Личное сообщение · #5 zaichik пишет: Откуда взялись эти адреса? Можно найти в тексте или через утилиты типа DeDe или IDR zaichik пишет: По оконной процедуре вопрос остаётся открытым. Даже если так искать имя и серийник неэффективно- щас это неважно. Бряк ДОЛЖЕН на ней срабатывать. Не срабатывает. Почему? Вот вопрос. Потому, что бряк ставить надо на API вывода окна, а не на 00465274 ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 25 января 2011 18:11 · Личное сообщение · #6 Ответьте пожалуйста на МОЙ вопрос. А всё остальное мне щас не ценно. Итак, есть оконная процедура и есть сообщения, которые посылаются окну. В цикле сообщений TranslateMessageboxA перенаправляет(или ставит в очеред не щзнаю как там) сообщения оконной процедуре. Так их обрабатывает или нет, в зависимости от реализации. Я думаю, что оконная процедура этого окна обрабатывает и нахождение мыши над окном и перемещение мыши и нажитие кнопок на мыши и нажатие клавиш. Если я бряк ставлю на этой процедуре, она должна срабатывать на одном (любом) из этих сообщений. Не срабатывает. Почему? И честное слово, при всём уважении этоIsaev пишет: Потому, что бряк ставить надо на API вывода окна, а не на 00465274 не отвечает на данный вопрос. Можете ответить- ответьте. Может, у меня не хватает теоретических знаний- укажите. А запутывать и без того путаные вещи нехорошо. ![]() |
|
Создано: 25 января 2011 19:25 · Поправил: neomant · Личное сообщение · #7 Действительно при регистрации оконного класса устанавливается обработчик 00465274. Но если посмотреть сам обработчик, увидим: Code:
----- Следуй за белым кроликом ![]() |
|
Создано: 25 января 2011 21:23 · Личное сообщение · #8 zaichik пишет: Я думаю, что оконная процедура этого окна обрабатывает и нахождение мыши над окном и перемещение мыши и нажитие кнопок на мыши и нажатие клавиш. Если я бряк ставлю на этой процедуре, она должна срабатывать на одном (любом) из этих сообщений. Не срабатывает. Почему? Потому, что не должна! Обрабатываются только те события, которые использовал программист... Если бы вы хоть раз программировали, не писали бы чушь ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 25 января 2011 21:45 · Личное сообщение · #9 |
|
Создано: 25 января 2011 22:20 · Поправил: zaichik · Личное сообщение · #10 Isaev пишет: Потому, что не должна! ![]() Isaev пишет: Обрабатываются только те события, которые использовал программист Угу. Только не использовал. А... Впрочем соловья баснями не кормят Ну то есть такой цикл примерно: while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } Так вот, докладываю. Если меня НЕ ИНТЕРЕСУЮТ неоторые сообщения, я не включу реакцию на них в тело оконной функции. Что я имею ввиду: значит это только одно- из ОКОННОЙ ФУНКЦИИ в ответ на эти сообщения будет вызвана функция по умолчанию. Но оконная функция тем не менее, вызвана будет, даже если окну послано сообщение, которое ей никак не обрабатывается. Привет. Ну кроме, конечно экстраординарных случаев, коими я сейчас занимаюсь и кои вы несомненно, знаете, но предпочитаете о них молчать. Не должна значит не должна. Ну, пусть так и будет. neomant, спасибо, разбираюсь. ![]() |
|
Создано: 25 января 2011 22:35 · Поправил: Isaev · Личное сообщение · #11 Что же ты прицепился к своей 00465274? ![]() Поставь бряк на 004B3FDB и увидешь свой ключ (если ввёл имя уже) zaichik пишет: Ну то есть такой цикл примерно: while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } Хотя это прога на Delphi, а не на Си, но смысл тот же... Ну есть такой цикл, цикл обработки очереди сообщений, только ты его не там смотришь... Для окна ввода пароля он тут: Code:
Только это не "Оконная процедура" грамотнее ставьте вопрос и быстрее получите желаемый ответ ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 25 января 2011 22:55 · Поправил: zaichik · Личное сообщение · #12 Isaev пишет: Что же ты прицепился к своей 00465274? Потому что по этому адресу находится оконная процедура, изначальная, так скажем. Потом насколько я могу судить её адрес меняется. В ней 7 раз вызывается SetWindowLongA с параметром GWL_WNDPROC и разными хэндлами и адресам. Что сие значит я не знаю, то ли на каждый элемент управления (на каждую кнопку, поле ввода и прочее) своя процедура создаётся то ли что, я щас с ними разбираюсь. Ну вот потому и привязался. Потом да, 465274 не задействуется. Но плясать-то надо от неё! Ну вот ВЫ знаете откуда эти адреса брать 004B3FDB и откуда вы цикл взяли я понятия не имею. Моя логика такая- ищем оконную процедуру (ДЕЙСТВУЮЩУЮ!!) смотрим сообщения которые она принимает и от них отталкиваемся уже. Isaev пишет: Ну есть такой цикл, цикл обработки очереди сообщений, только ты его не там смотришь... Простой такой вопрос: а откуда Вы знаете, что именно этот участок надо смотреть? И да, то, что я написал, это именно цикл обработки сообщений, а не оконная процедура, это я знаю. А так собсно я получил ответ на вопрос - адреса оконных процедур меняются функцией SetWindowLong и они новые. Тут уже новое обсуждение пошло. ![]() |
|
Создано: 25 января 2011 23:58 · Личное сообщение · #13 |
|
Создано: 26 января 2011 06:36 · Личное сообщение · #14 А какой не тупиковый? Я сделал так: в общем, я посмотрел как создаётся окошко "кнопка" ok, ставил бряки на функцию CreateWindows. Ну то есь идея проста- с самого начала создать активную кнопку OK. В отладчике получилось. Ну всё, я потом просто параметры вручную менял (стиль) и кнопка ОК создавалось сразу активной. И я сразу на него тыкал, только это не помогало почему-то, всё равно просило ввести лицензию (А если бы не в отладчике, то я всё равно бы сделал, правда семь потов бы сошло но тем не менее, это надо патчить адресное пространство процесса жёстко, но может оно того стоило). Но дело не в этом, нет смысла делать кнопку сразу активной, не помогает. И с циклом пока не разобрался, тяжело. А как в "исследовании программ" написано мне тоже не нравится способ, за уши притянутый. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› как правильно поставить бряк на оконной процедуре в OllyDbg? |