Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перехват функций Api

9.7K
17 января 2005 года
SityFox
1 / / 17.01.2005
Кто-нибудь разбирается в сабжевой теме?

Ситуация такая - есть некоторое приложение, которое использует функции своей dll, которая уже обращается к системным функциям.
(Приложение->someshit.dll->user32.dll)
Нужно перехватить вызовы некоторой системной функции, которые происходят в этой someshit.dll.

С перехватом вызовов из самого приложения проблем нет - внедряем в процесс свою dll, которая правит таблицу импорта - все работает замечательно.

А вот если функция вызывается из промежуточной dll, то ничего не получается.

Пробовал искать эту библиотеку в памяти процесса ( GetModuleHandle('someshit.dll')) и править ее таблицу импорта. Все отрабатывает нормально, но эффекта нет - вызовы из этой dll все равно не перехватываются. Что делать?
8.9K
19 января 2005 года
semskmax
8 / / 17.01.2005
Если я правильно понял,то тебе надо править таблицу
импорта самой someshit.dll так как она импортирует user32.dll
То есть некая функция в someshit.dll и будет перехватывать
вызовы user32.dll внутри себя.Если надо чтобы эта перехватывающая функция
вызывалась в твоем .exe то сделай её
exported.Кстати,каждый раз когда ты вызываешь функцию некой
DLL(не через LoadLibrary то есть при неявном связывании,вызывается её DllMain( ),также DllMain вызывается при вызове LoadLibrary( )
(явное связывание).Это так на всякий случай.
Кстати а слабо в самой USER32.dll программно!!! найти адрес её exported функций?
Мне это очень нужно так как я хочу делать hook тех функций которые вызывает
сама User32.dll или ntdll.dll.У меня это не получается так как в таких dll
нету секций .idata и .edata а то что должно в них быть находится в секции
.text .Но программно не удается найти эти данные
8.9K
20 января 2005 года
semskmax
8 / / 17.01.2005
Все кому интересна этот вопрос
смотрите тему "Секции СИСТЕМНЫХ Dll"
17K
03 марта 2006 года
Ara
1 / / 03.03.2006
Цитата:
Originally posted by semskmax
Мне это очень нужно так как я хочу делать hook тех функций которые вызывает
сама User32.dll или ntdll.dll.У меня это не получается так как в таких dll
нету секций .idata и .edata а то что должно в них быть находится в секции
.text .Но программно не удается найти эти данные



Используй ImageDirectoryEntryToData.

У меня встречный вопрос. Перехват функций (как вариант: MessageBoxA/W и GetMessageA/W) работает в моем тестовом приложении, вызывающем эти функции, частично работает в Блокноте (перехватывает только MessageBox) и совсем не работает в explorer.exe. Кто-нибудь знает в чем дело?

8.9K
14 марта 2006 года
semskmax
8 / / 17.01.2005
Если ты уверен что все сделал правильною
То у меня есть такая версия.Иногда
некоторые функции нет смысла перехватывать по той простой причине что они не вызываются!
То есть они реализованы как макросы а раз так
то просто вставлены в код по месту.Я сейчас
занимаюсь перехватом функций в драйверах
используя примерно тот же принцип что и в user
address range и вот что например можно увидеть
в файле ndis.h
#define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))

или вот так
#define NdisChainBufferAtFront(Packet, Buffer) \
{ \
PNDIS_BUFFER TmpBuffer = (Buffer); \
\
for (;;) \
{ \
if (TmpBuffer->Next == (PNDIS_BUFFER)NULL) \
break; \
TmpBuffer = TmpBuffer->Next; \
} \
if ((Packet)->Private.Head == NULL) \
{ \
(Packet)->Private.Tail = TmpBuffer; \
} \
TmpBuffer->Next = (Packet)->Private.Head; \
(Packet)->Private.Head = (Buffer); \
(Packet)->Private.ValidCounts = FALSE; \
}


и тут же рядом
EXPORT
VOID
NdisUnchainBufferAtFront(
IN OUT PNDIS_PACKET Packet,
OUT PNDIS_BUFFER * Buffer
);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог