Сейчас на форуме: vsv1, r0lka, -Sanchez-, testrev1337, johnniewalker (+3 невидимых) |
eXeL@B —› Крэки, обсуждения —› Определение адреса хардварного брейка в ODbgScript |
Посл.ответ | Сообщение |
|
Создано: 05 февраля 2010 13:25 · Личное сообщение · #1 Тема повисела в "Вопросах новичков" но никто из посетивших не отписался, видимо зубры в "новички" не ходят. Поэтому вынужден повторить тут . Olly Script Например есть команда, на нее ставлю апаратный останов на запись в память. Одновременно несколько таких адресов. EIP-6 | MOV DWORD PTR DS:[EDI+4E0],EAX EIP <===== Hardware Break Останавливаюсь с EIP ниже команды осуществившей запись. Как получить адрес доступа, для определения какой из апаратных остановов сработал? Пробую делать так: bphws _addr0, "w" ; ставлю хардварные бряки ОК bphws _addr1, "w" bphws _addr2, "w" bphws _addr3, "w" erun ; брейк ОК preop eip ; получаю адрес предыдущей команды ОК gopi $RESULT, 1, ADDR ; пытаюсь получить адрес доступа но получаю данные по команде на EIP, а не по команде которая выше. Что делаю не так в этом способе, а может есть другой для определения которая из точек сработала? ----- 127.0.0.1, sweet 127.0.0.1 |
|
Создано: 05 февраля 2010 13:41 · Личное сообщение · #2 |
|
Создано: 05 февраля 2010 17:04 · Поправил: mak · Личное сообщение · #3 можно попробовать скопировать полностью предыдущую команду в участок памяти , изучить ее структуру и поменять на 8D первое значение , это будет команда леа , так мы получим непостредственный адрес записи, востановить значения регистров по умолчанию предварительно сохранив нужный адрес и сравнив его с таблицей бряков. Не знаю связано ли это как то с выполнением команды преоп или гопи , но там была кажется проблема интерпретации команда типа MOV DWORD PTR DS:[EDI+4E0],EAX из за отсуствия 0 операнда впереди... PS Попробовал сейчас сделать , на запись в стек Code:
и все нормальное получилось , preop eip не использовал , так как встал сразу на команде записи, ща поробую в другой район памяти. Оллискрипт последний PS - 2 Попробовал на секции кода или дате , команда встает после выполнения , делаю преоп также и уже результат 0 ... ничего неполучается , хотя на стеке все было хорошо PS - 3 Все заработало , сделал вот так Code:
на стеке еще не тестировал У тебя будет вот так где то Code:
PS - 4 на стеке отработало тоже хорошо по данному варианту kioresk пишет: Имхо еще EIP лучше сохранять и восстанавливать из переменной, чтобы в стэк не лезть, а то мало ли что. ага , просто код нормально отрабатвает с еип только .. лично у меня .. в скрипте влом строчить переменные было , на скорую руку делалось. А вообще нужно приучаться сразу делать как надо ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 05 февраля 2010 18:29 · Личное сообщение · #4 |
|
Создано: 05 февраля 2010 18:44 · Личное сообщение · #5 |
|
Создано: 05 февраля 2010 19:10 · Личное сообщение · #6 Спасибо всем. Получилось по способу МАКа с учетом замечания kioresk. Но все таки не понятно по поводу самой команды, почему по EIP отрабатывает, а по ADDR нет, хотя синтаксис команды это предполагает. Посмотрел сырки, вроде все правильно - дизассемблируется команда по адресу и из структуры возвращается значение. Видно блохи самой Олли. ----- 127.0.0.1, sweet 127.0.0.1 |
|
Создано: 05 февраля 2010 19:27 · Личное сообщение · #7 |
eXeL@B —› Крэки, обсуждения —› Определение адреса хардварного брейка в ODbgScript |
Эта тема закрыта. Ответы больше не принимаются. |