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

vmprotect

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

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

Потрачен
119
31
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
пытаюсь поставить хук на 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

tanksoftik

Новичок
7
1
Как вообще работают лимиты самп на машины? И как их можно снять? Просто смотрел idb самп на скины лимит 20к и его видно, а на машины так и не нашел где стоит лимит и что надо патчить
 

whyega52

Eblang головного мозга
Модератор
2,853
2,815
Как вообще работают лимиты самп на машины? И как их можно снять? Просто смотрел idb самп на скины лимит 20к и его видно, а на машины так и не нашел где стоит лимит и что надо патчить
1745248803518.png
 
  • Вау
  • Нравится
Реакции: tanksoftik и vmprotect

writeline

Новичок
23
8
Подскажите адрес координат игрока пожалуйста.

с++:
HRESULT APIENTRY hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
    if (!bInit)
        InitializeD3D(pDevice);

    if (bInit && pDevice)
    {
        stCoordinates coords = GetPlayerCoordinates();
        char buffer[128];
        sprintf_s(buffer, "X: %.2f, Y: %.2f, Z: %.2f", coords.fX, coords.fY, coords.fZ);
        DrawText(buffer, 10, 10, D3DCOLOR_ARGB(255, 255, 255, 255));
    }

    return oEndScene ? oEndScene(pDevice) : D3D_OK;
}

DWORD WINAPI HookThread(LPVOID lpParam)
{
    //D3D
    while (!pDevice)
    {
        pDevice = *(LPDIRECT3DDEVICE9*)0xC97C28;
        Sleep(100);
    }

    DWORD* pVTable = *(DWORD**)pDevice;

    DWORD oldProtect;
    VirtualProtect(&pVTable[42], sizeof(DWORD), PAGE_EXECUTE_READWRITE, &oldProtect);
    oEndScene = (HRESULT(APIENTRY*)(LPDIRECT3DDEVICE9))pVTable[42];
    pVTable[42] = (DWORD)hkEndScene;
    VirtualProtect(&pVTable[42], sizeof(DWORD), oldProtect, &oldProtect);

    return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
{
    if (reason == DLL_PROCESS_ATTACH)
    {
        DisableThreadLibraryCalls(hModule);

        // pCoordinates = (stCoordinates*) ТУТ АДРЕС;

        CreateThread(NULL, 0, HookThread, NULL, 0, NULL);
    }
    return TRUE;
}
 

tanksoftik

Новичок
7
1
Подскажите адрес координат игрока пожалуйста.

с++:
HRESULT APIENTRY hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
    if (!bInit)
        InitializeD3D(pDevice);

    if (bInit && pDevice)
    {
        stCoordinates coords = GetPlayerCoordinates();
        char buffer[128];
        sprintf_s(buffer, "X: %.2f, Y: %.2f, Z: %.2f", coords.fX, coords.fY, coords.fZ);
        DrawText(buffer, 10, 10, D3DCOLOR_ARGB(255, 255, 255, 255));
    }

    return oEndScene ? oEndScene(pDevice) : D3D_OK;
}

DWORD WINAPI HookThread(LPVOID lpParam)
{
    //D3D
    while (!pDevice)
    {
        pDevice = *(LPDIRECT3DDEVICE9*)0xC97C28;
        Sleep(100);
    }

    DWORD* pVTable = *(DWORD**)pDevice;

    DWORD oldProtect;
    VirtualProtect(&pVTable[42], sizeof(DWORD), PAGE_EXECUTE_READWRITE, &oldProtect);
    oEndScene = (HRESULT(APIENTRY*)(LPDIRECT3DDEVICE9))pVTable[42];
    pVTable[42] = (DWORD)hkEndScene;
    VirtualProtect(&pVTable[42], sizeof(DWORD), oldProtect, &oldProtect);

    return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
{
    if (reason == DLL_PROCESS_ATTACH)
    {
        DisableThreadLibraryCalls(hModule);

        // pCoordinates = (stCoordinates*) ТУТ АДРЕС;

        CreateThread(NULL, 0, HookThread, NULL, 0, NULL);
    }
    return TRUE;
}
 
  • Нравится
Реакции: writeline