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

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

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 11 марта 2016 21:47 · Поправил: Kuzya69
· Личное сообщение · #1

Подскажите пожалуйста, как это делать правильно.
В коде дохожу до команды "STI". Понятно, прерывание. Но куда дальше уйдет прога после него?

По стеку выше ищем его обработчик. Ставлю на него железный бряк. Жму кнопку "Play". Я в обработчике, дохожу до его "RETN", по F7 выхожу в код длл...
В принципе дохожу до ZwContinue, ну а отсюда как опять попасть в код программы. Трассировка виснет.
Если во время зависа нажать паузу, то получается, что мы уже в коде программы.
Как стоя на "call ZwContinue", определить в какое место программы попадет эта недокументированная фукция ?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 11 марта 2016 22:09
· Личное сообщение · #2

там контекст есть в параметрах

http://hex.pp.ua/nt/NtContinue.php

а в контексте есть eip

-----
[nice coder and reverser]




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 11 марта 2016 22:40 · Поправил: Kuzya69
· Личное сообщение · #3

И вот стою я на краю....
Code:
  1. 7C90E493    E8 C6EBFFFF     CALL ntdll.ZwContinue

В стеке
Code:
  1. 0012FB90   0012FBAC  <-- esp
  2. 0012FB94   00000000
  3. 0012FB98   C0000096
  4. 0012FB9C   00000000
  5. 0012FBA0   00000000
  6. 0012FBA4   04FA10D9  vr.04FA10D9
  7. 0012FBA8   00000000
  8. 0012FBAC   0001003F
  9. 0012FBB0   00000000
  10. 0012FBB4   00000000
  11. 0012FBB8   00000000
  12. 0012FBBC   00000000
  13. 0012FBC0   00000000
  14. 0012FBC4   00000000
  15. 0012FBC8   FFFF027F
  16. 0012FBCC   FFFF4020
  17. 0012FBD0   FFFFFFFF
  18. 0012FBD4   773C6E9A  comctl32.773C6E9A
  19. 0012FBD8   041D001B  vr.041D001B
  20. 0012FBDC   773C1C48  comctl32.773C1C48
  21. 0012FBE0   FFFF0023
  22. 0012FBE4   7C913F85  RETURN to ntdll.7C913F85 from ntdll.7C90E906
  23. 0012FBE8   00000208
  24. 0012FBEC   6E08BB68
  25. 0012FBF0   007C7C91  vr.007C7C91
  26. 0012FBF4   00010000  UNICODE "=::=::"
  27. 0012FBF8   02080000  vr.02080000
  28. 0012FBFC   0012B7D4
  29. 0012FC00   007CB8DE  vr.007CB8DE
  30. 0012FC04   CA80007E
  31. 0012FC08   BB8C0056
  32. 0012FC0C   0000003E
  33. 0012FC10   0056CA80  vr.0056CA80
  34. 0012FC14   0003B930
  35. 0012FC18   007C0000  vr.007C0000
  36. 0012FC1C   6C040208
  37. ...................................

На какой адрес вернется ? Мне так понятней будет.



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

Создано: 11 марта 2016 23:00
· Личное сообщение · #4

Kuzya69
ну видимо надо в гугле посмотреть какие параметры передаются в ZwContinue, потом осознать по какому адресу в стеке среди этих параметров лежит контекст, потом найти какая структура у контекста, а потом найти по какому смещению в структуре лежит eip
сложно, да ?



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 11 марта 2016 23:07
· Личное сообщение · #5

В моем случае, структура начинается с адреса 0012FBAC ? Я правильно понял?
Потом ищу порядок следования записей для своего процессора х86?
И отсчитываю от 0012FBAC, нужный дворд?
Это самое первое, на чем могу споткнуться, и уйти еще дальше от правды.




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 11 марта 2016 23:19
· Личное сообщение · #6

Kuzya69 пишет:
Это самое первое, на чем могу споткнуться


Мануал вам в руки и крепче держать



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 11 марта 2016 23:28
· Личное сообщение · #7

Понятно. Кругом одни преподаватели с ремнем. Разве трудно без отправки в библиотеку ответить. Я вот например так и не понял, где у меня контекст. Не говоря уже о полях самого контекста.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 12 марта 2016 00:14
· Личное сообщение · #8

Без отправки в библиотеку отвечаю: по адресу 12FC64 лежит EIP. А откуда адрес взялся-в библиотеку.

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

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 12 марта 2016 00:36
· Личное сообщение · #9

Ну вот, теперь понятно, почему в обработчике прерывания может смениться от условия это поле (+0xB8).
И программа "идет лесом".
СПАСИБО, Archer !!!!




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

Создано: 13 марта 2016 02:38
· Личное сообщение · #10

Kuzya69 пишет:
В коде дохожу до команды "STI". Понятно, прерывание. Но куда дальше уйдет прога после него?

Скорректирую только пару моментов:
1. STI - не прерывание, а привилегированная инструкция, запрещённая в юзермоде.

2. Hellspawn, с Вашего позволения, Вы не ясновидящий, хоть и оказались тогда правы. По выходу можно поймать контекст ZwContinue, но Kuzya69 не рассказал, как было обработано исключение! Русское "Авось"

3. STI Разрешает все прерывания, но для кода на не пользовательском уровня, если всё же встретилась, то либо 1) нарушены условия логики программы; 2) некоторая суть в обработчике ситуации STATUS_PRIVILEGED_INSTRUCTION

Kuzya69 пишет:
Разве трудно без отправки в библиотеку ответить.

А что вообще за трабла с библиотеками - с кладезью знаний? Я, например, никогда не держу все знания у себя в голове, но знаю, в какой из них и на какой полке найти ответ на нужный вопрос! И почти везде и почти все библиотеки обходил...

Добавлено спустя 3 минуты
Kuzya69 пишет:
(+0xB8).

CONTEXT.Eip, а не +0xB8!

-----
IZ.RU



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


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