· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› GetProcAddres + 3?

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Сен 14, 2003 18:54:03

Господа объясните, когда я в SIce ставлю GetProcAddres + 3, я обманываю пакер, т.к. он проверяет БП на вход в функцию?
У меня здесь не достаток информации :(
Да и SIc'a нет, что бы поэксперементировать...


Дата: Сен 14, 2003 19:12:40

nice

Да, обманываешь, но зачем тебе оно раз у тебя даже SoftIce сейчас нет :-)


Дата: Сен 14, 2003 19:38:04

Asterix
Будет ;), я принцип понять хочу!
А почему + 3, а не +7 ? это надо в библиотеке Windows (напр Kernel32.dll)смотреть, к конкретной функции?


Дата: Сен 14, 2003 19:44:10

А в TRW2000 возможен такой трюк?
И я как понимаю, тут надо BPM а не BPX использовать?


Дата: Сен 14, 2003 20:31:24

Почему не +7, ха..., так можно и за границы кода API вылезти :-)
TRW2000 вообщето глюковатая штука, хотя на 98-й я иногда его использую,
но если бряк ему не понравится то всё сразу вылетает, вместе с
системой ;-)


Дата: Сен 14, 2003 22:37:28 · Поправил: nice

Asterix
А я в виртуалке работаю :)
Шлеп и система востановлена, одним копированием файла

55 PUSH EBP ; ВХОД В ФУНКЦИЮ
8BEC MOV EBP,ESP
81EC2C050000 SUB ESP,000000052C

И Я СДЕЛАЮ ФУНКЦИЯ+5, ТО ПОЛУЧИТСЯ
2C05 SUB AL,005; пОЛУЧАЕТСЯ НАРУШЕНИЕ РАБОТЫ ФУНКЦИИ?


Дата: Сен 15, 2003 00:31:56

пОЛУЧАЕТСЯ НАРУШЕНИЕ РАБОТЫ ФУНКЦИИ?

Возможно..


Дата: Сен 15, 2003 18:09:14

Ребята, вы меня поражаете. Давайте расставим точки над i. Хочу сразу сказать, что эти вопросы не возникли бы в принципе, если бы был прочитан Intel Manual.
Как можно отлаживать программу? 3 способа на сегодняшний день:
1) С поднятым флагом трассировки (TF = 1)
2) Влепляя в определенное место :) программы зарезервированный для этих целей опкод ССh, потом процессор генерирует исключение и это исключение перехватывается отладчиком, устанавливающим обработчик в IDT.
3) Через отладочные регистры DR0-DR7.
В твоем, nice, случае, используется CCh. Только не думай, что в этом есть что-то магическое! Айс знает, что символьному имени GetProcAddress поставлен в соответствие VA, скажем, 123456789h. ВСЕ! Туда ставится CC, подменяя собой предыдущий опкод, который айс запоминает и потом ставит на место. Все. Если ты ставишь бряк на GetProcAddress+3, то бряк получается по адресу 12345678С - всего делов! Никакого нарушения работы функции не получится, т.к. опкод СС будет заменен айсом на валидный (который он запомнил). И боятся вылезти за код API не нужно, не такой уж он и маленький :) Что до детекции CC в самом начале функции - это да, такой трюк есть. Делается настолько элементарно, что я даже код приводить тут не буду! Можно и еще веселее сделать - проверять какой-то диапазон, скажем, байт 15-20 на СС. От такого bpx GetProcAddress+3 не спасет. Надо переходить на bpm GetProcAddress x - тут уже работают DR-регистры. Но только и тут не все так радужно :) Но и против этого есть свой болт :) Словом, весело.


Дата: Сен 15, 2003 18:22:46

volodya
А мне кажется, что здесь есть подводный камень - если CCh попадает на место внутри валидной инструкции и делает эту самую инструкцию инвалидной. По идее работы CPU - CCh можно ставить только на ПЕРВЫЙ БАЙТ инструкции. Если-бы CCh можно было ставить где угодно, как тогда работал бы такой код?
mov al, 0CCh


Дата: Сен 15, 2003 18:34:22

Естественно, CCh должен стоять на границе инструкции.


Дата: Сен 15, 2003 18:38:42

AsmGuru62
Four-F

Да, ессно, но что мешает ГЛАЗЫНЬКАМИ поглядеть КУДА ставить CC? Понятное дело - первый байт.


Дата: Сен 16, 2003 00:09:58

volodya
Огромное СПАСИБО! Объяснил неучу.
А по поводу документации Intel, не знаю я англ.
Это вы с Asterix'ом на exetools/forum постите во всю, а у меня изучение в процессе :(
В школе плохо учился, с нуля пришлось начинать...


Дата: Сен 16, 2003 00:14:55

nice

Не.., я английского не знаю, Володе проще..


Дата: Сен 16, 2003 00:46:16

volodya

Вот чтоб не глядеть для каждой API и ставят тупо
bpx GetProcAddress+3 подразумевая начало API функции
55    PUSH EBP
8BEC  MOV EBP,ESP


Дата: Сен 16, 2003 17:54:09

Asterix

Это частный случай. Что ты будешь делать, если пролог отличается? Например, ebp опущен. Многие оптимизирующие компиляторы его убирают!

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066