информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыSpanning Tree Protocol: недокументированное применениеАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] можно ли повесить хук на обращение к определенному участку памяти? 11.10.01 15:27  
Автор: йцукенг <jcukeng> Статус: Member
<"чистая" ссылка>
короче драйвер одного девайса глючит, вываливается окно с Exception:
Access Violation.

заказчик нашей проги рвет и мечет.
сорсов драйвера нет и не предвидется, кому интересно - это драйвер четырехпотоковой платы Dialogic (фирма недавно куплена Intel'ом).

в связи с этим вопрос:
можно ли отслеживать обращение чужой проги к определенному диапазону адресов, с целью обмануть ее.

например, прога делает:

mov EDI,0
mov EAX,[EDI]

а я возникающее исключение ловлю,
делаю
mov EAX,0; например
и передаю управление следующей после вызвавшей исключение команде этого долбанного драйвера:(
--------
что посоветуете?
пропатчить Ntoskrnl не предлагайте:)
[Win32] можно ли повесить хук на обращение к определенному участку памяти? 12.10.01 10:34  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> можно ли отслеживать обращение чужой проги к определенному
> диапазону адресов, с целью обмануть ее.
>
> например, прога делает:
>
> mov EDI,0
> mov EAX,[EDI]
>
> а я возникающее исключение ловлю,
> делаю
> mov EAX,0; например
> и передаю управление следующей после вызвавшей исключение
> команде этого долбанного драйвера:(
> --------
> что посоветуете?
> пропатчить Ntoskrnl не предлагайте:)

так как ты пишешь - это сделать можно
например:

1) кодишь свой драйверок
2) грузишь его после глючного драйвера, это в registry настраивается
3) в своем устанавливаешь exception handler перехватчики на то что нужно - GPF, PF etc
4) в своем handlere проверяешь по EIP в стеке откуда fault
5) если из глючного драйвера - то "передаешь управление следующей после вызвавшей исключение
> команде этого долбанного драйвера:( " - меня терзают смутные сомнения что это правильный ход это раз, большинство этих fault-ов будет рестартуемые поэто придется еще и вычислять этот "следующий адрес"
если Page Fault то видимо придется залазить в таблицу страниц для проверки - может это нормальный свопинг

но не проще ли разобраться с этим глючным драйвером один раз и пропатчить его как следует

если у тебя в soft-ice установлено faults on то тебя и выбросит в него после команды типа mov eax,ds:[0]
посмотреть почему так и исправить глюк
Всем спасибо! увы, SoftIce запустить не получится, на это есть причины 12.10.01 12:06  
Автор: йцукенг <jcukeng> Статус: Member
<"чистая" ссылка>
> если у тебя в soft-ice установлено faults on то тебя и
> выбросит в него после команды типа mov eax,ds:[0]
> посмотреть почему так и исправить глюк

дело в том, что сей баг только на работающей системе случается;
плата стоит у заказчика на работающей системе. вылетающий exception, как ни странно, не выводит систему из работоспособного состояния полностью, SoftIce же выведет и заказчик нас скушает не поморщившись.
стоит плата как чугунный мост:), купить для экспирементов не получится.

оказалось, что cb правильно отметил, что баг не в драйвере, а в библиотеке(dll),
обращающейся к этому драйверу.
при инициализации библиотеки она создает несколько потоков, в одном из них этот exception и вылетает.

еще раз всем спасибо, будем копать.
[Win32] можно ли повесить хук на обращение к определенному участку памяти? 12.10.01 08:56  
Автор: cb <cb> Статус: Member
<"чистая" ссылка>
> короче драйвер одного девайса глючит, вываливается окно с
> Exception:
> Access Violation.

судя по Exception ошибка происходит не в KernelMode - иначе синий экран гарантирован. скорее всего ошибка в какой-то dll предоставляющей доступ к драйверу.

> в связи с этим вопрос:
> можно ли отслеживать обращение чужой проги к определенному
> диапазону адресов, с целью обмануть ее.

можно попробовать загрузить свою dll в чужой процесс и поставить UnhandledExceptionFilter (см. SetUnhandledExceptionFilter) и при возникновении исключения найти место ошибки. если точно знать в каком потоке (thread) это происходит можно попытаться заюзать SEH.

cb.
[C++] [Win32] можно ли повесить хук на обращение к определенному участку памяти? 11.10.01 17:01  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Хе-Хе-Хе :))
Access violation это помоему обращение к не корректному участку памяти, например када указатель = 0
Помоему хуки здесь не помогут
слово "хук" я использовал некорректно. каюсь. увы, SEH не получается поюзать:)) 11.10.01 17:18  
Автор: йцукенг <jcukeng> Статус: Member
<"чистая" ссылка>
Если ты напишешь что-то подобное Softice, то сможешь сделать задуманное 11.10.01 17:43  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
А вообще-то я не совсем понял, НТ вываливается в синий экран с сообщением об ошибке или как.

P.S. Честно говоря, слабо представляю что можно придумать :-(
синего экрана нет, но это не сильно утешает:(( 11.10.01 17:59  
Автор: йцукенг <jcukeng> Статус: Member
<"чистая" ссылка>
синего экрана нет, но это не сильно утешает:(( 11.10.01 19:01  
Автор: access_denied Статус: Незарегистрированный пользователь
<"чистая" ссылка>
под Маздаем9х есть VMM-сервис Hook_PM_Fault, а также Hook_Invalid_Page_Fault. Вызываешь их из VxD,
и вешаешь свою Ring0-программу обработки. Под НТями не знаю и ДДК под рукой нету, сорри.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach