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

 eXeL@B —› Вопросы новичков —› Возможны ли side effect'ы от наличия INT3 в коде
Посл.ответ Сообщение

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

Создано: 16 сентября 2014 19:09
· Личное сообщение · #1

Приветствую.

Есть дизассемблированный код примерно следующего вида:

Code:
  1. 001DAE94 CALL some_proc
  2. 001DAE99 TEST AL, AL
  3. 001DAE9B CALL some_other_proc
  4. ; ...
  5.  
  6. ; some_proc implementation
  7. ; some code
  8. JMP 001DAE9B


Инструкция
Code:
  1. TEST
в данном случае никогда не выполняется (это точно так -- проверялось на реальном приложении установкой бряка).

Но поведение приложения изменяется, если заменить
Code:
  1. TEST AL, AL
на
Code:
  1. INT3
и занопать недостающий байт. В случае с ordinary breakpoint'ом в OllyDbg то же самое, ведь, если верить документации, они через
Code:
  1. INT3
и реализованы.

Скажите, пожалуйста, в чём может быть дело? Неужели от одного лишь наличия
Code:
  1. INT3
в коде могут появиться подобные side effect'ы? Может, это общеизвестное поведение, о котором лишь я один не в курсе?

Заранее благодарю за возможные ответы.



Ранг: 2.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 16 сентября 2014 19:12 · Поправил: colorblind
· Личное сообщение · #2

в ольке бряки через EBFE реализованы. А когда ты туда клепаешь INT 3, то происходит необрабатываемое исключение



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

Создано: 16 сентября 2014 19:15 · Поправил: dosprog
· Личное сообщение · #3

1) Как это - TEST никогда не выполняется?
2) Каково назначение и результат выполнения инструкции TEST? И что поменяется, если не выполнять эту инструкцию?



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

Создано: 16 сентября 2014 19:18
· Личное сообщение · #4

colorblind пишет:
в ольке бряки через EBFE реализованы

Точно? Просто в документации сказано следующее -- "Ordinary breakpoint, where the first byte of the command you want to break on is replaced by a special command INT3 (Trap to Debugger)".

colorblind пишет:
А когда ты туда клепаешь INT 3, то происходит необрабатываемое исключение

Как оно происходит, если код с INT3 никогда не выполняется? В этом-то и вопрос.

Добавлено спустя 2 минуты
dosprog пишет:
1) Как это - TEST никогда не исполняется?

Во время моих запусков приложения на него никогда не переходило исполнение.

dosprog пишет:
2) Каково назначение и результат выполнения инструкции TEST?

Какое назначение -- не знаю. Данная инструкция не выполняется, я писал об этом в начале.



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

Создано: 16 сентября 2014 19:23
· Личное сообщение · #5

b0r3d0m пишет:
Какое назначение -- не знаю. Данная инструкция не выполняется, я писал об этом в начале.

Узнайте.

Эта инструкция выполняется. Или не выполняется, если забить её кодами <0CCh,090h>.
Вот отсюда и разница в результате.



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

Создано: 16 сентября 2014 19:26
· Личное сообщение · #6

dosprog пишет:
Узнайте.

Почему Вы так в этом уверены? Просто если поставить на ней ordinary breakpoint при помощи F2 в OllyDbg, то на этом бряке выполнение приложения никогда не остановится.




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

Создано: 16 сентября 2014 19:32
· Личное сообщение · #7

На CC в ольке бряки по дефолту. Проверка целостности кода?



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

Создано: 16 сентября 2014 19:44 · Поправил: dosprog
· Личное сообщение · #8

Archer пишет:
На CC в ольке бряки по дефолту. Проверка целостности кода?

)) Туплю.


b0r3d0m,
1) Если в нетронутом коде на <TEST AL,AL> поставить hardware breakpoint, срабатывает ли на ней останов?
2) После подстановки int3 на ней отладчик останавливается или нет?
3) int3 забиваете в файле или в отладчике в памяти?





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

Создано: 16 сентября 2014 21:44
· Личное сообщение · #9

Archer пишет:
Проверка целостности кода?

А как эту проверку можно осуществить, не подскажете? Запросы в поисковике выдают ссылки на различные статьи с формулами, но, я думаю, это можно как-то сделать программно, верно?

dosprog пишет:
1) Если в нетронутом коде на <TEST AL,AL> поставить hardware breakpoint, срабатывает ли на ней останов?

Нет, хотя, честно говоря, впервые ими пользуюсь. Может быть, ошибся где-то? Right click -> Breakpoint -> Hardware, on execution. Строчка не выделилась никаким цветом, как в случае с ordinary breakpoint, однако в меню появился вариант "Remove hardware breakpoint".

dosprog пишет:
2) После подстановки int3 на ней отладчик останавливается или нет?

Нет.

dosprog пишет:
3) int3 забиваете в файле или в отладчике в памяти?

В отладчике.




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 16 сентября 2014 22:57
· Личное сообщение · #10

Мало что понял, но попробуйте Hardware, on access на 001DAE99. Может и выловите контроль целостности.

-----
Следуй за белым кроликом


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

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

Создано: 16 сентября 2014 23:09
· Личное сообщение · #11

neomant пишет:
Может и выловите контроль целостности

Может, я чего-то не понимаю, но как установка hardware breakpoint может помочь выявить контроль целостности? Скиньте ссылку на какую-нибудь статью на эту тему, пожалуйста.



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

Создано: 16 сентября 2014 23:14 · Поправил: dosprog
· Личное сообщение · #12

b0r3d0m пишет:
Скиньте ссылку на какую-нибудь статью на эту тему, пожалуйста.

Да что там статья..
Сделайте, как говорит neomant, - если это оно, всё увидите.

А вообще начинать надо не с кряков, а с программирования и отладки. Иначе никак.





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

Создано: 16 сентября 2014 23:23
· Личное сообщение · #13

dosprog пишет:
Сделайте, как говорит neomant, - если это оно, всё увидите.


Я же уже пробовал и написал об этом:

Нет, хотя, честно говоря, впервые ими пользуюсь. Может быть, ошибся где-то? Right click -> Breakpoint -> Hardware, on execution. Строчка не выделилась никаким цветом, как в случае с ordinary breakpoint, однако в меню появился вариант "Remove hardware breakpoint".



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

Создано: 16 сентября 2014 23:26 · Поправил: dosprog
· Личное сообщение · #14

b0r3d0m пишет:
Я же уже пробовал и написал об этом:

Я писал о Hardware BP on execution, а neomant писал о Hardware BP on access.

А вообще --> вот <-- тема об использовании OllyDbg.



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

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

Создано: 17 сентября 2014 00:00
· Личное сообщение · #15

dosprog пишет:
Я писал о Hardware BP on execution, а neomant писал о Hardware BP on access.

Всё, теперь понял, спасибо за объяснение.

Да, в случае "Hardware BP on access" бряк сработал и выдал сообщение об ошибке со следующим текстом -- "Don't know how to bypass command at address XXXXXXXX. Try to change EIP or pass exception to program". Что это может означать?



Ранг: 196.0 (ветеран), 72thx
Активность: 0.140.02
Статус: Участник

Создано: 17 сентября 2014 00:17
· Личное сообщение · #16

b0r3d0m
Это может означать, что отладчик не знает куда ему идти дальше.Просит изменить eip или пропустить исключение. Поэтому можно нажать ОК, а затем Shift+F9, или пропатчить ольку от этой месаги, как и делают многие.
Если файл не секретный глянуть можно как-то? А то насоветовать можно много, но лучше просто глянуть на этот чудо-кодес...

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

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

Создано: 17 сентября 2014 11:33
· Личное сообщение · #17

Прошу прощения, насчёт срабатывания hardware breakpoint'а я ошибся -- на самом деле, он срабатывает несколькими инструкциями ранее, на "???", помеченных как "Unknown commands" в OllyDbg (о них я уже писал ранее).

Djeck пишет:
или пропатчить ольку от этой месаги, как и делают многие.

А как это сделать, не подскажете?

Djeck пишет:
Если файл не секретный глянуть можно как-то?

Я бы его и выложил, но для его корректной работы требуется довольно тяжеловесное окружение в несколько Гб. К тому же, тогда Вы можете решить, что я хочу, чтобы Вы решили данную задачу за меня вместо желания учиться.



Ранг: 6.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 сентября 2014 13:46
· Личное сообщение · #18

А какого хрена будет выполняться, если в some_proc идет прыжок на адрес ПОСЛЕ TEST AL,AL и нет RET



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

Создано: 17 сентября 2014 13:53
· Личное сообщение · #19

DeGlucker пишет:
А какого хрена будет выполняться, если в some_proc идет прыжок на адрес ПОСЛЕ TEST AL,AL и нет RET

Так этому-то я и не удивляюсь. Я удивляюсь тому, что установка бряка на выполнении инструкции TEST AL, AL даёт другие результаты.



Ранг: 53.9 (постоянный), 19thx
Активность: 0.040
Статус: Участник

Создано: 18 сентября 2014 12:00
· Личное сообщение · #20

DeGlucker пишет:
А какого хрена будет выполняться, если в some_proc идет прыжок на адрес ПОСЛЕ TEST AL,AL и нет RET

Соответственно на стеке будет лежать адрес инструкции TEST AL, AL




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

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

в мессаге от DeGlucker есть смысл привет всем гадалкам топика b0r3d0m сходи к экстрасенсу, быстрее результат будет

-----
От многой мудрости много скорби, и умножающий знание умножает печаль


| Сообщение посчитали полезным: _FUCKER_, unknownproject
 eXeL@B —› Вопросы новичков —› Возможны ли side effect'ы от наличия INT3 в коде
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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