Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизНе работает перехват win api функции Найти похожие ветки
← →
Dmitrij_K (2006-03-07 15:13) [0]Процедура замены
procedure ReplaceIATEntryInOneMod(const OldProc,
NewProc: FARPROC);
var
Size: DWORD;
ImportEntry: PImageImportDescriptor;
Thunk: PImageThunkData;
Protect, newProtect: DWORD;
DOSHeader: PImageDosHeader;
NTHeader: PImageNtHeaders;
begin
if OldProc = nil then Exit;
if NewProc = nil then Exit;
// Можно искать вот так
ImportEntry := ImageDirectoryEntryToData(Pointer(hInstance), BOOL(1),
IMAGE_DIRECTORY_ENTRY_IMPORT, Size);
if ImportEntry <> nil then
begin
while ImportEntry^.Name <> 0 do
begin
Thunk := PImageThunkData(DWORD(hInstance) +
DWORD(ImportEntry^.FirstThunk));
while Thunk^._function <> nil do
begin
if (Thunk^._function = OldProc) then
begin
if not IsBadWritePtr(@Thunk^._function, sizeof(DWORD)) then
Thunk^._function := NewProc
else
begin
if VirtualProtect(@Thunk^._function, SizeOf(DWORD),
PAGE_EXECUTE_READWRITE, Protect) then
begin
Thunk^._function := NewProc;
newProtect := Protect;
VirtualProtect(@Thunk^._function, SizeOf(DWORD),
newProtect, Protect);
end;
end;
//Exit;
end
else
Inc(PChar(Thunk), SizeOf(TImageThunkData32));
end;
ImportEntry := Pointer(Integer(ImportEntry) + SizeOf(TImageImportDescriptor));
end;
end;
end;
procedure SetAPIHook;
begin
OldMessageBox :=
GetProcAddress(GetModuleHandle("User32.dll"), "MessageBoxA");
CurrentMessageBox := @HookMessageBox;
ReplaceIATEntryInOneMod(OldMessageBox, CurrentMessageBox);
end;
С MessageBoxA работает нормально
а с GetProcAddress(GetModuleHandle(kernel32), "TerminateProcess")
не работает
те пе проходит устовие if (Thunk^._function = OldProc) then
← →
Сергей М. © (2006-03-07 16:27) [1]Т.входа в какую конкретно ф-цию перехватываешь-то ?
← →
Dmitrij_K (2006-03-07 16:41) [2]Пытаюсь перехватить TerminateProcess из kernel32.dll
← →
Dmitrij_K (2006-03-08 15:25) [3]Так и не нашел почему не работает.
Но зато нашел модулек madCodeHook www.madshi.net.
← →
Сергей М. © (2006-03-09 08:27) [4]
> с GetProcAddress(GetModuleHandle(kernel32), "TerminateProcess")
> не работает
Все правильно. И не будет работать. Потому что ты модифицируешь IAT, а GetProcAddress() с IAT не работает - эта ф-ция получает интересующую т.входа из EAT
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c