обход /crash

IlyaHL2

Активный
Автор темы
231
49
Версия MoonLoader
.026-beta
Данное животное https://pawno-rus.ru/topic/75-krashnut-igroka-crash/ создала эту тему и на сервере где я обычно веселюсь, используют её частенько
Я попытался игнорировать данный вывод текста, но меня все равно крашит, wtf?
Lua:
function on.onDisplayGameText(style, time, text)
    if text == "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/" then
        if style == 0 then
            sampAddChatMessage('Вас попытались крашнуть админы данного проекта', mClr)
            sampAddChatMessage('но я их в рот ебал так что они идут нахуй', mClr)
        end
        return false
    end
end

Вопрос, как обойти данную х чтобы меня не крашило

При чем все работает

[12:46:29] Вас попытались крашнуть админы данного проекта

[12:46:29] но я их в рот ебал так что они идут нахуй

Снимок экрана (1489).png
 
Последнее редактирование:
  • Грустно
Реакции: RedHolms

IlyaHL2

Активный
Автор темы
231
49
Почему не выбрать другой нубо рп?
это надо искать где анти чит полный 0
а мне лень + уже все изучино на этой подзалупной хуйне, есть понимание что и куда писать (код)
 

RedHolms

Известный
Проверенный
622
369
это надо искать где анти чит полный 0
а мне лень + уже все изучино на этой подзалупной хуйне, есть понимание что и куда писать (код)
Посидел подумал, можешь хукнуть какую-нибудь функцию рак пира, или что-нибудь такое, и от туда перехватывать и убирать RPC
Вот пример на плюсах, конечно вырван из проекта, но в целом на луа перевести не составит труда
C++:
  bool OnHandleRpc(void* self, char* data, int data_size_in_bytes, int player_id__ip, short player_id__port) {
    if (data[1] == 61) {
      /* if RPC_SHOWDIALOG */

      BitStream bs;
      bs.Write(data, data_size_in_bytes);

      bs.readOffset = 16;

      uint32_t rpc_data_size;
      bs.ReadCompressed((uint8_t*)&rpc_data_size, 32, true);

      uint16_t dialog_id;
      bs.Read(dialog_id);

      /* style */
      bs.IgnoreBits(8);

      uint8_t length;
      bs.Read(length);

      static char title[256];
      size_t actual_length = min(length, sizeof(title) - 1);
      bs.Read(title, actual_length);
      title[actual_length] = 0;

      /* skip both buttons */
      bs.Read(length);
      bs.IgnoreBits(BYTES_TO_BITS(length));
      bs.Read(length);
      bs.IgnoreBits(BYTES_TO_BITS(length));

      static char buffer[4096];
      bool success = DecodeString(buffer, 4096, &bs);

      if (!success) {
        /* can't read content, check title instead */
        std::string title_s = title;
        if (title_s.find(TEXT_PROMO_TITLE) != std::string::npos) {
          /* probably promo dialog */
          m_promo_dialog_id = dialog_id;
        }
      }
      else {
        /* check content */
        std::string content = buffer;
        if (content.find(TEXT_PROMO_CONTENT1) != std::string::npos && content.find(TEXT_PROMO_CONTENT2) != std::string::npos) {
          /* probably promo dialog */
          m_promo_dialog_id = dialog_id;
        }
      }
    }

    return m_original_handle_rpc_function(self, data, data_size_in_bytes, player_id__ip, player_id__port);
  }

  void InstallHandleRpcHook() {
    uintptr_t samp_base = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));
    uintptr_t handle_rpc_call_address = samp_base + 0x3D537;

    PushProtection(handle_rpc_call_address, 5);

    m_original_handle_rpc_function = reinterpret_cast<RakPeer__HandleRpcPacket_t>(Memory<uint32_t>(handle_rpc_call_address + 1) + handle_rpc_call_address + 5);
    Memory<uint32_t>(handle_rpc_call_address + 1) = reinterpret_cast<uintptr_t>(&HOOK_HandleRpc) - handle_rpc_call_address - 5;

    PopProtection(handle_rpc_call_address, 5);
  }

  void RemoveHandleRpcHook() {
    uintptr_t samp_base = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));
    uintptr_t handle_rpc_call_address = samp_base + 0x3D537;

    PushProtection(handle_rpc_call_address, 5);

    Memory<uint32_t>(handle_rpc_call_address + 1) = reinterpret_cast<uintptr_t>(m_original_handle_rpc_function) - handle_rpc_call_address - 5;

    PopProtection(handle_rpc_call_address, 5);
  }
 

IlyaHL2

Активный
Автор темы
231
49
Посидел подумал, можешь хукнуть какую-нибудь функцию рак пира, или что-нибудь такое, и от туда перехватывать и убирать RPC
Вот пример на плюсах, конечно вырван из проекта, но в целом на луа перевести не составит труда
C++:
  bool OnHandleRpc(void* self, char* data, int data_size_in_bytes, int player_id__ip, short player_id__port) {
    if (data[1] == 61) {
      /* if RPC_SHOWDIALOG */

      BitStream bs;
      bs.Write(data, data_size_in_bytes);

      bs.readOffset = 16;

      uint32_t rpc_data_size;
      bs.ReadCompressed((uint8_t*)&rpc_data_size, 32, true);

      uint16_t dialog_id;
      bs.Read(dialog_id);

      /* style */
      bs.IgnoreBits(8);

      uint8_t length;
      bs.Read(length);

      static char title[256];
      size_t actual_length = min(length, sizeof(title) - 1);
      bs.Read(title, actual_length);
      title[actual_length] = 0;

      /* skip both buttons */
      bs.Read(length);
      bs.IgnoreBits(BYTES_TO_BITS(length));
      bs.Read(length);
      bs.IgnoreBits(BYTES_TO_BITS(length));

      static char buffer[4096];
      bool success = DecodeString(buffer, 4096, &bs);

      if (!success) {
        /* can't read content, check title instead */
        std::string title_s = title;
        if (title_s.find(TEXT_PROMO_TITLE) != std::string::npos) {
          /* probably promo dialog */
          m_promo_dialog_id = dialog_id;
        }
      }
      else {
        /* check content */
        std::string content = buffer;
        if (content.find(TEXT_PROMO_CONTENT1) != std::string::npos && content.find(TEXT_PROMO_CONTENT2) != std::string::npos) {
          /* probably promo dialog */
          m_promo_dialog_id = dialog_id;
        }
      }
    }

    return m_original_handle_rpc_function(self, data, data_size_in_bytes, player_id__ip, player_id__port);
  }

  void InstallHandleRpcHook() {
    uintptr_t samp_base = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));
    uintptr_t handle_rpc_call_address = samp_base + 0x3D537;

    PushProtection(handle_rpc_call_address, 5);

    m_original_handle_rpc_function = reinterpret_cast<RakPeer__HandleRpcPacket_t>(Memory<uint32_t>(handle_rpc_call_address + 1) + handle_rpc_call_address + 5);
    Memory<uint32_t>(handle_rpc_call_address + 1) = reinterpret_cast<uintptr_t>(&HOOK_HandleRpc) - handle_rpc_call_address - 5;

    PopProtection(handle_rpc_call_address, 5);
  }

  void RemoveHandleRpcHook() {
    uintptr_t samp_base = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));
    uintptr_t handle_rpc_call_address = samp_base + 0x3D537;

    PushProtection(handle_rpc_call_address, 5);

    Memory<uint32_t>(handle_rpc_call_address + 1) = reinterpret_cast<uintptr_t>(m_original_handle_rpc_function) - handle_rpc_call_address - 5;

    PopProtection(handle_rpc_call_address, 5);
  }
сори на за плюсы я не шарю :(
 

F0RQU1N and

Известный
1,301
497
Посидел подумал, можешь хукнуть какую-нибудь функцию рак пира, или что-нибудь такое, и от туда перехватывать и убирать RPC
Вот пример на плюсах, конечно вырван из проекта, но в целом на луа перевести не составит труда
C++:
  bool OnHandleRpc(void* self, char* data, int data_size_in_bytes, int player_id__ip, short player_id__port) {
    if (data[1] == 61) {
      /* if RPC_SHOWDIALOG */

      BitStream bs;
      bs.Write(data, data_size_in_bytes);

      bs.readOffset = 16;

      uint32_t rpc_data_size;
      bs.ReadCompressed((uint8_t*)&rpc_data_size, 32, true);

      uint16_t dialog_id;
      bs.Read(dialog_id);

      /* style */
      bs.IgnoreBits(8);

      uint8_t length;
      bs.Read(length);

      static char title[256];
      size_t actual_length = min(length, sizeof(title) - 1);
      bs.Read(title, actual_length);
      title[actual_length] = 0;

      /* skip both buttons */
      bs.Read(length);
      bs.IgnoreBits(BYTES_TO_BITS(length));
      bs.Read(length);
      bs.IgnoreBits(BYTES_TO_BITS(length));

      static char buffer[4096];
      bool success = DecodeString(buffer, 4096, &bs);

      if (!success) {
        /* can't read content, check title instead */
        std::string title_s = title;
        if (title_s.find(TEXT_PROMO_TITLE) != std::string::npos) {
          /* probably promo dialog */
          m_promo_dialog_id = dialog_id;
        }
      }
      else {
        /* check content */
        std::string content = buffer;
        if (content.find(TEXT_PROMO_CONTENT1) != std::string::npos && content.find(TEXT_PROMO_CONTENT2) != std::string::npos) {
          /* probably promo dialog */
          m_promo_dialog_id = dialog_id;
        }
      }
    }

    return m_original_handle_rpc_function(self, data, data_size_in_bytes, player_id__ip, player_id__port);
  }

  void InstallHandleRpcHook() {
    uintptr_t samp_base = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));
    uintptr_t handle_rpc_call_address = samp_base + 0x3D537;

    PushProtection(handle_rpc_call_address, 5);

    m_original_handle_rpc_function = reinterpret_cast<RakPeer__HandleRpcPacket_t>(Memory<uint32_t>(handle_rpc_call_address + 1) + handle_rpc_call_address + 5);
    Memory<uint32_t>(handle_rpc_call_address + 1) = reinterpret_cast<uintptr_t>(&HOOK_HandleRpc) - handle_rpc_call_address - 5;

    PopProtection(handle_rpc_call_address, 5);
  }

  void RemoveHandleRpcHook() {
    uintptr_t samp_base = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));
    uintptr_t handle_rpc_call_address = samp_base + 0x3D537;

    PushProtection(handle_rpc_call_address, 5);

    Memory<uint32_t>(handle_rpc_call_address + 1) = reinterpret_cast<uintptr_t>(m_original_handle_rpc_function) - handle_rpc_call_address - 5;

    PopProtection(handle_rpc_call_address, 5);
  }
так и в чем собсна прекол?