Сейчас на форуме: asfa (+5 невидимых)

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

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

Создано: 19 апреля 2010 11:34 · Поправил: ZLOvar
· Личное сообщение · #1

Не секрет, что многие программисты на Делфи, используют для оповещения пользователя о зареганости\незареганости программы API функцию
ShowMessage(
MessageText : String
);
а не MessageBox. Так вот, как поставить бряк на эту функцию? ShowWindow, естественно, не подходит.
Всем заранее огромное спасибо. (и заранее сорри, если задал нубовский вопрос).



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 19 апреля 2010 11:52
· Личное сообщение · #2

bp/bpx ShowMessage




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 19 апреля 2010 12:11
· Личное сообщение · #3

NikolayD пишет:
bp/bpx ShowMessage


ты вообще знаешь делфи, или хотя бы структуру их програм, это вцл ф-ия а не апи, ты так не поставишь, тут кажктся надо ставить на создание диалогов а не сообщений

-----
Лучше быть одиноким, но свободным © $me




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

Создано: 19 апреля 2010 12:19 · Поправил: ZLOvar
· Личное сообщение · #4

BoRoV
Ну я и говорю что это делфи-ф-ия. Но вот какую апишку использовать для её перехватя, я не знаю.
Ой сорри - не заметил ,что ответ не мне адресован
NikolayD
bpx ShowMessage не срабатывает.
bp ShowMessage - commandBar выдаёт ,что мол "Inkognitov Idefenter" (неизвестный индификатор)

ЗЫ Я заранее извинился за нубовский вопрос!



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 19 апреля 2010 12:19 · Поправил: NikolayD
· Личное сообщение · #5

BoRoV пишет:
ты вообще знаешь делфи, или хотя бы структуру их програм

Нет.

ZLOvar кинь прогу посмотреть хочется что это такое.



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

Создано: 19 апреля 2010 12:24
· Личное сообщение · #6

NikolayD
Среда программирования Делфи 7 есть? Создай новый проект, процедуру Button1Click и туда пропиши:
ShowMessage('Это ф-ия Делфи - ShowMessage!');
затем скомпилируй и попробуй это забрейкпоинтовить ))
~~~~~~~~~~~~~~~~~
P.S На каком языке программишь?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 19 апреля 2010 12:24 · Поправил: BoRoV
· Личное сообщение · #7

ZLOvar я ж сказал, что тут с диалогами замучено, что типо такого DialogBoxParam, сложно точно сказать из под линь :D

add:
а что мешает в декомпилятор засунуть, и посмотреть хотя бы адрес события которое вызывает месагу?

-----
Лучше быть одиноким, но свободным © $me




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

Создано: 19 апреля 2010 12:27
· Личное сообщение · #8

BoRoV
Я так понимаю меня ждёт msdn и google?



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 19 апреля 2010 12:27
· Личное сообщение · #9

NikolayD пишет:
Среда программирования Делфи 7 есть? Создай новый проект, процедуру Button1Click и туда пропиши:ShowMessage('Это ф-ия Делфи - ShowMessage!');затем скомпилируй и попробуй это забрейкпоинтовить ))~~~~~~~~~~~~~~~~~ P.S На каком языке программишь?

нету и не будет, сделай как говоришь и залей если не впадлу. Пытаюсь под с и асм.



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

Создано: 19 апреля 2010 12:28 · Поправил: ZLOvar
· Личное сообщение · #10

BoRoV
я так и делаю. Но натыкаюсь только на всякий мусор вроде SetColour, SetText, Или я слишком глюбоко копнул?
NikolayD
Мне не впадлу, но я сейчас не на своём компе. Сижу в инет-кафе. дома интернета нету.




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 19 апреля 2010 12:47
· Личное сообщение · #11

ZLOvar пишет:
Я так понимаю меня ждёт msdn и google?

msdn здесь не сильно поможет, а в гугл ты не пойжешь :D
ну как я понял у тя это месага о результате проверки, значит должна быть кнопка которая вызывает эту проверку, или там например событие изменения текста в поле, что-то типо такого, но какое-то событие точно же вызывает проверку, возьми IDR, декомпильни в нем, найди событие которое вызывает проверку, поставь на его начало бряк, потом вызови это событие, когда остановится на бряке отпусти по Ctrl+F8 до появления месаги, когда месага появится ничего не делай только открой окно ольки и поставь паузу на отладке, ты будешь гдето в недрах системы, потом потрасируй по Ф8 пока не выйдешь в делфи код, там ты и найжешь свое ShowMessage.

а еще лучше после того как отдекомпилил так как я сказал, сохрани MAP файл, а потом с помощь плагина mapimp(!) всунь этот мап в ольку, и увидишь много интересного

-----
Лучше быть одиноким, но свободным © $me





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 19 апреля 2010 12:51
· Личное сообщение · #12

ZLOvar
ShowWindow, естественно, не подходит.

Как раз в случае когда используется ShowMessage(), надо ставить бряк на ShowWindow().
В остальных случаях наверное также.

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




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

Создано: 19 апреля 2010 12:54 · Поправил: ZLOvar
· Личное сообщение · #13

Coderess
Но ведь ShowMessage просто выводит УЖЕ СОЗДАННОЕ в защитном механизме сообщение! И в большенстве случаев, оно нам ничего не даст!
BoRoV
Опять прошу прощения за идиотский вопрос: Что такое IDR? Неужели IDa pRo ?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 19 апреля 2010 13:16
· Личное сообщение · #14

ZLOvar, IDR

-----
Лучше быть одиноким, но свободным © $me





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 19 апреля 2010 13:17 · Поправил: Coderess
· Личное сообщение · #15

Давай эксперемент проведем, создам сейчас приложение на Delphi выводящее ShowMessage()

Code:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   ShowMessage('Simple text');
  4. end;


Грузим в олю, ставим bp ShowWindow -> F9

Всплывает оля при выполнение ShowWindow

Code:
  1. 7E37AF56    mov eax, 122B
  2. 7E37AF5B    mov edx, 7FFE0300
  3. 7E37AF60    call dword ptr ds:[edx]
  4. 7E37AF62    retn 8


Идем долго до такого места, цикл сообщений в котором прорисовывается ShowMessage

Code:
  1. 0044DA59  xor edx, edx
  2. 0044DA5B  push ebp
  3. 0044DA5C  push 44DB13
  4. 0044DA61  push dword ptr fs:[edx]
  5. 0044DA64  mov dword ptr fs:[edx], esp
  6. 0044DA67  push 0
  7. 0044DA69  push 0
  8. 0044DA6B  push 0B000
  9. 0044DA70  mov eax, dword ptr ss:[ebp-4]
  10. 0044DA73  call 00437B98                            ; Project1.00437B98
  11. 0044DA78  push eax                                 ; |hWnd
  12. 0044DA79  call 00406ED8                            ; \SendMessageA
  13. 0044DA7E  mov eax, dword ptr ss:[ebp-4]
  14. 0044DA81  xor edx, edx
  15. 0044DA83  mov dword ptr ds:[eax+24C], edx
  16. 0044DA89  mov eax, dword ptr ds:[ebx]
  17. 0044DA8B  call 00450AE4                           ; Project1.00450AE4
  18. 0044DA90  mov eax, dword ptr ds:[ebx]
  19. 0044DA92  cmp byte ptr ds:[eax+9C], 0
  20. 0044DA99  je short 0044DAAA                       ; Project1.0044DAAA
  21. 0044DA9B  mov eax, dword ptr ss:[ebp-4]
  22. 0044DA9E  mov dword ptr ds:[eax+24C], 2
  23. 0044DAA8  jmp short 0044DABE                      ; Project1.0044DABE
  24. 0044DAAA  mov eax, dword ptr ss:[ebp-4]
  25. 0044DAAD cmp dword ptr ds:[eax+24C], 0
  26. 0044DAB4  je short 0044DABE                       ; Project1.0044DABE
  27. 0044DAB6  mov eax, dword ptr ss:[ebp-4]
  28. 0044DAB9  call 0044D7F4                           ; Project1.0044D7F4
  29. 0044DABE  mov eax, dword ptr ss:[ebp-4]
  30. 0044DAC1  mov eax, dword ptr ds:[eax+24C]
  31. 0044DAC7  test eax, eax
  32. 0044DAC9  je short 0044DA89                       ; Project1.0044DA89


Сам цикл с 0044DA89 по 0044DAC9, далее вызовы SendMessage и GetActiveWindow идем до retn еще чуть спускаемся и находим


Code:
  1. 00452257     55 6E 69 74 3ascii "Unit1"
  2. 0045225C     db 00
  3. 0045225D     db 00
  4. 0045225E      mov eax, eax
  5. 00452260      mov eax, 452274                          ; ASCII "Simple text"
  6. 00452265      call 0042B3A4                            ; Project1.0042B3A4
  7. 0045226A      retn
  8. 0045226B      db 00
  9. 0045226C     dd FFFFFFFF
  10. 00452270     dd 0000000B
  11. 00452274     ascii "Simple text",0


Незнаю на сколько удобно и просто, но я так нахожу

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 19 апреля 2010 13:58
· Личное сообщение · #16

Coderess пишет:
Как раз в случае когда используется ShowMessage(), надо ставить бряк на ShowWindow().

Всегда так делаю....ставишь бряку на ShowWindow, а дальше глядишь в стек. а уже от туда можно прискакать куда нужно.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 19 апреля 2010 15:29
· Личное сообщение · #17

MasterSoft пишет:
Всегда так делаю....ставишь бряку на ShowWindow, а дальше глядишь в стек. а уже от туда можно прискакать куда нужно.

а как ещё можно? Берешь dede (на выбор) смотришь адрес кнопки, бряк в ольге и трейс, подругому я не делал и незнаю.



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

Создано: 19 апреля 2010 15:55
· Личное сообщение · #18

Coderess, MasterSoft
Ну, ребята, вы извращаетесь. Куда как проще найти ShowMessage в IDR. Она в юните Dialogs, смотрим ее адрес, и... всё, дальше по потребностям.



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

Создано: 20 апреля 2010 12:26 · Поправил: ZLOvar
· Личное сообщение · #19

MasterSoft, Coderess
Можно и так, но я вчера нашёл способ похлеще. Значит так, ф-ия ShowMessage вызывает ф-ию ShowMessagePos, та вызывает ф-ию ShowMessagePosHelp, а она уже в свою очередь, как BoRoV сказал, вызывает CreateMessageDlg. Последняя состоит в основном из делфиского кода, но я нашёл в ней вызов нескольких апишек, вот они:
1. DrawTextA/W - самая крутая ,т.к по ней можно не только забрякать сам ShowMessage но и посмотреть, что за текст там выводится, и найти его в дампе.
2. SetTextColor - Немного похуже, но тоже подходит.
там ещё и 3 и 4 было, но я пока дела пока что, позабывал...
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Единственный минус всех апишек, они сначала вызываются при показе самого окна, а потом уже месяги. Поетому там ещё нужно поизвращятся с размерами окна олли, ну и после всего этого, смотрим в стеке на АПИ ф-ию, там в одном из параметров, должен передаться текст месяги.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
Потом ещё немного трассировочки, выходим из всяких там ShowMessagePos/Help и оказываемся непосредственно у строчки с вызовом ShowMessage.

P.S. SVLab, у кракера может и не быть вообще никакого IDR.
P.P.S. BoRoV, Спасибо




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 20 апреля 2010 13:53 · Поправил: Coderess
· Личное сообщение · #20

1. SetTextA/W - самая крутая ,т.к по ней можно не только забрякать сам ShowMessage но и посмотреть, что за текст там выводится .и найди его в дампе.

Наверное она называется SetWindowText(A,W)
ЗЫ: Наверное тему стоит переименовать в "В поисках ShowMessage"

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




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

Создано: 21 апреля 2010 11:46 · Поправил: ZLOvar
· Личное сообщение · #21

Coderess
Нет, именно DrawTextA/W. Потому что она отвечает за текст в сообщении.
А насчёт SetWindowText(A,W) ,если память не изменяет, то вот:
~~~~~~~~~~~~~~~~~~~~~~~
Используется эта функция для изменения заголовка своего\чужого окна. В принципе, в поиске ShowMessage может помочь, но я не проверял. Вот описание ф-и:
SetWindowText(
Wnd : HWND, // Идентификатор окна, у которого будем изменять заголовок.
Str : PChar // Собственно, сама строка.
);
Можно попробывать поймать месагу, просто поставить bp или bpx SetWindowTextA\W. + Можно поставить BMP ON AССESS на строку, но она может быть и зашифрована.
~~~~~~~~~~~~~~~~~~~~~~~
Кто хочет, можете попробывать все варианты, описанные здесь для поиска коварного ShowMessage. О результатах отпишитесь.
Coderess пишет:
Наверное тему стоит переименовать в "В поисках ShowMessage"

Неплохая идея! Модератор, организуй, если можно )
P.S Пишу так досканально, потому что нас читают новички, и могут просто не понять о чём речь ))
P.P.S Я думаю, после всего описанного здесь, ShowMessage точно не уйдёт от точки останова!
P.P.P.S 22-04-2010: Было исправлено несколько сообщений, потому что там были написаны неверные имена АПИ функций.


 eXeL@B —› Вопросы новичков —› В поисках ShowMessage
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати