Сейчас на форуме: ==DJ==[ZLO], Magister Yoda, Rio (+6 невидимых) |
![]() |
eXeL@B —› Основной форум —› Как написать скрипт для Оли или выполнить условия |
Посл.ответ | Сообщение |
|
Создано: 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 мест, откуда приложение может изначально брать серийный номер компа, но не понять, из какого места оно делает это раньше. ![]() |
|
Создано: 04 февраля 2005 17:00 · Личное сообщение · #2 5. Брейки на память имеют параметр "размер" - байт, 2 или 4 байта. Как правильно ставить брейк на память в стеке или обычной памяти? Вот я не знаю заранее, побайтово будут туда писать или сразу DWORD. Есть MOV [...], AL. А есть и MOVSD или типа того. Если брейк стоит на границу интересующих 4х байт, то сработают любые брейки? Или чтобы сработал любой брейк нужно ставить его в начало или конец 4х байт? ![]() |
|
Создано: 04 февраля 2005 19:02 · Личное сообщение · #3 |
|
Создано: 04 февраля 2005 19:13 · Личное сообщение · #4 |
|
Создано: 04 февраля 2005 20:04 · Личное сообщение · #5 Мне хочется самому разобраться. Уже две недели ковыряю. Спасибо за предложение помочь ![]() 7. В Оле есть пункт "Set realy entry point of SFX". Ну, перевод этой команды ясен. А реально что делает команда, на что влияет? Этого не заметил. ![]() |
|
Создано: 04 февраля 2005 21:53 · Личное сообщение · #6 [Oleg] пишет: У меня есть место в стеке, которое через хрен знает какое число перезаписей начинает содержать адрес на ASCII лучше посмотри, откуда этот адрес туда попадает ;) [Oleg] пишет: Как можно без брейков вообще устроить автоматический трейсинг до тех пор, пока любой из регистров (EAX,BX,CX,DX,SI,DI) бред %) [Oleg] пишет: написано про "Documentation in CHM format is available here" в в этой самой строке нажми на слово "here" =) [Oleg] пишет: Оля умеет ставить только один брейк на доступ/запись памяти? да всё, на остальное пусть кто-нить другой отвечает =) а ты лучше бы хелп почитал, перед тем, как тут спрашивать ;) ![]() |
|
Создано: 04 февраля 2005 22:30 · Личное сообщение · #7 Да ты сам бы почитал текст вопроса, прежде чем абсолютно бессодержательную фигню постить (ну, разве что, кроме одного слова "да"). > лучше посмотри, откуда этот адрес туда попадает ;) Этот совет из области, если говорить мягко - сходи туда, не знаю куда. > бред %) Тебе что, примитивное условие трейсинга "до тех пор, пока EBX!=число" не ясно? Я не спрашивал, можно ли реализовать такое условие. А спросил "как". > в в этой самой строке нажми на слово "here" =) Прежде чем бред писать, ты нажал? Проверил что там? ![]() |
|
Создано: 04 февраля 2005 22:58 · Личное сообщение · #8 |
|
Создано: 05 февраля 2005 02:17 · Личное сообщение · #9 [Oleg] пишет: Я правильно понимаю, что Оля умеет ставить только один брейк на доступ/запись памяти OllyDbg позволяет установку только одного брэйкпоинта на память. 80x86-совместимые процессоры позволяют Вам установить 4 аппаратных брэйкпоинта. В отличие от брэйкпоинта на память, аппаратные брэйкпоинты не замедляют скорость выполнения, но покрывают только до 4 байт. OllyDbg может использовать аппаратные брэйкпоинты вместо INT3 при выполнении или сканировании кода. Однократное прерывание на доступе к памяти (Single-shot break on memory access) (доступно только под Windows NT, 2000 и XP). Вы устанавливаете его в окне Память на целом блоке памяти из контекстного меню или, нажимая F2. Этот брэйкпоинт особенно полезен, если Вы хотите поймать вызов или возвращение к некоторому модулю. После того, как выполняется остановка, брэйкпоинт удаляется. ![]() |
|
Создано: 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 пропустит распаковщик быстро и надежно. Ответы давались непосредственно на заданные вопросы, без комментариев - имеет ли смысл делать что-либо из вышеописанного. И, напоследок, немного рекламы ![]() ![]() ![]() |
|
Создано: 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 —› Основной форум —› Как написать скрипт для Оли или выполнить условия |