Другое С/С++ Вопрос - Ответ

vmprotect

Известный
383
242
оффсет от самп.длл должен идти
написал фулл функцию но коннект не происходит на сервер

C++:
using CNetGame__UpdateNetwork = void(__thiscall *)(void* _this);
kthook::kthook_simple<CNetGame__UpdateNetwork>CNetGame__UpdateNetwork_Hook;

void CNetGame__UpdateNetwork__HOOK(const decltype(CNetGame__UpdateNetwork_Hook)& hook, void* _this) {
    Packet* packet = nullptr;
    uint8_t* localdata = nullptr;
    uint8_t state{};

    for (packet = sampapi::v037r3::RefNetGame()->m_pRakClient->Receive();
         packet && packet->data;
         packet = sampapi::v037r3::RefNetGame()->m_pRakClient->Receive())
    {
        localdata = packet->data;

        if (*localdata == 40)
            state = localdata[5];

        switch (state) {
        case 12: {
            sampapi::v037r3::RefNetGame()->Packet_AuthKey(packet);
            break;
        }
        case 29: {
            sampapi::v037r3::RefChat()->AddMessage(0xFFFFFFFF, "Сервер не отвечает. Повторяем подключение");
            sampapi::v037r3::RefNetGame()->m_nGameState = 1;
            break;
        }
        case 31: {
            sampapi::v037r3::RefChat()->AddMessage(0xFFFFFFFF, "Сервер не отвечает. Повторяем подключение");
            break;
        }
        case 32: {
            sampapi::v037r3::RefNetGame()->Packet_DisconnectionNotification(packet);
            break;
        }
        case 33: {
            sampapi::v037r3::RefNetGame()->Packet_ConnectionLost(packet);
            break;
        }
        case 34: {
            sampapi::v037r3::RefNetGame()->Packet_ConnectionSucceeded(packet);
            break;
        }
        case 35: {
            sampapi::v037r3::RefChat()->AddMessage(0xFFFFFFFF, "Не удалось инициализировать шифрование.");
            break;
        }
        case 36: {
            sampapi::v037r3::RefChat()->AddMessage(0xFFFFFFFF, "Вы забанены на этом сервере.");
            break;
        }
        case 37: {
            sampapi::v037r3::RefChat()->AddMessage(0xFFFFFFFF, "Неправильный пароль.");
            sampapi::v037r3::RefNetGame()->m_pRakClient->Disconnect(0, 0);
            break;
        }
        case 200: {
            sampapi::v037r3::RefNetGame()->Packet_VehicleSync(packet);
            break;
        }
        case 203: {
            sampapi::v037r3::RefNetGame()->Packet_AimSync(packet);
            break;
        }
        case 206: {
            sampapi::v037r3::RefNetGame()->Packet_BulletSync(packet);
            break;
        }
        case 207: {
            sampapi::v037r3::RefNetGame()->Packet_PlayerSync(packet);
            break;
        }
        case 208: {
            sampapi::v037r3::RefNetGame()->Packet_MarkersSync(packet);
            break;
        }
        case 209: {
            sampapi::v037r3::RefNetGame()->Packet_UnoccupiedSync(packet);
            break;
        }
        case 210: {
            sampapi::v037r3::RefNetGame()->Packet_TrailerSync(packet);
            break;
        }
        case 211: {
            sampapi::v037r3::RefNetGame()->Packet_PassengerSync(packet);
            break;
        }
        
        default:
            break;
        }

        sampapi::v037r3::RefNetGame()->m_pRakClient->DeallocatePacket(packet);
    }

    return hook.call_trampoline(_this);
}


void hooks::install_tormoz_updatenetwork_hook() {
    CNetGame__UpdateNetwork_Hook.set_dest(SampBase + 0xAF20);
    CNetGame__UpdateNetwork_Hook.set_cb(&CNetGame__UpdateNetwork__HOOK);
    CNetGame__UpdateNetwork_Hook.install();
}
 

Byte

Активный
120
29
пытаюсь поставить хук на UpdateNetwork, но когда отправляю ракнет пакеты ничего не работает
zalupa code:
void CNetGame__UpdateNetwork__HOOK(const decltype(CNetGame__UpdateNetwork_Hook) & hook, void * _this) {
  Packet * packet = nullptr;
  uint8_t * localdata = nullptr;
  uint8_t state {};

  for (packet = sampapi::v037r3::RefNetGame()->m_pRakClient->Receive(); packet; packet = sampapi::v037r3::RefNetGame()->m_pRakClient->Receive()) {
    localdata = packet -> data;

    switch (state) {
    localdata = packet->data;
   
    if(*localdata == 40) state = localdata[5];
    case 223: {
      RakNet::BitStream bs((unsigned char * ) packet -> data, packet -> length, false);

      uint8_t packetID;
      uint32_t rpcID;
      bs.Read(packetID);
      bs.Read(rpcID);

      if (rpcID == 15) {
        sampapi::v037r3::RefChat() -> AddChatMessage("я тормоз", 0xFFFFFFFF, "я тормоз");
        return;
      }
      break;
    }
    default:
      break;
    }
  }

  return hook.call_trampoline(_this);
}


void hooks::install_tormoz_updatenetwork_hook() {
    CNetGame__UpdateNetwork_Hook.set_dest(0xAF20);
    CNetGame__UpdateNetwork_Hook.set_cb(&CNetGame__UpdateNetwork__HOOK);
    CNetGame__UpdateNetwork_Hook.install();
}
C++:
void CNetGame__UpdateNetwork__HOOK(const decltype(CNetGame__UpdateNetwork_Hook) & hook, void * _this) {
  Packet * packet = nullptr;

  for (packet = sampapi::v037r3::RefNetGame()->m_pRakClient->Receive(); packet; packet = sampapi::v037r3::RefNetGame()->m_pRakClient->Receive()) {
    uint8_t packetID = packet->data[0];
    
    if (packetID == 40) {
      RakNet::BitStream bs((unsigned char*)packet->data, packet->length, false);
      bs.Read(packetID);
      
      uint16_t rpcID;
      bs.Read(rpcID);
      
      if (rpcID == 15) {
        sampapi::v037r3::RefChat()->AddChatMessage("RPC 15 получен", 0xFFFFFFFF, "Отладка");
      }
    }
    
    else if (packetID == 223) {
      sampapi::v037r3::RefChat()->AddChatMessage("Пакет 223 получен", 0xFFFFFFFF, "Отладка");
    }
  }

  return hook.call_trampoline(_this);
}

void hooks::install_tormoz_updatenetwork_hook() {
    CNetGame__UpdateNetwork_Hook.set_dest(0xAF20);
    CNetGame__UpdateNetwork_Hook.set_cb(&CNetGame__UpdateNetwork__HOOK);
    CNetGame__UpdateNetwork_Hook.install();
}

state не устанавливается перед switch, а внутри первого case
 
  • Влюблен
Реакции: vmprotect