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

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

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


Страницы:   1 2

Новичоккк ©   (2006-03-07 09:56:00) 

Есть программа со своей DLL'кой. Возможно ли перехватить вызов одной функции, экспортируемой этой библиотекой? Всего в ней более 9000 экспортов, так что оттрансилировать врядли получиться...


Новичоккк   (2006-03-07 10:30:00) [21]

Нда. Тяжеловато для меня... Вот нашел модуль AdvapiHook.

SizeOfCode(Code: pointer) - определение полного размера команды
по указателю Code.

SizeOfProc(Proc: pointer) - определение размера участка кода до
первой комманды RET.

InjectString(Process: dword; Text: PChar - внедрение строки в процесс

InjectThread(Process: dword; Thread: pointer; Info: pointer;
                     InfoLen: dword; Results: boolean) - внедрение нити в процесс

InjectDll(Process: dword; ModulePath: PChar) - Внедрение Dll в процесс

InjectThisDll(Process: dword) - Внедрение текущей Dll в процесс (если вызвано из Dll)

InjectDllEx(Process: dword; Src: pointer) -  Внедрение Dll в процесс методом
инжекции кода и настройки образа Dll в памяти.

InjectThisDllEx - Внедрение в процесс образа текущей Dll (если вызвано из Dll)

InjectExe(Process: dword; Data: pointer) - Внедрение образа Exe файла в чужое адресное
пространство и запуск его точки входа.

UnhookCode(OldProc: pointer) - Снятие перехвата установленного по HookCode

DisableSFC - Отключение System Fle Protection на лету.

GetProcAddressEx(Process: dword; lpModuleName,
                         lpProcName: pchar; dwProcLen: dword) - Получение адреса API в чужом адресном пространстве.

StopProcess(ProcessId: dword) - Остановка всех нитей процесса.

RunProcess(ProcessId: dword) - Запуск процесса остановленного StopProcess.

SearchProcessThread(ProcessId: dword) - поиск первой попавшейся нити заданного процесса .

StopThreads() - Остановка всех нитей текущего процесса кроме вызывающей.

RunThreads() - Запуск нитей остановленных StopThreads.

EnablePrivilegeEx(Process: dword; lpPrivilegeName: PChar) - Включение заданой привилегии для процесса.

EnablePrivilege(lpPrivilegeName: PChar) - включение заданной привилегии для текущего процесса.  

EnableDebugPrivilegeEx(Process: dword) - Включение привилегии SeDebugPrivilege для процесса.

EnableDebugPrivilege() - Включение привилегии SeDebugPrivilege для текущего процесса.

GetProcessId(pName: PChar) - Получение Id процесса по его имени.

GetInfoTable(ATableType:dword) - Получение буффера с системной информацией.

OpenProcessEx(dwProcessId: DWORD) - получение хэндла процесса альтернативным методом.

CreateZombieProcess(lpCommandLine: pchar;
                            var lpProcessInformation: TProcessInformation;
                            ModulePath: PChar) - создание процесса "зомби", в контексте которого будет выполняться наша DLL.

InjectDllAlt(Process: dword; ModulePath: PChar) - Внедрение DLL альтернативным способом (без CreateRemoteThread).

DebugKillProcess(ProcessId: dword) - убивание процесса отладочным методом

Достаточно ли этих средств для реализации? На что обратить внимание?


Сергей М.   (2006-03-07 10:24:00) [22]


> Подгружается сразу при запуске процесса


Мне это ни о чем не говорит.

Это "сразу" можно расценивать и как результат дейсвий системного загрузчика и как выполнение вызова LoadLibrary() в первых же строках кода приложения.

Кр.того, даже если библ-ка фигурирует в IAT модуля приложения, не исключены явные последующие вызовы LoadLibrary() и GetProcAddress() со стороны кодовых потоков процесса этого приложения.

В общем случае следует тем или иным подходящим способом (глоб.хук, CreateRemoteThread) внедрить в ВАП процесса интересующего приложения код, который модифицирует соотв.элементы IAT модуля приложения и EAT модуля библ-ки


Новичоккк   (2006-03-07 10:14:00) [23]

Подгружается сразу при запуске процесса


Сергей М.   (2006-03-07 10:11:00) [24]


> Только для одного процесса


Как этим процессом осуществляется импорт целевой библ-ки - статически или динамически ?


Новичоккк   (2006-03-07 10:07:00) [25]

Только для одного процесса


Сергей М.   (2006-03-07 10:00:00) [26]

Глобально для всех процессов в системе или локально для какого-то одного интересующего процесса ?


Страницы:   1 2

Наверх

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