Доброго времени суток Вот столкнулся с такой проблемой. Допустим есть софтина, которая сплайсит вызовы некоторых ф-й ntdll. Как снять эти перехваты в своем процессе?
Короче я копирую оригинальную либу в темп, открываю на чтение С чем сравнивать то? (с образом на который указывает GetModuleHandle) Какие моменты нужно учитывать?
это ещё зачем? просто перебирай каждую ф-ию в экспорте и сравнивай первые, скажем, 10 байт начала с той, что в уже подгруженой ntdll и ещё желательно сравнить сами таблицы экспорта модулей, т.к. некоторые проактивные защиты таким образам без спайса хуки ставят.
В разделе статей есть несколько тем по тематике. Вот код выдранный из одного этих статей: Код (Text): RemoveZwWriteVirtualMemoryHook proc LOCAL lpBase:DWORD LOCAL lpFunc:DWORD LOCAL dwRVA:DWORD LOCAL hFile:DWORD LOCAL dwSize:DWORD LOCAL hMapFile:DWORD LOCAL lpBaseMap:DWORD LOCAL lpRealFunc:DWORD LOCAL dwOldProtect:DWORD .data szDllPath db "C:\WINDOWS\System32\ntdll.dll",0 szFuncName db "ZwWriteVirtualMemory",0 .code invoke LoadLibrary, addr szDllPath test eax, eax jz @ret mov lpBase, eax invoke GetProcAddress, lpBase, addr szFuncName test eax,eax jz @ret mov lpFunc, eax sub eax, lpBase mov dwRVA, eax invoke CreateFile, addr szDllPath,GENERIC_READ, FILE_SHARE_READ, NULL,3,FILE_ATTRIBUTE_NORMAL, NULL inc eax jz @ret dec eax mov hFile, eax invoke GetFileSize,hFile, NULL mov dwSize, eax invoke CreateFileMapping, hFile, NULL, PAGE_READONLY or 1000000h, 0, dwSize, NULL mov hMapFile, eax invoke MapViewOfFile, hMapFile, 4h, 0, 0, dwSize mov lpBaseMap, eax add eax, dwRVA mov lpRealFunc, eax invoke VirtualProtect, lpFunc, 10, PAGE_EXECUTE_READWRITE, addr dwOldProtect cld mov esi, lpRealFunc mov edi, lpFunc mov ecx, 10 rep movsb invoke UnmapViewOfFile, lpBaseMap invoke CloseHandle, hMapFile invoke CloseHandle, hFile @ret: ret RemoveZwWriteVirtualMemoryHook endp
и нифига не спасибо, ибо бесполезно. это раз. тут надо брать адрес функции, отнимать от него базу, получая RVA, открывать, верно, либу для чтения, чухать по полученному адресу, и тупо сравнивать дворды лежащие в файле и в либе. предварительно, естественно(если код свой, и есть опасения в сторону iat-hook'a), сравнив адрес загруженной либы с получаемым от GetProcAddr. > Огромное спасибо. Осталось только перевести на Delphi а если такой код перевести на делфи составляет трабл, то это надо было в бегиннерс писать.