Показать сообщение отдельно

  #2  
Старый 17.06.2007, 19:39
razzzar
Участник форума
Регистрация: 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 ( автора не помню )
 
Ответить с цитированием