Сейчас на форуме: asfa, Rio, _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Всплывающее окно в Delphi
Посл.ответ Сообщение

Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 06 марта 2013 20:34
· Личное сообщение · #1

Привет всем!

Как отловить всплывающее в Дельфи 2010. Пробовал bp MessageBoxA, не помогает. В IDR перекрестных на строку сообщения нет. Может что-то наподобие MessageBoxA есть?



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 06 марта 2013 21:09
· Личное сообщение · #2

rtfm



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 06 марта 2013 21:31
· Личное сообщение · #3

TryAga1n пишет:
rtfm


ну так давай ссыль где, а я почитаю




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 06 марта 2013 21:52
· Личное сообщение · #4

sapog93 пишет:
ну так давай ссыль где, а я почитаю

А может давай файл, а мы посмотрим ?
Причём здесь мессаджбокс ? Да и в дельфе 2010 скорее MessageBoxW, MessageBoxExW

-----
ds




Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 06 марта 2013 22:03
· Личное сообщение · #5

DimitarSerg Хочу все сам! MessageBox`ы не брякаются. В проге первый наг убрал, а второй вот не могу отловить. Я ж чего и думал, что в дельфях может api функции по другому называются, ну на отрисовку окна.. Знаю еще, что как то кроме MessageBox можно



Ранг: 129.0 (ветеран), 116thx
Активность: 0.060
Статус: Участник

Создано: 06 марта 2013 22:09
· Личное сообщение · #6

sapog93
Пробуй ставить бряк на ShowWindow и уже там смотри, что, откуда вызывается.

-----
We do what we want because we can.


| Сообщение посчитали полезным: nick8606

Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 06 марта 2013 22:09
· Личное сообщение · #7

F12->Alt+K

| Сообщение посчитали полезным: Jaa, sapog93

Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 09 марта 2013 20:23
· Личное сообщение · #8

Вообщем результаты.

Отловил наг по bp TaskDialogIndirect. Но в этой функции только ручками убрать получается - меняю флаг в одном месте и все. Естественно, когда ее пропатчил, то наг ушел и все остальные сообщения тоже и ошибки сыпятся. Отловить откуда вызывается это окно так и не смог.

По F12->Alt+K вот такая картина



Я так понял своим нубским мозгом, что отдельный поток проверяет активацию, они чегой-то там синхронизируются. Как из стека потока выйти на вызов нага не допер. Вообще прога работает, только пришлось убить ExitProc (кажется так называется), потому что наг закрывает и программу как только нажмешь OK. Но теперь она вообще не закрывается, только через диспетчер. Хотелось бы нормально чтоб было, по сути

Может подскажите куда рыть? (мануалы читаю, гугл знаю, хотя даже в гугле часто не могу найти описание какой нибудь функции, как было с той, что на картинке самая верхняя)



Ранг: 34.1 (посетитель), 118thx
Активность: 0.040.01
Статус: Участник

Создано: 09 марта 2013 20:43
· Личное сообщение · #9

Читайте, читайте внимательно, что verdizela пишет

Брякнитесь-смотрите в стеке, что за окошко. Если наг, то давим f8 до того момента, пока не попадем в коротенький цикл. Дальше ставим бряк на следующую команду после тела цикла, давим f9. В наге жмем любую кнопку, сработает бряк после цикла. Дальше гораздо проще будет найти место вызова этого окошка.



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 09 марта 2013 23:43
· Личное сообщение · #10

nick8606 пишет:
Брякнитесь-смотрите в стеке, что за окошко. Если наг, то давим f8 до того момента, пока не попадем в коротенький цикл.


Это нормально, что там этих бряков до нага тыщи?



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 10 марта 2013 00:52
· Личное сообщение · #11

Блин, меня эта гадость уже бесить начинает. Тыщу бряков допер как преодолеть, сам дурак что называется.

Срабатывает bp ShowWindow. Вижу, что наг:



nick8606 пишет:
Если наг, то давим f8 до того момента, пока не попадем в коротенький цикл.


Жмакал, жмакал - только по системным ходил, никаких коротких циклов. Потом бац! Наг нах! Хз откуда. Понимаю, что не догоняю, мож по стеку как отследить?



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 21 марта 2013 18:26
· Личное сообщение · #12

Всем здравствуйте!

Наг таки победил. Не прошло и года . После долгих и трудных мучений забросил прожку на неделю и занялся другими. Сегодня вернулся и вот.. Получилось. Как победил - спасибо Vovan666, со временем дошло, что к чему. Итак: в IDR нашел строку (надпись на наге). Их было две. Перекрестных не было. В олле в дампе нашел товарищей, установил аппаратные на них. Вывалился в каком-то месте - в системной какой-то. Мне уже не привыкать , поэтому нажал F12->Alt+K - смотрю стек. Что-то куда-то ведет, но все не туда. Цифирки какие - то... Решил тупо - смотрю в IDR, где знакомые цифирки. Короче, все адреса в IDR начинались с 009ххххх. Ну, думаю, буду отлавливать только такие. Ныряю в олю, рестарт, бряк, F12->Alt+K... В main нифига. Правая кнопка, Thread, взял самый верхний. Нифига. И тд. Пока не наткнулся на некий адрес, начинающийся с 009. Я туда. Вроде что-то есть. Переключился в IDR, перешел по адресу. Во-о-о-о-т! Вот адрес моей мечты!!! Оттрейсил, пару переходов поменял - нага нет. Виктори, на!

Но теперь надо отследить таймер - прога сама закрывается Так что еще полувиктори. Поэтому вопрос: как его отслеживать? Отслеживать значения каждого? Так я постарею, наверное Там их тьма. Вообщем все как обычно - я клянчу, а уважаемые знатоки, возможно, дают советы..



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 21 марта 2013 18:29
· Личное сообщение · #13

Копайте в сторону ExitProcess и TerminateProcess.
Когда остановитесь на этих бряках - смотрите выше по стеку откуда был вызов

| Сообщение посчитали полезным: sapog93

Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 21 марта 2013 18:39 · Поправил: sapog93
· Личное сообщение · #14

О, точняк, спасиб - щас гляну

Опять у меня залипуха со стеком Но главное - я забыл, что это дельфя. Поэтому, поковыряв глазом в стеке, плюнул и пошел по другому. Таймеры подсмотрел в главной форме. В парочке открыто было написано по-русски - CustomForm.Close. Брякнулся, подправил и тут-же наткнулся на дублера нага с той же, мною любимой, надписью! Т.е. уже в другом месте прога проверяет заново. Ковыряю дальше..



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 21 марта 2013 22:16
· Личное сообщение · #15

Вы как-то не с того пути начали.
Чем патчить кучу таймеров с нагами и закрытиями проги - лучше уж попытаться понять алгоритм регистрации.



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 22 марта 2013 01:34 · Поправил: sapog93
· Личное сообщение · #16

да у меня как-то не получается.. знаний не хватает. поэтому как могу фигачу и развиваюсь параллельно. Вот, допустим, алгоритм регистрации - я понял, что проверка идет в потоках, т.е. прога одновременно запускает их несколько штук и там проверяет все подряд.. Я попробовал сунуться: залез в такие дебри, ковырял два дня. Результат - большая пухлая голова. Простенькие программки, понятное дело, этим не страдают. Количеством потоков в смысле. Опять же - это я так понял, что проверка в потоках, потому что все время попадается thread.create, а на самом деле фик его знает.. Да и про потоки я имею смутное представление, а после загугливания вопросов только больше стало.. Поэтому пру дуром и пытаюсь вставлять палки в колеса Тем более она работает, все нормально, вот только закрывается сама.


Вот сейчас прочитал и подумал - человек мне дельные советы дает, а я фигню всякую выдумываю.. Пошел курить защиту



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 22 марта 2013 10:36
· Личное сообщение · #17

sapog93
Если прога на Delphi, смотри в сторону функции PostQuitMessage при закрытии
Code:
  1. E8 2BC1FBFF     call 0040C4A8  ; сюда бряк, и смотри в стеке откуда вызывается и т.д.
  2. 84C0            test al,al
  3. 74 07           je 00450388
  4. 6A 00           push 0
  5. E8 3861FBFF     call <jmp.&user32.PostQuitMessage>
  6. C3              retn




Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 22 марта 2013 12:22 · Поправил: crypto
· Личное сообщение · #18

sapog93
По-поводу строк: могли бы в IDR импортировать Дельфийский проект, а потом тупо поискать адрес строки во всех файлах, наверняка нашли бы место, где данная строка упоминается.
По-поводу таймеров: уж коли нашли таймеры на форме, посмотрите для каждого из них события OnTimer.



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 25 марта 2013 23:31
· Личное сообщение · #19

crc1 попробовал - прога крашится на bp PostQuitMessage. без бряка стартует нормально (ну и закрывается через какое-то время + сегодня обратил внимание, что время всегда разное, может час работать нормально, а может сразу закрыться).

crypto спасибо. я уже нашел строки. в idr они без рефа, ну я просто в олли брякнулся по адресу, где они лежат. а вот с таймерами.. я сразу в OnTimer залез. Таймеров штук 12, половина вроде считают время до закрытия, три точно отвечают за exit. в них просто идут вызовы, потоки открываются, закрываются плюс обнаружил дополнительную проверку.. вообщем курю мануалы.



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 18 апреля 2013 17:30
· Личное сообщение · #20

всем спасибо! программа сдалась. как решил: анализ защиты -> добавил пару строк в конец секции для перехвата признаков и последующего патча


 eXeL@B —› Вопросы новичков —› Всплывающее окно в Delphi
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати