slow motion fn

This commit is contained in:
Sarah
2025-02-17 17:19:54 -05:00
parent 79beaa8b74
commit 1e2d80f9ab
3 changed files with 47 additions and 53 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ namespace Starfall {
FILE* fptr;
freopen_s(&fptr, "CONOUT$", "w+", stdout);
SetConsoleTitleA("Starfall - https://github.com/ParadiseFN/Starfall");
SetConsoleTitleA("Starfall - https://github.com/plooshi/Starfall");
}
if (UseBackendParam) {
+44 -50
View File
@@ -133,62 +133,56 @@ def:
};
bool StringCallback(struct pf_patch_t* patch, void* stream) {
void* saddr = (void*)((__int64(stream) + 7) + *(int32_t*)(__int64(stream) + 3));
if (__int64(saddr) >= __int64(rbuf) && __int64(saddr) < (__int64(rbuf) + (int64_t)rsize)) {
if (wcscmp((wchar_t*)saddr, L"%p: request (easy handle:%p) has been added to threaded queue for processing") == 0) {
for (int i = 0; i < 2048; i++) {
if (CheckBytes<0x48, 0x81, 0xEC>(stream, i, true)) {
for (int x = 0; x < 50; x++) {
if (CheckBytes<0x40>(stream, i + x, true)) {
Log(Display, "Found using 4.24 & lower method\n");
stream = (uint8_t*)stream - i - x;
goto HookVT;
}
}
}
}
void* checkStream(void *stream) {
for (int i = 0; i < 2048; i++) {
if (CheckBytes<0x4C, 0x8B, 0xDC>(stream, i, true)) {
Log(Display, "Found using 4.25 & 4.26 method\n");
goto setStream;
}
else if (wcscmp((wchar_t*)saddr, L"STAT_FCurlHttpRequest_ProcessRequest") == 0) {
for (int i = 0; i < 2048; i++) {
if (CheckBytes<0x4C, 0x8B, 0xDC>(stream, i, true)) {
Log(Display, "Found using 4.25 & 4.26 method\n");
goto setStream;
}
else if (CheckBytes<0x48, 0x8B, 0xC4>(stream, i, true)) {
Log(Display, "Found using UE 4.27 - 5.3 method\n");
setStream:
stream = (uint8_t*)stream - i;
goto HookVT;
}
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 using UE 4.25, 4.26 & 5.4+ method\n");
stream = (uint8_t*)stream - i - x;
goto HookVT;
}
else if (CheckBytes<0x4C, 0x8B, 0xDC>(stream, i + x, true) || CheckBytes<0x48, 0x8B, 0xC4>(stream, i + x, true))
break;
}
else if (CheckBytes<0x48, 0x8B, 0xC4>(stream, i, true)) {
Log(Display, "Found using UE 4.27 - 5.3 method\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 using UE 4.16 - 4.26 & 5.4+ method\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))
break;
}
}
}
return nullptr;
}
bool StringCallback(struct pf_patch_t* patch, void* stream) {
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"%p: request (easy handle:%p) has been added to threaded queue for processing") == 0) {
newStream = checkStream(stream);
}
else if (wcscmp((wchar_t*)saddr, L"STAT_FCurlHttpRequest_ProcessRequest") == 0) {
newStream = checkStream(stream);
}
}
if (newStream) {
Log(Display, "ProcessRequest: 0x%llx\n", __int64(newStream) - __int64(buf));
char* ptrMatches = (char*)&newStream;
auto patch2 = pf_construct_patch(ptrMatches, (void*)ptrMasks, 8, PtrCallback);
struct pf_patch_t patches2[] = {
patch2
};
struct pf_patchset_t patchset2 = pf_construct_patchset(patches2, sizeof(patches2) / sizeof(struct pf_patch_t), (bool (*)(void*, size_t, pf_patchset_t))pf_find_maskmatch);
while (!pf_patchset_emit(rbuf, rsize, patchset2));
return true;
}
return false;
HookVT:
Log(Display, "ProcessRequest: 0x%llx\n", __int64(stream) - __int64(buf));
char* ptrMatches = (char*)&stream;
auto patch2 = pf_construct_patch(ptrMatches, (void*)ptrMasks, 8, PtrCallback);
struct pf_patch_t patches2[] = {
patch2
};
struct pf_patchset_t patchset2 = pf_construct_patchset(patches2, sizeof(patches2) / sizeof(struct pf_patch_t), (bool (*)(void*, size_t, pf_patchset_t))pf_find_maskmatch);
while (!pf_patchset_emit(rbuf, rsize, patchset2));
return true;
}
bool EOSStringCallback(struct pf_patch_t* patch, void* stream) {
+2 -2
View File
@@ -80,11 +80,11 @@ namespace Starfall {
}
__forceinline StrType GetUrl() {
FString OutStr = FString((Protocol.Length - 1) + (Seperator.Length - 1) + (Domain.Length - 1) + (Port.Length - 1) + (Path.Length - 1) + (Query.String ? Query.Length - 1 : 0) + 1);
FString OutStr = FString((Protocol.Length - 1) + (Seperator.Length - 1) + (Domain.Length - 1) + (Port.String ? Port.Length - 1 : 0) + (Path.Length - 1) + (Query.String ? Query.Length - 1 : 0));
__movsb(PBYTE(OutStr.String), (const PBYTE)Protocol.String, Protocol.Length * 2);
__movsb(PBYTE(OutStr.String + wcslen(OutStr.String)), (const PBYTE)Seperator.String, Seperator.Length * 2);
__movsb(PBYTE(OutStr.String + wcslen(OutStr.String)), (const PBYTE)Domain.String, Domain.Length * 2);
__movsb(PBYTE(OutStr.String + wcslen(OutStr.String)), (const PBYTE)Port.String, Port.Length * 2);
if (Port.String) __movsb(PBYTE(OutStr.String + wcslen(OutStr.String)), (const PBYTE)Port.String, Port.Length * 2);
__movsb(PBYTE(OutStr.String + wcslen(OutStr.String)), (const PBYTE)Path.String, Path.Length * 2);
if (Query.String) __movsb(PBYTE(OutStr.String + wcslen(OutStr.String)), (const PBYTE)Query.String, Query.Length * 2);
return OutStr;