
17.06.2007, 19:39
|
|
Участник форума
Регистрация: 16.06.2007
Сообщений: 107
Провел на форуме: 725870
Репутация:
208
|
|
Выкидываем шпионов из нашего процесса.
Открываем файл systemroot\ntdll.dll
Сравниваем (первые 10 байт) кода начала API функций, загруженной, к нам память ntdll.dll с тем, что на диске. Собственно, заменяем, несоответствия на оригинал.
Тоже самое проделываем, с остальными библиотеками (Kernel32,User32,AdvApi32)
Касперский , модифицирует адреса функций в EXPORT_DIRECTORY, тоже заменяем, на оригинал.
вот код реализации:
Код:
bool RemoveHook(char * szDllPath, char * szFuncName)
{
HMODULE lpBase = LoadLibrary(szDllPath);
LPVOID lpFunc = GetProcAddress(lpBase, szFuncName);
if ( !lpFunc )
return false;
DWORD dwRVA = (DWORD) lpFunc - (DWORD) lpBase;
HANDLE hFile = CreateFile(szDllPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if ( INVALID_HANDLE_VALUE == hFile )
return false;
DWORD dwSize = GetFileSize(hFile, NULL);
HANDLE hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY|SEC_IMAGE, 0, dwSize, NULL);
LPVOID lpBaseMap = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, dwSize);
LPVOID lpRealFunc = (LPVOID)((DWORD)lpBaseMap+dwRVA);
DWORD dwOldProtect;
bool bRes = true;
if ( VirtualProtect(lpFunc, 10, PAGE_EXECUTE_READWRITE, &dwOldProtect) )
{
memcpy(lpFunc, lpRealFunc, 10);
}
else
{
bRes = false;
}
UnmapViewOfFile(lpBaseMap);
CloseHandle(hMapFile);
CloseHandle(hFile);
return bRes;
}
(c) wasm.ru ( автора не помню )
|
|
|