Один умный человек в игре написал чит, который отключает игроков от сервера.
Я раздобыл исходный код этого чита:
bool *(*CloseConnection)(void *player);
void *(*player)();
bool *(*SetMasterClient)(void *instance);monoArray<void**> *(*PhotonNetwork_playerListothers)();
void Pointers(){
AddFireworks = (void(*)(int)) getAbsoluteAddress(targetLibName, 0x1112AA4);
PhotonNetwork_playerListothers = (monoArray<void**> *(*)()) getAbsoluteAddress("libil2cpp.so", 0x176169C);
CloseConnection = (bool *(*)(void*)) getAbsoluteAddress("libil2cpp.so", 0x1766844);//test
SetMasterClient = (bool *(*)(void*)) getAbsoluteAddress("libil2cpp.so", 0x1766AB8);
player = (void *(*)()) getAbsoluteAddress("libil2cpp.so", 0x176130C);
void (*old_PlayerUpdate)(void *instance);
void PlayerUpdate(void *instance) {
if (instance != nullptr) {
auto photonplayers = PhotonNetwork_playerListothers();
if (kickall) {
SetMasterClient(player());
for (int i = 0; i < photonplayers->getLength(); ++i) {
auto photonplayer = photonplayers->getPointer()[i];
CloseConnection(photonplayer);}
Скриншот фрагмента кода удален модератором.
В нем "читер" сначала выдает себе права MasterClient от сервера и с помощью цикла проходится по всем игрокам на сервере, закидывая их в метод CloseConnection. После этого у игроков пропадает связь с сервером.
Можно ли защититься от этого и как?