mirror of
https://github.com/Mr-X-GTA/YimMenu.git
synced 2024-12-22 20:17:24 +08:00
Initial battleye bypass (#3697)
* feat: initial battleye bypass * disable force kick toggle too * fix: fix pointers version * enable exclude modders toggle by default to prevent auto-kicks
This commit is contained in:
parent
b3f1c8b5d4
commit
220322b910
@ -6593,3 +6593,4 @@
|
|||||||
0xBEB0D930B3CCE4D5,0xBEB0D930B3CCE4D5
|
0xBEB0D930B3CCE4D5,0xBEB0D930B3CCE4D5
|
||||||
0x1FCB07FE230B6639,0x1FCB07FE230B6639
|
0x1FCB07FE230B6639,0x1FCB07FE230B6639
|
||||||
0x1423725069EE1D14,0x1423725069EE1D14
|
0x1423725069EE1D14,0x1423725069EE1D14
|
||||||
|
0x7F7E8401F81CB65B,0x7F7E8401F81CB65B
|
@ -50884,6 +50884,16 @@
|
|||||||
"_GET_ONLINE_VERSION"
|
"_GET_ONLINE_VERSION"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"0x7F7E8401F81CB65B": {
|
||||||
|
"name": "_GET_BATTLEYE_INIT_STATE",
|
||||||
|
"jhash": "",
|
||||||
|
"comment": "",
|
||||||
|
"params": [],
|
||||||
|
"return_type": "int",
|
||||||
|
"build": "3323",
|
||||||
|
"old_names": [
|
||||||
|
]
|
||||||
|
},
|
||||||
"0x054354A99211EB96": {
|
"0x054354A99211EB96": {
|
||||||
"name": "NETWORK_IS_SIGNED_IN",
|
"name": "NETWORK_IS_SIGNED_IN",
|
||||||
"jhash": "0xADD0B40F",
|
"jhash": "0xADD0B40F",
|
||||||
|
@ -15,10 +15,32 @@
|
|||||||
#include "services/vehicle/xml_vehicles_service.hpp"
|
#include "services/vehicle/xml_vehicles_service.hpp"
|
||||||
#include "services/xml_maps/xml_map_service.hpp"
|
#include "services/xml_maps/xml_map_service.hpp"
|
||||||
|
|
||||||
|
#include <game_files/GameDataHash.hpp>
|
||||||
|
|
||||||
namespace big
|
namespace big
|
||||||
{
|
{
|
||||||
|
void bypass_battleye()
|
||||||
|
{
|
||||||
|
auto old = g.session.spoof_host_token_type;
|
||||||
|
g.session.spoof_host_token_type = std::max(old, 1);
|
||||||
|
if (old != g.session.spoof_host_token_type)
|
||||||
|
g.session.spoof_host_token_dirty = true;
|
||||||
|
g.session.kick_host_when_forcing_host = true;
|
||||||
|
g.session.exclude_modders_from_kick_host = true; // useful
|
||||||
|
|
||||||
|
constexpr std::array<std::uint32_t, 16> valid_hashes = {1410389794, 967, 1523678325, 472, 0, 0, 1323039495, 0, 0, 1731098795, 2256610353, 17956, 414639110, 307143837, 3443181821, 0};
|
||||||
|
|
||||||
|
if (auto hashes = *g_pointers->m_gta.m_game_data_hash)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < valid_hashes.size(); i++)
|
||||||
|
hashes->m_data[i] = valid_hashes[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void backend::loop()
|
void backend::loop()
|
||||||
{
|
{
|
||||||
|
bypass_battleye();
|
||||||
|
|
||||||
for (auto& command : g_bool_commands)
|
for (auto& command : g_bool_commands)
|
||||||
command->refresh();
|
command->refresh();
|
||||||
|
|
||||||
@ -32,6 +54,8 @@ namespace big
|
|||||||
|
|
||||||
while (g_running)
|
while (g_running)
|
||||||
{
|
{
|
||||||
|
bypass_battleye();
|
||||||
|
|
||||||
looped::system_self_globals();
|
looped::system_self_globals();
|
||||||
looped::system_update_pointers();
|
looped::system_update_pointers();
|
||||||
looped::system_update_desync_kick();
|
looped::system_update_desync_kick();
|
||||||
|
@ -5,11 +5,29 @@
|
|||||||
|
|
||||||
namespace big
|
namespace big
|
||||||
{
|
{
|
||||||
|
static bool is_next_in_queue()
|
||||||
|
{
|
||||||
|
uint64_t my_host_token = g_player_service->get_self()->get_net_data()->m_host_token;
|
||||||
|
|
||||||
|
for (const auto& plyr : g_player_service->players() | std::ranges::views::values)
|
||||||
|
{
|
||||||
|
if (plyr->is_host())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (plyr->get_net_data()->m_host_token < my_host_token)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool bLastKickHost = false;
|
static bool bLastKickHost = false;
|
||||||
void looped::session_auto_kick_host()
|
void looped::session_auto_kick_host()
|
||||||
{
|
{
|
||||||
bool kick_host = *g_pointers->m_gta.m_is_session_started && g.session.spoof_host_token_type != 0 && g.session.kick_host_when_forcing_host;
|
bool kick_host = *g_pointers->m_gta.m_is_session_started && g.session.spoof_host_token_type != 0 && g.session.kick_host_when_forcing_host;
|
||||||
if (kick_host && !bLastKickHost) [[unlikely]]
|
if (kick_host && !bLastKickHost && is_next_in_queue()) [[unlikely]]
|
||||||
{
|
{
|
||||||
g_player_service->iterate([](auto& plyr) {
|
g_player_service->iterate([](auto& plyr) {
|
||||||
// Don't kick trusted players
|
// Don't kick trusted players
|
||||||
|
@ -417,6 +417,8 @@ namespace big
|
|||||||
InputMethodEditor* m_ime;
|
InputMethodEditor* m_ime;
|
||||||
|
|
||||||
functions::get_last_keyboard_state m_get_last_keyboard_state;
|
functions::get_last_keyboard_state m_get_last_keyboard_state;
|
||||||
|
|
||||||
|
PVOID m_network_can_access_multiplayer;
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
static_assert(sizeof(gta_pointers) % 8 == 0, "Pointers are not properly aligned");
|
static_assert(sizeof(gta_pointers) % 8 == 0, "Pointers are not properly aligned");
|
||||||
|
@ -156,6 +156,8 @@ namespace big
|
|||||||
|
|
||||||
detour_hook_helper::add<hooks::create_pool_item>("CPI", g_pointers->m_gta.m_create_pool_item);
|
detour_hook_helper::add<hooks::create_pool_item>("CPI", g_pointers->m_gta.m_create_pool_item);
|
||||||
|
|
||||||
|
detour_hook_helper::add<hooks::network_can_access_multiplayer>("NCAM", g_pointers->m_gta.m_network_can_access_multiplayer);
|
||||||
|
|
||||||
g_hooking = this;
|
g_hooking = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,6 +213,8 @@ namespace big
|
|||||||
static void error_packet_memmove(void* dst, void* src, int size);
|
static void error_packet_memmove(void* dst, void* src, int size);
|
||||||
|
|
||||||
static void* create_pool_item(GenericPool* pool);
|
static void* create_pool_item(GenericPool* pool);
|
||||||
|
|
||||||
|
static bool network_can_access_multiplayer(void* a1, int* error);
|
||||||
};
|
};
|
||||||
|
|
||||||
class minhook_keepalive
|
class minhook_keepalive
|
||||||
|
12
src/hooks/misc/network_can_access_multiplayer.cpp
Normal file
12
src/hooks/misc/network_can_access_multiplayer.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include "hooking/hooking.hpp"
|
||||||
|
|
||||||
|
namespace big
|
||||||
|
{
|
||||||
|
bool hooks::network_can_access_multiplayer(void* a1, int* error)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
*error = 0;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
@ -98,6 +98,7 @@ namespace big
|
|||||||
add_native_detour(NativeIndex::UNREGISTER_SCRIPT_VARIABLE, all_scripts::DO_NOTHING);
|
add_native_detour(NativeIndex::UNREGISTER_SCRIPT_VARIABLE, all_scripts::DO_NOTHING);
|
||||||
add_native_detour(NativeIndex::FORCE_CHECK_SCRIPT_VARIABLES, all_scripts::DO_NOTHING);
|
add_native_detour(NativeIndex::FORCE_CHECK_SCRIPT_VARIABLES, all_scripts::DO_NOTHING);
|
||||||
add_native_detour(NativeIndex::NETWORK_CONCEAL_PLAYER, all_scripts::NETWORK_CONCEAL_PLAYER);
|
add_native_detour(NativeIndex::NETWORK_CONCEAL_PLAYER, all_scripts::NETWORK_CONCEAL_PLAYER);
|
||||||
|
add_native_detour(NativeIndex::_GET_BATTLEYE_INIT_STATE, all_scripts::RETURN_FALSE);
|
||||||
|
|
||||||
add_native_detour("shop_controller"_J, NativeIndex::IS_PED_SHOOTING, all_scripts::RETURN_FALSE); // prevent exploit reports
|
add_native_detour("shop_controller"_J, NativeIndex::IS_PED_SHOOTING, all_scripts::RETURN_FALSE); // prevent exploit reports
|
||||||
add_native_detour("shop_controller"_J, NativeIndex::SET_WARNING_MESSAGE_WITH_HEADER, shop_controller::SET_WARNING_MESSAGE_WITH_HEADER);
|
add_native_detour("shop_controller"_J, NativeIndex::SET_WARNING_MESSAGE_WITH_HEADER, shop_controller::SET_WARNING_MESSAGE_WITH_HEADER);
|
||||||
|
15438
src/natives.hpp
15438
src/natives.hpp
File diff suppressed because it is too large
Load Diff
@ -3,7 +3,7 @@
|
|||||||
#include "gta_pointers_layout_info.hpp"
|
#include "gta_pointers_layout_info.hpp"
|
||||||
#include "sc_pointers_layout_info.hpp"
|
#include "sc_pointers_layout_info.hpp"
|
||||||
|
|
||||||
#define GTA_VERSION_TARGET "1.69-3274"
|
#define GTA_VERSION_TARGET "1.69-3323"
|
||||||
|
|
||||||
namespace big
|
namespace big
|
||||||
{
|
{
|
||||||
@ -1977,6 +1977,15 @@ namespace big
|
|||||||
{
|
{
|
||||||
g_pointers->m_gta.m_get_last_keyboard_state = ptr.as<functions::get_last_keyboard_state>();
|
g_pointers->m_gta.m_get_last_keyboard_state = ptr.as<functions::get_last_keyboard_state>();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
// Network Can Access Multiplayer
|
||||||
|
{
|
||||||
|
"NCAM",
|
||||||
|
"E8 ? ? ? ? 8B 54 24 30 89 13",
|
||||||
|
[](memory::handle ptr)
|
||||||
|
{
|
||||||
|
g_pointers->m_gta.m_network_can_access_multiplayer = ptr.add(1).rip().as<PVOID>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
>(); // don't leave a trailing comma at the end
|
>(); // don't leave a trailing comma at the end
|
||||||
|
|
||||||
|
@ -35,6 +35,8 @@ namespace big
|
|||||||
|
|
||||||
// TODO: the logic is incorrect
|
// TODO: the logic is incorrect
|
||||||
|
|
||||||
|
attributes->m_param_values[0] = -0x22F37A9E;
|
||||||
|
|
||||||
if (g.spoofing.spoof_session_bad_sport_status == 1)
|
if (g.spoofing.spoof_session_bad_sport_status == 1)
|
||||||
attributes->m_param_values[0] |= (1 << 14); // Bad Sport
|
attributes->m_param_values[0] |= (1 << 14); // Bad Sport
|
||||||
|
|
||||||
|
@ -138,6 +138,9 @@ namespace big
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < token_spoof_types.size(); i++)
|
for (int i = 0; i < token_spoof_types.size(); i++)
|
||||||
{
|
{
|
||||||
|
if (i == 0)
|
||||||
|
ImGui::BeginDisabled(); // this is now required due to battleye
|
||||||
|
|
||||||
if (ImGui::Selectable(g_translation_service.get_translation(token_spoof_types[i]).data(), i == g.session.spoof_host_token_type))
|
if (ImGui::Selectable(g_translation_service.get_translation(token_spoof_types[i]).data(), i == g.session.spoof_host_token_type))
|
||||||
{
|
{
|
||||||
g.session.spoof_host_token_type = i;
|
g.session.spoof_host_token_type = i;
|
||||||
@ -146,6 +149,9 @@ namespace big
|
|||||||
}); // this part gets a bit racy so we're setting it in a fiber pool
|
}); // this part gets a bit racy so we're setting it in a fiber pool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
|
||||||
if (i == g.session.spoof_host_token_type)
|
if (i == g.session.spoof_host_token_type)
|
||||||
{
|
{
|
||||||
ImGui::SetItemDefaultFocus();
|
ImGui::SetItemDefaultFocus();
|
||||||
@ -173,7 +179,9 @@ namespace big
|
|||||||
|
|
||||||
if (g.session.spoof_host_token_type != 0)
|
if (g.session.spoof_host_token_type != 0)
|
||||||
{
|
{
|
||||||
|
ImGui::BeginDisabled();
|
||||||
ImGui::Checkbox("KICK_HOST_ON_JOIN"_T.data(), &g.session.kick_host_when_forcing_host);
|
ImGui::Checkbox("KICK_HOST_ON_JOIN"_T.data(), &g.session.kick_host_when_forcing_host);
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
|
||||||
if (g.session.kick_host_when_forcing_host)
|
if (g.session.kick_host_when_forcing_host)
|
||||||
{
|
{
|
||||||
|
@ -179,16 +179,11 @@ namespace big
|
|||||||
{
|
{
|
||||||
ImGui::PushID(i);
|
ImGui::PushID(i);
|
||||||
ImGui::SetNextItemWidth(200);
|
ImGui::SetNextItemWidth(200);
|
||||||
if (ImGui::InputScalar("##data_hash_value", ImGuiDataType_U32, &g.spoofing.game_data_hash[i], nullptr, nullptr, "%08X", ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
|
if (ImGui::InputScalar(std::to_string(i).data(), ImGuiDataType_U32, &g.spoofing.game_data_hash[i], nullptr, nullptr, "%08X", ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
|
||||||
{
|
{
|
||||||
g.spoofing.game_data_hash_dirty = true;
|
g.spoofing.game_data_hash_dirty = true;
|
||||||
}
|
}
|
||||||
ImGui::PopID();
|
ImGui::PopID();
|
||||||
|
|
||||||
if (((i - 1) % 3) != 0 && i != 14)
|
|
||||||
{
|
|
||||||
ImGui::SameLine();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user