· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.RESEARCH —› Проблемы с отладкой, вопрос серьезный

. 1 . 2 . >>

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


Дата: Апр 23, 2003 22:50:09

Написал я на Debug API простенький отладчик, задача которого ставить breakpoint и все. Все сделано "по стандартному", т.е. по нужному адресу пишется CCh (опкод команды Int3). Так вот, пробую на notepade - все работает. Когда пытаюсь таким способом отлаживать нужную мне программу (CashFiesta называется) она выдает окно "Программа выполнила недопустимую операцию...." причем EIP в этот момент на десяток байт больше того, куда ставлю брейкпоинт. Следовательно, программа должна была среагировать на этот брейпоинт так-как полюбому его проходила (джампа там точно нет)??? Как это все понимать? Прога защищена от отладки, не передает своему отладчику управление при прохождении int 3 , а потом еще и "выполняет недопустимую операцию" (типа защита от обычных отладчиков)? Как ее теперь лечить, может кто-то сталкивался с такой херней?


Дата: Апр 24, 2003 03:57:32

Программа может модифицировать свой код?


Дата: Апр 24, 2003 12:26:16


Программа может модифицировать свой код?

Это вопрос? Какая программа?


Дата: Апр 24, 2003 18:14:15 · Поправил: Narkomanius

Alex134ты как прерывание вставляешь?
наверно поверх голого кода пофиг что там было до нас?


Дата: Апр 24, 2003 18:18:30 · Поправил: Narkomanius

Alex134
ты я надеюсь винапи не юзаешь.с ним отладку могут обнаружить. а то что неверная инструкция на 10 байт позже - ты что же думаешь что записал НАОБУМ в ЛЮБОЙ БАЙТ 0CCh и проц будет думать что это прерывание?

вот те пример add ebx,edx - 2 байта запиши 0ссh во второй получишь add eax,esp прерыванием даж и не пахнет так ведь? а код уже поправлен.


Дата: Апр 24, 2003 18:44:19

Narkomanius
1) Есс-но я знаю куда я пишу:
4000CC7D mov esi, [ecx+04]
По адресу 4000cc7D и пишем int 3.
2) Использую Debug API (как и говорил), в принципе это и есть винапи. Как можно еще?
Также проверял: сама программа и ее библиотеки не импортируют функцию IsDebuggerPresent.
ты я надеюсь винапи не юзаешь.с ним отладку могут обнаружить. Я пишу на винапи т.к. берусь за эти дела впервые и это самый простой способ. Как можно еще, и чем это будет лучше?


Дата: Апр 24, 2003 19:32:36

Alex134ну мона доки из раздела секреты вин32 почитать там про переват функций. но ведь в принципе не обязательно именно в начале хватать. и еще посмотри тему в форуме перехват и подмена функций. я сам такой мазой заморочился. а после прерывания кстати байт поправленный чинишь? судя по тому что у тя ошибка после int 3 что то поправлено неверно в коде. и еще кое что. не факт что это именно mov esi, [ecx+04]. посмотри в дампе памяти нет ли поблизости от этой кманды таких словечек как INVALID. если есть то те кто то наврал про инструкцию и это не её начало.


Дата: Апр 24, 2003 19:42:47

После прерывания? Дело в том, что оно у меня не возникает!
И еще, скачал с этого же сайта отладчик softsnoop - тоже написан на винапи. Так-вот он нормально работает, и глюков таких не создает в отлаживаемой программе.


Дата: Апр 24, 2003 19:44:06

P.S. как к делу относится перехват функций? Что мне перехватывать?


Дата: Апр 25, 2003 03:43:39

Alex134
Какая программа?
Естественно пытаюсь таким способом отлаживать нужную мне программу


Дата: Апр 25, 2003 12:04:04

P2M
CashFiesta


Дата: Апр 26, 2003 00:43:29

Alex134

.S. как к делу относится перехват функций? Что мне перехватывать?

мля ну не нада все так буквально понимать перехват функции это фактически постановка брейкпоинта в начале функции. ставь не в начале значит а где надо


Дата: Апр 26, 2003 10:04:25 · Поправил: P2M

Alex134
Вы меня не поняли.

На Вашу фразу: "должна была среагировать на этот брейпоинт так-как полюбому его проходила (джампа там точно нет)???"
Я спросил: "Вы уверены, что отлаживаемая программа (CashFiesta) не модифицирует свой код, после того как Вы установили 0CCh?"


Дата: Апр 26, 2003 20:56:39

P2M
Да, программа не модифицирует свой код, это точно.


Дата: Апр 27, 2003 17:50:25

Все ОК, эта проблема улажена. Причина была в том, что я неправильно определял текущий HThread. Проверял на однопотоковых прогах – там все работало, если же в программе создавался более чем один поток - начинались глюки. Теперь с этим проблем нет :-) , и сразу нарисовался другой трабл:
Опять, все проги отлаживаются "на ура", а при отладке CashFiesta она в определенный момент повисает, вместе с моим отладчиком. Разобрался в чем причина - отлаживаемая программа в определенный момент времени генерирует EXCEPTION_DEBUG_EVENT,
ExceptionCode которого равен E06D7363. EIP в этот момент =7800AC4E (похоже, что адрес принадлежит какой-то загруженой прогой библиотеке)
После этого все и виснет (независимо от того как я обрабатываю это исключение - DBG_EXCEPTION_NOT_HANDLED или DBG_CONTINUE).
Но я не нашел кода этого исключения среди стандартных:
EXCEPTION_ACCESS_VIOLATION
EXCEPTION_DATATYPE_MISALIGNMENT
EXCEPTION_BREAKPOINT
EXCEPTION_SINGLE_STEP
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
EXCEPTION_FLT_DENORMAL_OPERAND
EXCEPTION_FLT_DIVIDE_BY_ZERO
EXCEPTION_FLT_INEXACT_RESULT
EXCEPTION_FLT_INVALID_OPERATION
EXCEPTION_FLT_OVERFLOW
EXCEPTION_FLT_STACK_CHECK
EXCEPTION_FLT_UNDERFLOW
EXCEPTION_INT_DIVIDE_BY_ZERO
EXCEPTION_INT_OVERFLOW
EXCEPTION_PRIV_INSTRUCTION
EXCEPTION_IN_PAGE_ERROR
EXCEPTION_ILLEGAL_INSTRUCTION
EXCEPTION_NONCONTINUABLE_EXCEPTION
EXCEPTION_STACK_OVERFLOW
EXCEPTION_INVALID_DISPOSITION
EXCEPTION_GUARD_PAGE
EXCEPTION_INVALID_HANDLE
CONTROL_C_EXIT

. 1 . 2 . >>


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