![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехватить вызов функции из DLL
Новичоккк © (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]Глобально для всех процессов в системе или локально для какого-то одного интересующего процесса ?