При запуске клиента, происходит его патчинг вот таким способом:
Code: Select all
for(int i = 0; i < num_elements; i++)
{
DWORD oldProtect;
if(VirtualProtect(reinterpret_cast<LPVOID>(elem->m_address),
elem->m_length, PAGE_READWRITE, &oldProtect) == 0)
{
api_error("Failed to patch (page protection)");
error = 1;
break;
}
CopyMemory(reinterpret_cast<unsigned char *>(elem->m_address),
elem->m_buffer, elem->m_length);
elem++;
}
В этом цикле изменяются несколько байтов, описанные в Ignition.cfg.
После пропатчивания устанавливаются хуки на сокеты.
По идее, всё должно работать и без этого пропатчивания (или я чего-то недопонимаю?)... Для чего оно нужно?