From c37879d890d8603f754d6533b503a2d3a15bc916 Mon Sep 17 00:00:00 2001 From: Sarah Date: Wed, 12 Mar 2025 16:19:34 -0400 Subject: [PATCH] fix 9.41 --- Starfall/exit.cpp | 8 +++---- Starfall/request.cpp | 56 ++++++++++++++++++++++++-------------------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/Starfall/exit.cpp b/Starfall/exit.cpp index d55e5f9..0ee3ee3 100644 --- a/Starfall/exit.cpp +++ b/Starfall/exit.cpp @@ -77,7 +77,7 @@ namespace Starfall { void FindPushWidget() { - constexpr static auto patch = pf_construct_patch_sig("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 30 48 8B E9 49 8B D9 48 8D 0D ? ? ? ? 49 8B F8 48 8B F2 E8 ? ? ? ? 4C 8B CF 48 89 5C 24 ? 4C 8B C6 48 8B D5 48 8B 48 78", PushWidgetCallback); + /*constexpr static auto patch = pf_construct_patch_sig("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 30 48 8B E9 49 8B D9 48 8D 0D ? ? ? ? 49 8B F8 48 8B F2 E8 ? ? ? ? 4C 8B CF 48 89 5C 24 ? 4C 8B C6 48 8B D5 48 8B 48 78", PushWidgetCallback); constexpr static auto patch2 = pf_construct_patch_sig("48 8B C4 4C 89 40 18 48 89 50 10 48 89 48 08 55 53 56 57 41 54 41 55 41 56 41 57 48 8D 68 B8 48 81 EC ? ? ? ? 65 48 8B 04 25", PushWidgetCallback); // 26.00 constexpr static auto patch3 = pf_construct_patch_sig("48 8B C4 48 89 58 ? 48 89 70 ? 48 89 78 ? 55 41 56 41 57 48 8D 68 A1 48 81 EC ? ? ? ? 65 48 8B 04 25 ? ? ? ? 48 8B F9 B9 ? ? ? ?", PushWidgetCallback); // 28.00/30.00 @@ -89,10 +89,10 @@ namespace Starfall { constexpr static struct pf_patchset_t patchset = pf_construct_patchset(patches, sizeof(patches) / sizeof(struct pf_patch_t)); - pf_patchset_emit(tbuf, tsize, patchset); - /*AsmHook((void*)(uint64_t(buf) + 0x221a404), Hooks::RequestExitWithStatusHook); + pf_patchset_emit(tbuf, tsize, patchset);*/ + AsmHook((void*)(uint64_t(buf) + 0x221a404), Hooks::RequestExitWithStatusHook); AsmHook((void*)(uint64_t(buf) + 0x221a438), Hooks::RequestExitWithStatusHook); - AsmHook((void*)(uint64_t(buf) + 0x48830b0), Hooks::UnsafeEnvironmentPopupHook);*/ + AsmHook((void*)(uint64_t(buf) + 0x48830b0), Hooks::UnsafeEnvironmentPopupHook); } } } \ No newline at end of file diff --git a/Starfall/request.cpp b/Starfall/request.cpp index 560e78e..36f604c 100644 --- a/Starfall/request.cpp +++ b/Starfall/request.cpp @@ -135,41 +135,47 @@ def: }; - __forceinline void* checkStream(void *stream) { + __forceinline void* checkStream(void *stream, bool bEOS) { for (int i = 0; i < 2048; i++) { - if (CheckBytes<0x4C, 0x8B, 0xDC>(stream, i, true)) { - Log(Display, "Found with 4C 8B DC\n"); - goto setStream; - } - else if (CheckBytes<0x48, 0x8B, 0xC4>(stream, i, true)) { - Log(Display, "Found with 48 8B C4\n"); - setStream: - return (uint8_t*)stream - i; - } - else if (CheckBytes<0x48, 0x81, 0xEC>(stream, i, true) || CheckBytes<0x48, 0x83, 0xEC>(stream, i, true)) { - for (int x = 0; x < 50; x++) { - if (CheckBytes<0x40>(stream, i + x, true)) { - Log(Display, "Found with 40\n"); - return (uint8_t*)stream - i - x; - } - else if (CheckBytes<0x4C, 0x8B, 0xDC>(stream, i + x, true) || CheckBytes<0x48, 0x8B, 0xC4>(stream, i + x, true) || CheckBytes<0x48, 0x89, 0x5C>(stream, i + x, true)) - break; + if (bEOS) + { + if (CheckBytes<0x48, 0x89, 0x5C>(stream, i, true)) { + Log(Display, "Found with 49 89 5C, offset: %llx\n", __int64(stream) - i - __int64(buf)); + goto setStream; } } - else if (CheckBytes<0x48, 0x89, 0x5C>(stream, i, true)) { - Log(Display, "Found with 49 89 5C\n"); - goto setStream; + else + { + if (CheckBytes<0x4C, 0x8B, 0xDC>(stream, i, true)) { + Log(Display, "Found with 4C 8B DC, offset: %llx\n", __int64(stream) - i - __int64(buf)); + goto setStream; + } + else if (CheckBytes<0x48, 0x8B, 0xC4>(stream, i, true)) { + Log(Display, "Found with 48 8B C4, offset: %llx\n", __int64(stream) - i - __int64(buf)); + setStream: + return (uint8_t*)stream - i; + } + else if (CheckBytes<0x48, 0x81, 0xEC>(stream, i, true) || CheckBytes<0x48, 0x83, 0xEC>(stream, i, true)) { + for (int x = 0; x < 50; x++) { + if (CheckBytes<0x40>(stream, i + x, true)) { + Log(Display, "Found with 40, offset: %llx\n", __int64(stream) - i - x - __int64(buf)); + return (uint8_t*)stream - i - x; + } + else if (CheckBytes<0x4C, 0x8B, 0xDC>(stream, i + x, true) || CheckBytes<0x48, 0x8B, 0xC4>(stream, i + x, true) || CheckBytes<0x48, 0x89, 0x5C>(stream, i + x, true)) + break; + } + } } } return nullptr; } - bool InternalCallback(void* stream, void* rbuf, size_t rsize, bool (*callback)(pf_patch_t*, void*)) { + bool InternalCallback(void* stream, void* rbuf, size_t rsize, bool (*callback)(pf_patch_t*, void*), bool bEOS) { void* saddr = (void*)((__int64(stream) + 7) + *(int32_t*)(__int64(stream) + 3)); void* newStream = nullptr; if (__int64(saddr) >= __int64(rbuf) && __int64(saddr) < (__int64(rbuf) + (int64_t)rsize)) if (wcscmp((wchar_t*)saddr, L"STAT_FCurlHttpRequest_ProcessRequest") == 0 || wcscmp((wchar_t*)saddr, L"%p: request (easy handle:%p) has been added to threaded queue for processing") == 0) - if (newStream = checkStream(stream)) goto Out; + if (newStream = checkStream(stream, bEOS)) goto Out; return false; Out: char* ptrMatches = (char*)&newStream; @@ -185,11 +191,11 @@ def: return true; } bool StringCallback(struct pf_patch_t* patch, void* stream) { - return InternalCallback(stream, rbuf, rsize, PtrCallback); + return InternalCallback(stream, rbuf, rsize, PtrCallback, false); } bool EOSStringCallback(struct pf_patch_t* patch, void* stream) { - return InternalCallback(stream, EOSRDataBuf, EOSRDataSize, EOSPtrCallback); + return InternalCallback(stream, EOSRDataBuf, EOSRDataSize, EOSPtrCallback, true); } }