From 04ff2d941c1fa7d73f1d870891776b31d0905e10 Mon Sep 17 00:00:00 2001 From: Axel <58704636+Suwup@users.noreply.github.com> Date: Wed, 21 Jul 2021 08:57:44 +0200 Subject: [PATCH] Added support for the game Scavengers + updated fortnite decryption (#20) * Added support for the game Scavengers * Fixed spacing * Updated fortnite decryption --- Dumper/engine.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++---- README.md | 1 + 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/Dumper/engine.cpp b/Dumper/engine.cpp index 61f95ad..6a8280c 100644 --- a/Dumper/engine.cpp +++ b/Dumper/engine.cpp @@ -126,6 +126,64 @@ struct { } RogueCompany; static_assert(sizeof(RogueCompany) == sizeof(Offsets)); +struct { + uint16 Stride = 2; + struct { + uint16 Size = 24; + } FUObjectItem; + struct { + uint16 Number = 4; + } FName; + struct { + uint16 Info = 0; + uint16 WideBit = 0; + uint16 LenBit = 6; + uint16 HeaderSize = 2; + } FNameEntry; + struct { + uint16 Index = 0xC; + uint16 Class = 0x10; + uint16 Name = 0x18; + uint16 Outer = 0x20; + } UObject; + struct { + uint16 Next = 0x28; + } UField; + struct { + uint16 SuperStruct = 0x40; + uint16 Children = 0x48; + uint16 ChildProperties = 0x50; + uint16 PropertiesSize = 0x58; + } UStruct; + struct { + uint16 Names = 0x40; + } UEnum; + struct { + uint16 FunctionFlags = 0xB0; + uint16 Func = 0xB0 + 0x30; + } UFunction; + struct { + uint16 Class = 0x8; + uint16 Next = 0x20; + uint16 Name = 0x28; + } FField; + struct { + uint16 ArrayDim = 0x38; + uint16 ElementSize = 0x3C; + uint16 PropertyFlags = 0x40; + uint16 Offset = 0x4C; + uint16 Size = 0x78; + } FProperty; + struct { + uint16 ArrayDim = 0; + uint16 ElementSize = 0; + uint16 PropertyFlags = 0; + uint16 Offset = 0; + uint16 Size = 0; // sizeof(UProperty) + } UProperty; +} Scavengers; +static_assert(sizeof(Scavengers) == sizeof(Offsets)); + struct { uint16 Stride = 2; struct { @@ -254,6 +312,12 @@ struct { {"\x48\x8B\x05\x00\x00\x00\x00\x48\x8B\x0C\xC8\x48\x8D\x04\xD1\xEB", 16}, nullptr }, + { // Scavenger-Win64-Shipping + &Scavengers, + {"\x48\x8D\x0D\x00\x00\x00\x00\xE8\x00\x00\x00\x00\xC6\x05\x00\x00\x00\x00\x01\x0F\x10\x03\x4C\x8D\x44\x24\x20\x48\x8B\xC8", 30}, + {"\x48\x8B\x05\x00\x00\x00\x00\x48\x8B\x0C\xC8\x48\x8D\x04\xD1\xEB", 16}, + nullptr + }, { // DeadByDaylight-Win64-Shipping &DeadByDaylight, {"\x48\x8D\x35\x00\x00\x00\x00\xEB\x16", 9}, @@ -290,7 +354,7 @@ struct { jmp rax */ uint8 trampoline[] = { 0x48, 0x89, 0x5C, 0x24, 0x08, 0x57, 0x48, 0x83, 0xEC, 0x20, 0x89, 0xD3, 0x48, 0x89, 0xCF, 0x48, 0xB8, 0xEF, 0xBE, 0xAD, 0xDE, 0xEF, 0xBE, 0xAD, 0xDE, 0xFF, 0xE0 }; - *(uint64*)(trampoline + 17) = (uint64)((uint8*)decryptAnsi + 0x46); // https://i.imgur.com/zWtMDar.png + *(uint64*)(trampoline + 17) = (uint64)((uint8*)decryptAnsi + 0x4A); // https://i.imgur.com/zWtMDar.png Decrypt_ANSI = (ansi_fn)VirtualAlloc(0, sizeof(trampoline), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (Decrypt_ANSI) { memcpy(Decrypt_ANSI, trampoline, sizeof(trampoline)); @@ -308,10 +372,11 @@ std::unordered_map games = { {"SCUM", &engines[0]}, {"PropWitchHuntModule-Win64-Shipping", &engines[0]}, {"HLL-Win64-Shipping", &engines[0]}, - {"DeadByDaylight-Win64-Shipping", &engines[1]}, - {"Brickadia-Win64-Shipping", &engines[2]}, - {"POLYGON-Win64-Shipping", &engines[3]}, - {"FortniteClient-Win64-Shipping", &engines[4]} + {"Scavenger-Win64-Shipping", &engines[1]}, + {"DeadByDaylight-Win64-Shipping", &engines[2]}, + {"Brickadia-Win64-Shipping", &engines[3]}, + {"POLYGON-Win64-Shipping", &engines[4]}, + {"FortniteClient-Win64-Shipping", &engines[5]} }; STATUS EngineInit(std::string game, void* image) { diff --git a/README.md b/README.md index df9c952..ae00fca 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ - Brickadia - POLYGON - SCUM + - Scavengers ### Usage: ```