mirror of
https://gitgud.io/yuv420p10le/plexmediaserver_crack
synced 2025-12-30 22:20:28 +00:00
Added FeatureManager::UserFeatureSet spoofing.
- Fixes intro/credit markers not being sent to clients in recent updates.
This commit is contained in:
@@ -221,6 +221,7 @@ std::bitset<704>* g_feature_flags;
|
||||
auto _is_feature_available = reinterpret_cast<decltype(&hook_is_feature_available)>(0);
|
||||
auto _map_find = reinterpret_cast<decltype(&hook_map_find)>(0);
|
||||
auto _bitset_init = reinterpret_cast<decltype(&hook_bitset_init)>(0);
|
||||
auto _is_user_feature_set = reinterpret_cast<decltype(&hook_is_user_feature_set)>(0);
|
||||
|
||||
std::optional<std::tuple<uintptr_t, uintptr_t>> get_dottext_info()
|
||||
{
|
||||
@@ -388,6 +389,11 @@ uint64_t hook_bitset_init(uintptr_t rcx)
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool hook_is_user_feature_set([[maybe_unused]] uintptr_t rcx, [[maybe_unused]] int expected, [[maybe_unused]] int feature)
|
||||
{
|
||||
return static_cast<bool>(expected);
|
||||
}
|
||||
|
||||
void hook()
|
||||
{
|
||||
auto info = get_dottext_info();
|
||||
@@ -400,6 +406,14 @@ void hook()
|
||||
const auto start = std::get<0>(info.value());
|
||||
const auto end = std::get<1>(info.value());
|
||||
|
||||
if(const auto is_user_feature_set = sig_scan(start, end, "55 48 89 E5 48 8B 07 48 85 C0 74 6A"); is_user_feature_set)
|
||||
{
|
||||
if(auto trampoline = create_hook(is_user_feature_set.value(), reinterpret_cast<uintptr_t>(hook_is_user_feature_set)); trampoline)
|
||||
{
|
||||
_is_user_feature_set = reinterpret_cast<decltype(_is_user_feature_set)>(trampoline.value());
|
||||
}
|
||||
}
|
||||
|
||||
// Features are now enabled in boost::atomic<std::bitset> as of 2024/08/13 PMS BETA
|
||||
if(const auto bitset = sig_scan(start, end, "48 8D 0D ? ? ? ? 48 8B 94 05 90 FE FF FF"); bitset)
|
||||
{
|
||||
|
||||
@@ -12,4 +12,5 @@ uintptr_t follow_call_rel32(const uintptr_t address);
|
||||
uint64_t hook_is_feature_available(uintptr_t rcx, const char** guid);
|
||||
uint64_t* hook_map_find(uintptr_t* rcx, const char** str);
|
||||
uint64_t hook_bitset_init(uintptr_t rcx);
|
||||
bool hook_is_user_feature_set(uintptr_t rcx, int expected, int feature);
|
||||
void hook();
|
||||
|
||||
Reference in New Issue
Block a user