Сейчас на форуме: ==DJ==[ZLO], Magister Yoda, Rio (+6 невидимых)

 eXeL@B —› Основной форум —› Как написать скрипт для Оли или выполнить условия
Посл.ответ Сообщение

Ранг: 2.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 февраля 2005 16:44
· Личное сообщение · #1

1. У меня есть место в стеке, которое через хрен знает какое число перезаписей начинает содержать адрес на ASCII строку с серийником. Если ставить брейк на место в стеке и трейсить руками, то ничего не получается... то ли пропускаю момент записи, то приложение отваливается. Адрес места в стеке допустим А, а число (адрес строки серийника), которое там должно быть Б. Что мне надо сделать, чтобы отловить момент записи числа Б по адресу А?

2. Либо, другой подход. Как можно без брейков вообще устроить автоматический трейсинг до тех пор, пока любой из регистров (EAX,BX,CX,DX,SI,DI) не станет содержать число-адрес, которое ссылается на строку с серийником? Т.е. берем значение регистра, смотрим на [регистр] в памяти, проверяем, что там лежат хотябы первые 4 байта моей строки. Нельзя для всех регистров стразу, то по очереди, начиная с EBX. Функция _memcpy копирует строки из [EBX] в [EAX] и скорее всего EBX будет первым указывать на серийник внутри memcpy... хотя кто знает. Руками трейсить memcpy тоже не вышло.

3. Доку по OllyScript читал... но что-то сложно понять на английском. Кстати, на сайте ollyscript.apsvans.com/ написано про "Documentation in CHM format is available here", но реально внутри архива только readme.txt с докой. Может со зрением чего...

4. И еще вопрос. Я правильно понимаю, что Оля умеет ставить только один брейк на доступ/запись памяти? Или сколько угодно? А то у меня есть около 10 мест, откуда приложение может изначально брать серийный номер компа, но не понять, из какого места оно делает это раньше.



Ранг: 2.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 февраля 2005 17:00
· Личное сообщение · #2

5. Брейки на память имеют параметр "размер" - байт, 2 или 4 байта. Как правильно ставить брейк на память в стеке или обычной памяти? Вот я не знаю заранее, побайтово будут туда писать или сразу DWORD. Есть MOV [...], AL. А есть и MOVSD или типа того. Если брейк стоит на границу интересующих 4х байт, то сработают любые брейки? Или чтобы сработал любой брейк нужно ставить его в начало или конец 4х байт?



Ранг: 2.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 февраля 2005 19:02
· Личное сообщение · #3

6. А на стек вообще можно ставить Олины брейки памяти? А то ставлю и вижу: статус Running, нагрузка на проц 100% и ничего не происходит, висим. Это такая защита, чтобы в стек никто не лез, кроме как через ESP?



Ранг: 192.3 (ветеран), 18thx
Активность: 0.120
Статус: Участник
stoned machine-gunner

Создано: 04 февраля 2005 19:13
· Личное сообщение · #4

[Oleg]
дай ссылку на предмет исследования...

-----
once you have tried it, you will never want anything else




Ранг: 2.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 февраля 2005 20:04
· Личное сообщение · #5

Мне хочется самому разобраться. Уже две недели ковыряю. Спасибо за предложение помочь обязательно попрошу в форуме ломануть, когда не будет больше сил. Помогите с теорией.

7. В Оле есть пункт "Set realy entry point of SFX". Ну, перевод этой команды ясен. А реально что делает команда, на что влияет? Этого не заметил.




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 04 февраля 2005 21:53
· Личное сообщение · #6

[Oleg] пишет:
У меня есть место в стеке, которое через хрен знает какое число перезаписей начинает содержать адрес на ASCII

лучше посмотри, откуда этот адрес туда попадает ;)

[Oleg] пишет:
Как можно без брейков вообще устроить автоматический трейсинг до тех пор, пока любой из регистров (EAX,BX,CX,DX,SI,DI)

бред %)

[Oleg] пишет:
написано про "Documentation in CHM format is available here"

в в этой самой строке нажми на слово "here" =)

[Oleg] пишет:
Оля умеет ставить только один брейк на доступ/запись памяти?

да

всё, на остальное пусть кто-нить другой отвечает =) а ты лучше бы хелп почитал, перед тем, как тут спрашивать ;)



Ранг: 2.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 февраля 2005 22:30
· Личное сообщение · #7

Да ты сам бы почитал текст вопроса, прежде чем абсолютно бессодержательную фигню постить (ну, разве что, кроме одного слова "да").

> лучше посмотри, откуда этот адрес туда попадает ;)

Этот совет из области, если говорить мягко - сходи туда, не знаю куда.

> бред %)

Тебе что, примитивное условие трейсинга "до тех пор, пока EBX!=число" не ясно? Я не спрашивал, можно ли реализовать такое условие. А спросил "как".

> в в этой самой строке нажми на слово "here" =)

Прежде чем бред писать, ты нажал? Проверил что там?




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 04 февраля 2005 22:58
· Личное сообщение · #8

[Oleg] пишет:
Прежде чем бред писать, ты нажал?

когда-то нажимал и там был нужный файл...
остальное - no comments =)



Ранг: 0.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 05 февраля 2005 02:17
· Личное сообщение · #9

[Oleg] пишет:
Я правильно понимаю, что Оля умеет ставить только один брейк на доступ/запись памяти

OllyDbg позволяет установку только одного брэйкпоинта на память.
80x86-совместимые процессоры позволяют Вам установить 4 аппаратных брэйкпоинта. В отличие от брэйкпоинта на память, аппаратные брэйкпоинты не замедляют скорость выполнения, но покрывают только до 4 байт. OllyDbg может использовать аппаратные брэйкпоинты вместо INT3 при выполнении или сканировании кода.
Однократное прерывание на доступе к памяти (Single-shot break on memory access) (доступно только под Windows NT, 2000 и XP). Вы устанавливаете его в окне Память на целом блоке памяти из контекстного меню или, нажимая F2. Этот брэйкпоинт особенно полезен, если Вы хотите поймать вызов или возвращение к некоторому модулю. После того, как выполняется остановка, брэйкпоинт удаляется.



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

Создано: 05 февраля 2005 19:13 · Поправил: deNULL
· Личное сообщение · #10

1. Можешь попробовать задать условие останова трассировки вроде такого [А]==Б, ну и потрассировать... Как - меню Debug -> Set condition (или "Отладчик -> Установить условие" в русской версии )
2. Аналогично, условие [EBX]=="твой серийник" или, если все регистры, то ([EBX]=="твой серийник")|([EAX]=="твой серийник")| и т.д.
3. Хм, name, может и к OllyScript хелп переведем?
4. OllyDbg allows single memory breakpoint at a time. Как уже говорил name, можно под WinNT также установить 4 аппаратных брейкпоинта.
5. Не совсем понял смысл вопроса...
6. Вряд ли это защита. Стек - такая же область памяти, как и другие. А зависание... Возможно, просто "в данном конкретном случае"...
7. You can correct entry position. Select new entry and from Disassembler popup menu choose 'Breakpoint|Set real SFX entry here'. If corresponding SFX option is enabled, next time OllyDbg skips extractor quickly and reliably.
Вы можете исправить адрес входа вручную. Выберите новый адрес входа и в контекстном меню окна Дизассемблера выберите «Breakpoint -> Set real SFX entry here» («Брэйкпоинт -> Установить реальный SFX вход здесь»). Если соответствующая опция SFX включена, в следующий раз OllyDbg пропустит распаковщик быстро и надежно.
Ответы давались непосредственно на заданные вопросы, без комментариев - имеет ли смысл делать что-либо из вышеописанного.
И, напоследок, немного рекламы Скачивайте перевод OllyDbg и справки к нему от name, Hyper и вашего покорного слуги - не пожалеете!



Ранг: 2.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 07 февраля 2005 18:06
· Личное сообщение · #11

Ок, всем спасибо. Помогите понять следующую проблему.

Есть некоторый адрес в памяти, к примеру, DS:10 с 4х байтовой информацией. Эту ячейку можно адресовать по разному:

MOV DWORD PTR DS:7,...
MOV DWORD PTR DS:8,...
MOV DWORD PTR DS:9,...
MOV DWORD PTR DS:10,...
MOV DWORD PTR DS:11,...
MOV DWORD PTR DS:12,...
MOV DWORD PTR DS:13,...

MOV WORD PTR DS:9,...
MOV WORD PTR DS:10,...
MOV WORD PTR DS:11,...
MOV WORD PTR DS:12,...
MOV WORD PTR DS:13,...

MOV BYTE PTR DS:10,...
MOV BYTE PTR DS:11,...
MOV BYTE PTR DS:12,...
MOV BYTE PTR DS:13,...

Мою область памяти могут адресовать разными путями, обращаясь по разным смещениям и запрашивая разное кол-во байт (1,2,4 или больше по MOVS).

Вопрос - как поставить брейкпонт памяти так, чтобы в при любой из исполнившихся в коде команд брейк сработал?
Параметры установки брейка памяти:
1) на адрес 10, 11, 12, 13
2) на размер BYTE, WORD, DWORD

Пример. Я ставлю брейк на память "адрес 10, размер BYTE". А в коде программы кто-то выполнит код MOV DWORD PRT DS:9,11223344. Брейк сработает? В каких случаях брейк сработает, а какие обращения к той же ячейке пролетят без внимания?

> в следующий раз OllyDbg пропустит распаковщик быстро и надежно

Оля установит сама брейкпоинт в месте, где я указал по меню "Set SFX"? А чем это будет отличаться от простого брейка? Практический смысл в чем состоит?


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


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