Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перхват вызова функций DLL?


kull ©   (2002-08-12 18:58:00) 

1. Есть DLL
2. Известны функции которые она экспортит

Есть ли способ перехватить вызов этих функций (и параметры), если заранее неизвестно какой процесс ее (DLL) загрузит.


kull   (2002-08-13 01:15:00) [1]

Была у меня мысля заменить dll на свою, но тут это не подойдет.
На самом деле это gds32.dll (Interbase).

Хотелось сделать что-то вроде универсального SQL монитора.

Конечно есть специальные компоненты типа TIBMonitior.
Но хотелось бы решить эту задачу без использования этих компонентов исходя из того, что приложение работающее с БД может быть написано не на Delphi, но чтоб можно было осуществлять мониторинг его обращений к базе.


TTCustomDelphiMaster   (2002-08-12 20:55:00) [2]

Ну вот пока пиво пил тут уже разобрались :)


TTCustomDelphiMaster   (2002-08-12 20:49:00) [3]

Подмени dll своей а из нее вызывай настоящию.


bytebutcher   (2002-08-12 20:41:00) [4]

а можно по типу вируса добавить свой код к EXE, но это заметно сложнее будет


bytebutcher   (2002-08-12 20:39:00) [5]

>DiamondShark
Вот именно это я и имею ввиду


bytebutcher   (2002-08-12 20:33:00) [6]

>Skier (12.08.02 19.25)
ты полностью неправ - положительный ответ по всем пунктам...

>kull
Самый простой вариант - написать FAKE DLL, т.е. DLL которая экспортирует те же самые функции что и myfunctions.dll и импортирует функции из оригинальной (LoadLibrary и GetProcAddress).
Процесс можешь узнать при инициализации DLL (т.е. DLL_PROCESS_ATTACH) или GetCurrentProcessID

Для С++ на reversing.net есть парочка DLL Wrapper Wizards
P.S.
Если очень нужно пиши на мыло - напишу поподробнее.
P.S.S Кстати в свое время писал свой вариант DLL Wrapper Wizard и с поддержкой автоматических логов (+универсальный просмотрщик) и с экспортируемыми переменными и с dllforward и с поддержкой ресурсов в DLL.....
но так и не доделал - будет время добью!!!!


MrBeer   (2002-08-12 20:32:00) [7]

Dlya etogo estj gotovie utiliti, tehnika voobhshem crackerskaya. Smotri tut http://reversing.net/tools.html


DiamondShark   (2002-08-12 20:20:00) [8]

Старую ДЛЛ переименовать.
Написать новую с таким же списком экспорта, и записать вместо старой
В новой ДЛЛ грузить старую и вызывать ее функции после своей обработки


Skier   (2002-08-12 19:29:00) [9]

>kull
А что если тебе при вызове (в своём host-прилдожении) всё и узнать ? :)


kull   (2002-08-12 19:27:00) [10]

Да... Я так и знал. :(


Skier   (2002-08-12 19:25:00) [11]

>kull
Тогда ответ отрицательный по всем пунктам...


kull   (2002-08-12 19:24:00) [12]


> Skier © (12.08.02 19:20)

Нет я имею ввиду, что исходный код myfunctions.dll не доступен.
Она имеется в готовом виде, скомпиленном виде.


Skier   (2002-08-12 19:20:00) [13]

>kull


> 1. процесс Х загружает myfunctions.dll



procedure DLLEntyPoint(AReason: Integer);
begin
case of
DLL_PROCESS_DETACH :;
DLL_PROCESS_ATTACH :; //то что тебе нужно
DLL_THREAD_ATTACH :;
DLL_THREAD_DETACH :;
end; //case
end;

DLLProc := @DLLEntyPoint

(см. Help - для подробностей)


> 2. процесс Х вызывает myfunction


Только в самой функции...


kull   (2002-08-12 19:14:00) [14]

Поясняю...

1. есть myfunctions.dll
2. В ней есть экпортируемая функция
myfunction(i: pchar): integer; stdcall;
3. неизвестно какой процесс будет ее использовать.

так вот я хочу перехватить следующую ситуацию:
1. процесс Х загружает myfunctions.dll
2. процесс Х вызывает myfunction

Задачи:
1. Надо узнать что это за процесс
2. Неплохо бы узнать и значение параметра, передаваемого в myfunction


Skier   (2002-08-12 19:03:00) [15]

>kull

> Есть ли способ перехватить вызов этих функций


Что-то туманно...поясни что сделать хочешь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо