|
|
| Посл.отвђт | Сообщен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 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.117 |