summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2020-03-26 21:30:23 +0100
committerToni Uhlig <matzeton@googlemail.com>2020-03-26 21:30:23 +0100
commita3cd9bcc24a10ab4f4a553471ac130250ae8cc3d (patch)
treea903f46b1d80965ea75acfe500f0fb5bdf0bf9e0
parent8094f2fe22c9abc7aa4bc7e28a51a9de2dbae98d (diff)
Hunt Showdown public release
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
-rw-r--r--.gitignore1
-rw-r--r--Hunt Showdown/CMD/CMD.vcxproj197
-rw-r--r--Hunt Showdown/CMD/CMD.vcxproj.user4
-rw-r--r--Hunt Showdown/CMD/Hunted.cpp333
-rw-r--r--Hunt Showdown/CMD/Hunted.vcxproj.filters36
-rw-r--r--Hunt Showdown/CMD/Hunted.vcxproj.user4
-rw-r--r--Hunt Showdown/CMD/KInterface.h3
-rw-r--r--Hunt Showdown/CMD/pch.cpp5
-rw-r--r--Hunt Showdown/CMD/pch.h14
-rw-r--r--Hunt Showdown/DLL/DLL.cpp6
-rw-r--r--Hunt Showdown/DLL/DLL.vcxproj186
-rw-r--r--Hunt Showdown/DLL/DLL.vcxproj.user4
-rw-r--r--Hunt Showdown/DLL/GdiRadar.h64
-rw-r--r--Hunt Showdown/DLL/GdiRadarLib.libbin0 -> 753922 bytes
-rw-r--r--Hunt Showdown/DLL/HuntClasses.h965
-rw-r--r--Hunt Showdown/DLL/dllmain.cpp222
-rw-r--r--Hunt Showdown/DLL/stdafx.cpp1
-rw-r--r--Hunt Showdown/DLL/stdafx.h16
-rw-r--r--Hunt Showdown/DLL/targetver.h8
-rw-r--r--cheats.sln20
20 files changed, 2089 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e1cab1e..648652a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
*.idb
*.pch
/.vs
+/x64/Release
diff --git a/Hunt Showdown/CMD/CMD.vcxproj b/Hunt Showdown/CMD/CMD.vcxproj
new file mode 100644
index 0000000..b18e818
--- /dev/null
+++ b/Hunt Showdown/CMD/CMD.vcxproj
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>15.0</VCProjectVersion>
+ <ProjectGuid>{DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>Hunted</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
+ <ProjectName>HuntCtrl</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ <SpectreMitigation>false</SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <SpectreMitigation>false</SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ <UseOfMfc>Static</UseOfMfc>
+ <SpectreMitigation>false</SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <SpectreMitigation>false</SpectreMitigation>
+ <UseOfMfc>Static</UseOfMfc>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <TargetName>$(ProjectName)-kmem</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <TargetName>$(ProjectName)-kmem</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <ExceptionHandling>SyncCThrow</ExceptionHandling>
+ <BufferSecurityCheck>true</BufferSecurityCheck>
+ <AdditionalIncludeDirectories>$(ProjectDir)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <AdditionalDependencies>kernel32.lib;user32.lib;Shlwapi.lib;MemDriverLib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(ProjectDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <ExceptionHandling>SyncCThrow</ExceptionHandling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AdditionalIncludeDirectories>$(ProjectDir)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>$(ProjectDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <AdditionalDependencies>kernel32.lib;user32.lib;Shlwapi.lib;MemDriverLib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="KInterface.h" />
+ <ClInclude Include="pch.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="Hunted.cpp" />
+ <ClCompile Include="pch.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Hunt Showdown/CMD/CMD.vcxproj.user b/Hunt Showdown/CMD/CMD.vcxproj.user
new file mode 100644
index 0000000..be25078
--- /dev/null
+++ b/Hunt Showdown/CMD/CMD.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup />
+</Project> \ No newline at end of file
diff --git a/Hunt Showdown/CMD/Hunted.cpp b/Hunt Showdown/CMD/Hunted.cpp
new file mode 100644
index 0000000..9329090
--- /dev/null
+++ b/Hunt Showdown/CMD/Hunted.cpp
@@ -0,0 +1,333 @@
+#include "pch.h"
+#include "KInterface.h"
+#include "DLLHelper.h"
+#include "PatternScanner.h"
+
+#include <array>
+#include <iostream>
+#include <iomanip>
+#include <windows.h>
+#include <Shlwapi.h>
+
+#define WHEXOUT std::setfill(L'0') << std::setw(16) << std::hex
+
+static BOOL running = false;
+static const wchar_t wName[] = L"HUNT";
+
+
+static bool consoleHandler(int signal) {
+ if (signal == CTRL_C_EVENT) {
+ if (!running)
+ exit(EXIT_FAILURE);
+ running = false;
+ std::wcout << L"Waiting for graceful shutdown .." << std::endl;
+ }
+ return true;
+}
+
+static void printBuf(UCHAR *buf, SIZE_T siz, SIZE_T bytesBeforeNewline) {
+ unsigned int i, j;
+ const unsigned char colors[] = { 10,11,12,13,14,15 };
+ HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
+
+ for (i = 0, j = 0; i < siz; ++i) {
+ if (i % bytesBeforeNewline == 0) {
+ SetConsoleTextAttribute(hConsole, colors[j++ % (sizeof colors)]);
+ wprintf(L"\n0x%04X: ", i);
+ }
+ wprintf(L"%02X ", buf[i]);
+ }
+ wprintf(L"\n");
+ SetConsoleTextAttribute(hConsole, 15);
+}
+
+static BOOL CALLBACK enumWindowsProc(HWND hWnd, LPARAM lParam)
+{
+ int length = GetWindowTextLength(hWnd);
+ TCHAR* buffer;
+ buffer = new TCHAR[length + 1];
+ memset(buffer, 0, (length + 1) * sizeof(TCHAR));
+ GetWindowText(hWnd, buffer, length + 1);
+ if (!wcscmp(buffer, wName))
+ *(HWND *)lParam = hWnd;
+ delete[] buffer;
+ return TRUE;
+}
+
+int wmain(int argc, wchar_t **argv)
+{
+ HANDLE targetPID = 0;
+ PVOID buf;
+ HANDLE kevent;
+ HANDLE uevent;
+
+ KInterface &ki = KInterface::getInstance();
+ std::vector<MEMORY_BASIC_INFORMATION> pages;
+ std::vector<MODULE_DATA> modules;
+
+ std::wcout << L"Waiting for window title: '" << wName << L"'" << std::endl;
+
+ HWND targetHWND = NULL;
+ while (1) {
+ if (!EnumWindows(enumWindowsProc, (LPARAM)&targetHWND)) {
+ return 1;
+ }
+ if (targetHWND) {
+ std::wcout << L"Found window '" << wName << L"' with Handle 0x"
+ << std::hex << targetHWND << std::endl;
+ break;
+ }
+ Sleep(1000);
+ }
+ GetWindowThreadProcessId(targetHWND, (LPDWORD)&targetPID);
+
+ SetConsoleCtrlHandler((PHANDLER_ROUTINE)consoleHandler, TRUE);
+
+ if (!ki.Init()) {
+ std::wcout << L"Kernel Interface Init() failed" << std::endl;
+ return 1;
+ }
+
+ try {
+ buf = ki.getBuffer();
+ kevent = ki.getKHandle();
+ uevent = ki.getUHandle();
+ }
+ catch (std::runtime_error& err) {
+ std::wcout << err.what() << std::endl;
+ return 1;
+ }
+
+ std::wcout << L"Buffer.: " << buf << std::endl;
+ std::wcout << L"KHandle: " << kevent << std::endl;
+ std::wcout << L"UHandle: " << uevent << std::endl;
+
+ if (!ki.Handshake()) {
+ std::wcout << L"Kernel Interface Handshake() failed" << std::endl;
+ return 1;
+ }
+ if (targetPID) {
+ if (!ki.Modules(targetPID, modules))
+ std::wcout << L"Kernel Interface Modules() failed with 0x"
+ << std::hex << ki.getLastNtStatus() << std::endl;
+ else std::wcout << L"Got " << std::dec << modules.size() << L" modules for pid 0x"
+ << std::hex << targetPID << std::endl;
+ if (!ki.Pages(targetPID, pages))
+ std::wcout << L"Kernel Interface Pages() failed with 0x"
+ << std::hex << ki.getLastNtStatus() << std::endl;
+ else std::wcout << L"Got " << std::dec << pages.size() << L" mapped pages for pid 0x"
+ << std::hex << targetPID << std::endl;
+ }
+
+ running = TRUE;
+ do {
+ if (ki.RecvWait() == SRR_TIMEOUT) {
+ std::wcout << L"Ping -> ";
+ if (!ki.Ping()) {
+ std::wcout << L"Got no valid PONG, abort!" << std::endl;
+ running = FALSE;
+ }
+ else std::wcout << L"PONG!" << std::endl;
+ }
+
+ if (!running)
+ break;
+
+ try {
+ if (targetPID) {
+ for (MODULE_DATA& md : modules) {
+ if (!strncmp(md.BaseDllName, "CryEntitySystem.dll",
+ sizeof md.BaseDllName))
+ {
+ /*
+ * "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\cl.exe"
+ * /Zp2 /c /d1reportSingleClassLayoutCEntitySystem
+ * \Source\Repos\CRYENGINE\Code\CryEngine\CryEntitySystem\EntitySystem.cpp
+ * /I \Source\Repos\CRYENGINE\Code\CryEngine\CryCommon
+ * /I "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include"
+ * /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt"
+ * /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared"
+ * /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um"
+ */
+
+ static bool first = true;
+ if (first) {
+ first = false;
+
+ SymbolResolver sresolv;
+ DLLHelper dll(sresolv);
+ if (!dll.Init(targetPID, "./HuntDLL.dll")) {
+ std::wcout << L"DLL Init failed" << std::endl;
+ }
+ if (!dll.VerifyHeader()) {
+ std::wcout << L"DLL VerifyHeader failed" << std::endl;
+ }
+ if (!dll.InitTargetMemory(/* 0x7ffe00000000 */)) {
+ std::wcout << L"DLL InitTargetMemory failed" << std::endl;
+ }
+ if (!dll.HasImports())
+ {
+ std::wcout << L"DLL has no ImportTable" << std::endl;
+ }
+ else if (!dll.FixImports()) {
+ std::wcout << L"DLL FixImports failed" << std::endl;
+ }
+ if (!dll.HasRelocs()) {
+ std::wcout << L"DLL has no RelocTable" << std::endl;
+ }
+ else if (!dll.FixRelocs()) {
+ std::wcout << L"DLL FixRelocs failed" << std::endl;
+ }
+ if (!dll.CopyHeaderAndSections()) {
+ std::wcout << L"DLL CopyHeaderAndSections failed" << std::endl;
+ }
+ std::wcout << L"DLL mapping succesful, "
+ << "BaseAddress: " << WHEXOUT << dll.GetBaseAddress()
+ << ", EntryPoint: " << WHEXOUT << dll.GetEntryPoint() << std::endl;
+
+ UINT64 targetAddr = dll.GetBaseAddress();
+ UINT64 g_pEnvSysSigged = NULL;
+ UINT64 g_pCCryActionSigged = NULL;
+ UINT64 g_pEntSys = 0;
+
+ {
+ struct loadlib_user_data llua;
+ char * cryDllDir = new char[sizeof md.FullDllPath];
+ std::memcpy(cryDllDir, md.FullDllPath, sizeof md.FullDllPath);
+ PathRemoveFileSpecA(cryDllDir);
+ llua.additionalDllSearchDirectories.push_back(std::string(cryDllDir));
+ delete cryDllDir;
+
+ PatternScanner pscan(sresolv, &map_loadlib, &llua);
+ std::vector<SIZE_T> foundAddresses;
+ /* ?g_pIEntitySystem -> EXPORT TABLE [Offset: -0x32 == g_pEntSys] */
+ pscan.Scan(md, "3F 67 5F 70 49 45 6E 74 69 74 79 53 79 73 74 65 6D", foundAddresses);
+
+ for (auto& addr : foundAddresses) {
+ g_pEntSys = KMemory::Rpm<UINT64>(targetPID, (PVOID)(addr - 0x8));
+ g_pEntSys >>= 32;
+ g_pEntSys += addr;
+ std::wcout << "g_pEntSys via SigScan: " << g_pEntSys << std::endl;
+ }
+ }
+
+ for (MODULE_DATA& md : modules) {
+ if (!strncmp(md.BaseDllName, "CryAction.dll",
+ sizeof md.BaseDllName)) {
+
+ struct loadlib_user_data llua;
+ char * cryDllDir = new char[sizeof md.FullDllPath];
+ std::memcpy(cryDllDir, md.FullDllPath, sizeof md.FullDllPath);
+ PathRemoveFileSpecA(cryDllDir);
+ llua.additionalDllSearchDirectories.push_back(std::string(cryDllDir));
+ delete cryDllDir;
+
+ for (auto& dir : llua.additionalDllSearchDirectories) {
+ std::wcout << L"AdditionalDLLDir: "
+ << std::wstring(dir.begin(), dir.end()) << std::endl;
+ }
+ {
+ PatternScanner pscan(sresolv, &map_loadlib, &llua);
+ std::vector<SIZE_T> foundAddresses;
+ pscan.Scan(md, "48 8B 48 20 48 8B 01 FF 90 20 01 00 00", foundAddresses);
+
+ for (auto& addr : foundAddresses) {
+ g_pEnvSysSigged = KMemory::Rpm<UINT64>(targetPID, (PVOID)(addr - 0x8));
+ g_pEnvSysSigged >>= 32;
+ g_pEnvSysSigged += addr;
+ std::wcout << "g_pEnvSys via SigScan: " << g_pEnvSysSigged << std::endl;
+ }
+ }
+ {
+ PatternScanner pscan(sresolv, &map_loadlib, &llua);
+ std::vector<SIZE_T> foundAddresses;
+ pscan.Scan(md, "48 89 6C 24 38 48 8D 2D ?? ?? ?? ?? 48 8B 11", foundAddresses);
+
+ for (auto& addr : foundAddresses) {
+ g_pCCryActionSigged = KMemory::Rpm<UINT64>(targetPID, (PVOID)(addr - 0x8));
+ g_pCCryActionSigged >>= 32;
+ g_pCCryActionSigged += addr;
+ std::wcout << "g_pCCryAction via SigScan: " << g_pCCryActionSigged << std::endl;
+ }
+ }
+
+ break;
+ }
+ }
+
+ BYTE cc[] = { /* push rax; push rbx; push rcx; push rdx; push rsi;
+ push rdi; push rsp; push rbp; push r8; push r9;
+ push r10; push r11; push r12; push r13; push r14;
+ push r15 */
+ 0x50, 0x53, 0x51, 0x52, 0x56, 0x57,
+ 0x54, 0x55, 0x41, 0x50, 0x41, 0x51,
+ 0x41, 0x52, 0x41, 0x53, 0x41, 0x54,
+ 0x41, 0x55, 0x41, 0x56, 0x41, 0x57,
+ /* nops */
+ 0x90, 0x90, 0x90, 0x90, 0x90,
+ /* mov rcx, 0x0000000000000000 */
+ 0x48, 0xB9,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* mov rax, 0x0000000000000000 */
+ 0x48, 0xB8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* call rax */
+ 0xFF, 0xD0,
+ /* nops */
+ 0x90, 0x90,
+ /* pop r15; pop r14; pop r13; pop r12; pop r11;
+ pop r10; pop r9; pop r8; pop rbp; pop rsp;
+ pop rdi; pop rsi; pop rdx; pop rcx; pop rbx;
+ pop rax */
+ 0x41, 0x5F, 0x41, 0x5E, 0x41, 0x5D,
+ 0x41, 0x5C, 0x41, 0x5B, 0x41, 0x5A,
+ 0x41, 0x59, 0x41, 0x58, 0x5D, 0x5C,
+ 0x5F, 0x5E, 0x5A, 0x59, 0x5B, 0x58,
+ /* nops */
+ 0x90, 0x90,
+ /* mov rax, 0x0000000000000000 */
+ 0x48, 0xB8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* jmp rax */
+ 0xFF, 0xE0,
+ /* the following is part of the HuntCtx struct */
+ /* ptr to ptr to EntitySystem */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* ptr to ptr to GlobalEnv */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* ptr to ptr to CCryAction */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ *(UINT64 *)((BYTE *)cc + 31) = targetAddr + 91;
+ *(UINT64 *)((BYTE *)cc + 41) = dll.GetEntryPoint();
+ /* PATTERN: 48 89 4C 24 08 48 83 EC 48 +0x275 */
+ UINT64 jumpBackAddr = (UINT64)md.DllBase + 0x70875; /* TODO: SigScan Me! */
+ *(UINT64 *)((BYTE *)cc + 81) = jumpBackAddr;
+ *(UINT64 *)((BYTE *)cc + 91) = g_pEntSys;
+ *(UINT64 *)((BYTE *)cc + 99) = g_pEnvSysSigged;
+ *(UINT64 *)((BYTE *)cc + 107) = g_pCCryActionSigged;
+
+ printBuf(cc, sizeof cc, 32);
+ KMemoryBuf::Wpm<sizeof cc>(targetPID, (PVOID)targetAddr, &cc[0]);
+
+ /* mov rax, 0x0000000000000000; jmp rax */
+ BYTE dd[] = { 0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0 };
+ *(UINT64 *)((BYTE *)dd + 2) = (UINT64)targetAddr;
+ printBuf(dd, sizeof dd, 32);
+
+ /* PATTERN: 48 89 4C 24 08 48 83 EC 48 +0x9 */
+ KMemoryBuf::Wpm<sizeof dd>(targetPID, (PVOID)((UINT64)md.DllBase + 0x70609 /* TODO: SigScan Me! */), &dd[0]);
+ }
+ }
+ }
+ }
+ }
+ catch (std::runtime_error& err) {
+ std::wcout << err.what() << std::endl;
+ }
+ } while (running);
+
+ std::wcout << L"Driver shutdown .." << std::endl;
+ ki.Exit();
+
+ return 0;
+} \ No newline at end of file
diff --git a/Hunt Showdown/CMD/Hunted.vcxproj.filters b/Hunt Showdown/CMD/Hunted.vcxproj.filters
new file mode 100644
index 0000000..e3b3430
--- /dev/null
+++ b/Hunt Showdown/CMD/Hunted.vcxproj.filters
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="pch.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\include\KInterface.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\include\KMemDriver.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="pch.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Hunted.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/Hunt Showdown/CMD/Hunted.vcxproj.user b/Hunt Showdown/CMD/Hunted.vcxproj.user
new file mode 100644
index 0000000..be25078
--- /dev/null
+++ b/Hunt Showdown/CMD/Hunted.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup />
+</Project> \ No newline at end of file
diff --git a/Hunt Showdown/CMD/KInterface.h b/Hunt Showdown/CMD/KInterface.h
new file mode 100644
index 0000000..fd3ea8f
--- /dev/null
+++ b/Hunt Showdown/CMD/KInterface.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#error "This CHEAT is requires an additional non-public library and kernel driver. Nice try pasta kid.." \ No newline at end of file
diff --git a/Hunt Showdown/CMD/pch.cpp b/Hunt Showdown/CMD/pch.cpp
new file mode 100644
index 0000000..3a3d12b
--- /dev/null
+++ b/Hunt Showdown/CMD/pch.cpp
@@ -0,0 +1,5 @@
+// pch.cpp: source file corresponding to pre-compiled header; necessary for compilation to succeed
+
+#include "pch.h"
+
+// In general, ignore this file, but keep it around if you are using pre-compiled headers.
diff --git a/Hunt Showdown/CMD/pch.h b/Hunt Showdown/CMD/pch.h
new file mode 100644
index 0000000..b04e71e
--- /dev/null
+++ b/Hunt Showdown/CMD/pch.h
@@ -0,0 +1,14 @@
+// Tips for Getting Started:
+// 1. Use the Solution Explorer window to add/manage files
+// 2. Use the Team Explorer window to connect to source control
+// 3. Use the Output window to see build output and other messages
+// 4. Use the Error List window to view errors
+// 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
+// 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
+
+#ifndef PCH_H
+#define PCH_H
+
+// TODO: add headers that you want to pre-compile here
+
+#endif //PCH_H
diff --git a/Hunt Showdown/DLL/DLL.cpp b/Hunt Showdown/DLL/DLL.cpp
new file mode 100644
index 0000000..a3aa76f
--- /dev/null
+++ b/Hunt Showdown/DLL/DLL.cpp
@@ -0,0 +1,6 @@
+// TestDLL.cpp : Defines the exported functions for the DLL application.
+//
+
+#include "stdafx.h"
+
+
diff --git a/Hunt Showdown/DLL/DLL.vcxproj b/Hunt Showdown/DLL/DLL.vcxproj
new file mode 100644
index 0000000..fc206f9
--- /dev/null
+++ b/Hunt Showdown/DLL/DLL.vcxproj
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>15.0</VCProjectVersion>
+ <ProjectGuid>{5BC7339B-8115-493D-925B-9891DBC10EA9}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>TestDLL</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
+ <ProjectName>HuntDLL</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ <SpectreMitigation>false</SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <SpectreMitigation>false</SpectreMitigation>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>false</SDLCheck>
+ <PreprocessorDefinitions>_DEBUG;TESTDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>$(ProjectDir);$(VCToolsInstallDir)lib\x64;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>kernel32.lib;user32.lib;GdiRadarLib.lib</AdditionalDependencies>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <EntryPointSymbol>LibEntry</EntryPointSymbol>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>WIN32;_DEBUG;TESTDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>WIN32;NDEBUG;TESTDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>false</SDLCheck>
+ <PreprocessorDefinitions>NDEBUG;TESTDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <DisableSpecificWarnings>%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <AdditionalIncludeDirectories>$(SolutionDir)\GdiRadarLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>$(SolutionDir)..\GdiRadar\x64\Release-Verbose;$(VCToolsInstallDir)lib\x64;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>kernel32.lib;user32.lib;GdiRadarLib.lib</AdditionalDependencies>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <EntryPointSymbol>LibEntry</EntryPointSymbol>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="HuntClasses.h" />
+ <ClInclude Include="stdafx.h" />
+ <ClInclude Include="targetver.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="dllmain.cpp" />
+ <ClCompile Include="stdafx.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="DLL.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Hunt Showdown/DLL/DLL.vcxproj.user b/Hunt Showdown/DLL/DLL.vcxproj.user
new file mode 100644
index 0000000..be25078
--- /dev/null
+++ b/Hunt Showdown/DLL/DLL.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup />
+</Project> \ No newline at end of file
diff --git a/Hunt Showdown/DLL/GdiRadar.h b/Hunt Showdown/DLL/GdiRadar.h
new file mode 100644
index 0000000..6b12fbc
--- /dev/null
+++ b/Hunt Showdown/DLL/GdiRadar.h
@@ -0,0 +1,64 @@
+#pragma once
+
+#include <time.h>
+#include <Windows.h>
+
+
+struct gdi_radar_config {
+ LPCWSTR className;
+ LPCWSTR windowName;
+ double minimumUpdateTime;
+ UINT64 maximumRedrawFails;
+ size_t reservedEntities;
+ bool drawAngles;
+};
+
+struct gdi_radar_context;
+
+
+static inline HINSTANCE gdi_radar_get_fake_hinstance()
+{
+ LONG_PTR hi = GetWindowLongW(GetActiveWindow(), -6);
+ return (HINSTANCE)hi;
+}
+HWND gdi_radar_get_hwnd(struct gdi_radar_context * const ctx);
+struct gdi_radar_context * const
+ gdi_radar_configure(struct gdi_radar_config const * const cfg,
+ HINSTANCE hInst);
+bool gdi_radar_init(struct gdi_radar_context * const ctx);
+
+
+enum entity_color {
+ EC_BLUE, EC_BLACK, EC_RED
+};
+
+struct entity {
+ int pos[2];
+ float angle;
+ int angle_line_length;
+ enum entity_color color;
+ const char *name;
+};
+
+static inline float degree2radian(int a) {
+ return (a * 0.017453292519f);
+}
+void gdi_radar_add_entity(struct gdi_radar_context * const ctx,
+ struct entity * const ent);
+void gdi_radar_set_entity(struct gdi_radar_context * const ctx, size_t i,
+ struct entity * const ent);
+void gdi_radar_clear_entities(struct gdi_radar_context * const ctx);
+bool gdi_radar_check_if_redraw_necessary(struct gdi_radar_context * const ctx);
+bool gdi_radar_redraw_if_necessary(struct gdi_radar_context * const ctx);
+void gdi_radar_set_game_dimensions(struct gdi_radar_context * const ctx,
+ UINT64 GameMapWidth, UINT64 GameMapHeight, bool StickToBottom = true);
+static inline void gdi_radar_set_game_dimensions(
+ struct gdi_radar_context * const ctx,
+ float GameMapWidth, float GameMapHeight, bool StickToBottom = true)
+{
+ gdi_radar_set_game_dimensions(ctx,
+ (UINT64)GameMapWidth, (UINT64)GameMapHeight, StickToBottom);
+}
+LRESULT gdi_radar_process_window_events_blocking(struct gdi_radar_context * const ctx);
+LRESULT gdi_radar_process_window_events_nonblocking(struct gdi_radar_context * const ctx);
+void gdi_radar_close_and_cleanup(struct gdi_radar_context ** const ctx); \ No newline at end of file
diff --git a/Hunt Showdown/DLL/GdiRadarLib.lib b/Hunt Showdown/DLL/GdiRadarLib.lib
new file mode 100644
index 0000000..5fcfb97
--- /dev/null
+++ b/Hunt Showdown/DLL/GdiRadarLib.lib
Binary files differ
diff --git a/Hunt Showdown/DLL/HuntClasses.h b/Hunt Showdown/DLL/HuntClasses.h
new file mode 100644
index 0000000..e394cf8
--- /dev/null
+++ b/Hunt Showdown/DLL/HuntClasses.h
@@ -0,0 +1,965 @@
+#pragma once
+
+#include <Windows.h>
+#include <stdarg.h>
+
+#include <string>
+#include <map>
+
+struct ISystem;
+
+
+#define ENTITY_FLAG_LOCAL_PLAYER 0x8000000
+
+#define PENTITYSYSTEM_ISYSTEM_OFFSET 104
+
+template<class _I> class _smart_ptr
+{
+private:
+ _I* p;
+public:
+ _smart_ptr() : p(NULL) {}
+ _smart_ptr(_I* p_)
+ {
+ p = p_;
+ if (p)
+ p->AddRef();
+ }
+ _smart_ptr(const _smart_ptr& p_)
+ {
+ p = p_.p;
+ if (p)
+ p->AddRef();
+ }
+ _smart_ptr(_smart_ptr&& p_) noexcept
+ {
+ p = p_.p;
+ p_.p = nullptr;
+ }
+ template<typename _Y>
+ _smart_ptr(const _smart_ptr<_Y>& p_)
+ {
+ p = p_.get();
+ if (p)
+ p->AddRef();
+ }
+ ~_smart_ptr()
+ {
+ if (p)
+ p->Release();
+ }
+ operator _I*() const { return p; }
+
+ _I& operator*() const { return *p; }
+ _I* operator->(void) const { return p; }
+ _I* get() const { return p; }
+ _smart_ptr& operator=(_I* newp)
+ {
+ if (newp != this->p)
+ {
+ _I* oldp = p;
+ p = newp;
+ if (p)
+ p->AddRef();
+ if (oldp)
+ oldp->Release();
+ }
+ return *this;
+ }
+ void reset()
+ {
+ _smart_ptr<_I>().swap(*this);
+ }
+ void reset(_I* p)
+ {
+ if (p != this->p)
+ {
+ _smart_ptr<_I>(p).swap(*this);
+ }
+ }
+ _smart_ptr& operator=(const _smart_ptr& newp)
+ {
+ if (newp.p != this->p)
+ {
+ if (newp.p)
+ newp.p->AddRef();
+ if (p)
+ p->Release();
+ p = newp.p;
+ }
+ return *this;
+ }
+ _smart_ptr& operator=(_smart_ptr&& p_)
+ {
+ if (this != &p_)
+ {
+ if (p)
+ p->Release();
+ p = p_.p;
+ p_.p = nullptr;
+ }
+ return *this;
+ }
+ template<typename _Y>
+ _smart_ptr& operator=(const _smart_ptr<_Y>& newp)
+ {
+ _I* const p2 = newp.get();
+ if (p2 != this->p)
+ {
+ if (p2)
+ p2->AddRef();
+ if (p)
+ p->Release();
+ p = p2;
+ }
+ return *this;
+ }
+ void swap(_smart_ptr<_I>& other)
+ {
+ std::swap(p, other.p);
+ }
+ void Assign_NoAddRef(_I* ptr)
+ {
+ CRY_ASSERT(!p, "Assign_NoAddRef should only be used on a default-constructed, not-yet-assigned smart_ptr instance");
+ p = ptr;
+ }
+ _I* ReleaseOwnership()
+ {
+ _I* ret = p;
+ p = 0;
+ return ret;
+ }
+};
+
+template<typename T, int N>
+struct INumberArray
+{
+};
+
+template<typename T, int N, typename Final>
+struct INumberVector : INumberArray<T, N>
+{
+};
+
+template<typename F> struct Vec3_tpl
+ : INumberVector<F, 3, Vec3_tpl<F>>
+{
+public:
+ F x, y, z;
+ Vec3_tpl(F vx, F vy, F vz) : x(vx), y(vy), z(vz) {}
+};
+typedef Vec3_tpl<float> Vec3;
+
+template<typename F> struct Ang3_tpl
+ : INumberVector<F, 3, Ang3_tpl<F>>
+{
+public:
+ F x, y, z;
+ Ang3_tpl(F vx, F vy, F vz) : x(vx), y(vy), z(vz) {}
+};
+typedef Ang3_tpl<float> Ang3;
+
+template<typename F> struct Quat_tpl
+ : INumberVector<F, 4, Quat_tpl<F>>
+{
+public:
+ Vec3_tpl<F> v;
+ F w;
+};
+typedef Quat_tpl<float> Quat;
+
+class Matrix34 {
+public:
+ float m00;
+ float m01;
+ float m02;
+ float m03;
+ float m10;
+ float m11;
+ float m12;
+ float m13;
+ float m20;
+ float m21;
+ float m22;
+ float m23;
+ Vec3 GetTranslation() const { return Vec3(m03, m13, m23); }
+};
+
+enum EDrawTextFlags : UINT32
+{
+ eDrawText_Default,
+ eDrawText_Center = 1,
+ eDrawText_Right = 2,
+ eDrawText_CenterV = 4,
+ eDrawText_Bottom = 8,
+ eDrawText_2D = 16,
+ eDrawText_FixedSize = 32,
+ eDrawText_800x600 = 64,
+ eDrawText_Monospace = 128,
+ eDrawText_Framed = 256,
+ eDrawText_DepthTest = 512,
+ eDrawText_IgnoreOverscan = 1024,
+ eDrawText_LegacyBehavior = 2048
+};
+
+template<class T> struct Color_tpl
+{
+ T r, g, b, a;
+ Color_tpl() {};
+ Color_tpl(T _r, T _g, T _b, T _a) : r(_r), g(_g), b(_b), a(_a) {}
+};
+
+typedef Color_tpl<UINT8> ColorB;
+
+struct SAuxGeomRenderFlags
+{
+ UINT32 m_renderFlags;
+};
+
+class IRenderAuxGeom
+{
+public:
+ virtual ~IRenderAuxGeom() {}
+ virtual SAuxGeomRenderFlags SetRenderFlags(const SAuxGeomRenderFlags& renderFlags) = 0;
+ virtual SAuxGeomRenderFlags GetRenderFlags() = 0;
+ virtual PVOID GetCamera() const = 0;
+};
+
+struct IEntity
+{
+public:
+ virtual ~IEntity() {}
+ virtual int GetId() const = 0;
+ virtual const PVOID GetGuid() const = 0;
+ virtual PVOID GetClass() const = 0;
+ virtual void fn_00(void) = 0;
+ virtual void fn_01(void) = 0;
+ virtual UINT32 GetFlags() const = 0;
+ virtual void fn_02(void) = 0;
+ virtual void fn_03(void) = 0;
+ virtual void fn_04(void) const = 0;
+ virtual void fn_05(void) = 0;
+ virtual UINT32 GetFlagsExtended() const = 0;
+ virtual bool IsInitialized() const = 0;
+ virtual bool IsGarbage() const = 0;
+ virtual UINT8 GetComponentChangeState() const = 0;
+ virtual void fn_06(void) = 0;
+ virtual const char* GetName() const = 0;
+ virtual std::string GetEntityTextDescription() const = 0;
+ virtual void fn_07(void) = 0;
+ virtual bool IsLoadedFromLevelFile() const = 0;
+ virtual void fn_08(void) = 0;
+ virtual void fn_09(void) = 0;
+ virtual void fn_10(void) = 0;
+ virtual int GetChildCount() const = 0;
+ virtual IEntity* GetChild(int nIndex) const = 0;
+ virtual IEntity* GetParent() const = 0;
+ virtual IEntity* GetLocalSimParent() const = 0;
+ virtual Matrix34 GetParentAttachPointWorldTM() const = 0;
+ virtual bool IsParentAttachmentValid() const = 0;
+ virtual void fn_11(void) = 0;
+ virtual void fn_12(void) = 0;
+ virtual const Matrix34& GetWorldTM() const = 0;
+ virtual Matrix34 GetLocalTM() const = 0;
+ virtual void fn_13(void) const = 0;
+ virtual void fn_14(void) const = 0;
+ virtual void fn_15(void) = 0;
+ virtual void fn_16(void) = 0;
+ virtual void fn_17(void) = 0;
+ virtual const Vec3& GetPos() const = 0;
+ virtual void fn_18(void) = 0;
+ virtual void fn_19(void) const = 0;
+ virtual void fn_20(void) = 0;
+ virtual const Vec3& GetScale() const = 0;
+ virtual void fn_21(void) = 0;
+ virtual Vec3 GetWorldPos() const = 0;
+ virtual Ang3 GetWorldAngles() const = 0;
+ virtual Quat GetWorldRotation() const = 0;
+ virtual Vec3 GetWorldScale() const = 0;
+ //virtual IScriptTable* GetScriptTable() const final;
+ //GetScriptTable -> VirtualFuncIndex 64
+};
+
+struct IEntityIt
+{
+ virtual ~IEntityIt() {}
+ virtual void AddRef() = 0;
+ virtual void Release() = 0;
+ virtual bool IsEnd() = 0;
+ virtual IEntity* Next() = 0;
+ virtual IEntity* This() = 0;
+ virtual void MoveFirst() = 0;
+};
+
+typedef _smart_ptr<IEntityIt> IEntityItPtr;
+
+struct IEntitySystem
+{
+ virtual ~IEntitySystem() {}
+ virtual void fn_00(void) = 0;
+ virtual void fn_01(void) = 0;
+ virtual void fn_02(void) = 0;
+ virtual void fn_03(void) = 0;
+ virtual void fn_04(void) = 0;
+ virtual void fn_05(void) = 0;
+ virtual void fn_06(void) = 0;
+ virtual void fn_07(void) = 0;
+ virtual void fn_08(void) const = 0;
+ virtual void fn_09(void) = 0;
+ virtual void fn_10(void) = 0;
+ virtual PVOID GetEntity(void) const = 0;
+ virtual PVOID FindEntityByName(void) const = 0;
+ virtual void fn_11(void) = 0;
+ virtual void fn_12(void) = 0;
+ virtual void fn_13(void) = 0;
+ virtual UINT32 GetNumEntities(void) const = 0;
+ virtual IEntityItPtr GetEntityIterator() = 0;
+ virtual void fn_14(void) = 0;
+ virtual void fn_15(void) = 0;
+ virtual void fn_16(void) = 0;
+ virtual void fn_17(void) = 0;
+ virtual void fn_18(void) = 0;
+ virtual void fn_19(void) const = 0;
+ virtual void fn_20(void) const = 0;
+ virtual void fn_21(void) = 0;
+ virtual void fn_22(void) = 0;
+ virtual void fn_23(void) = 0;
+ virtual void fn_24(void) = 0;
+ virtual void fn_25(void) const = 0;
+ virtual ISystem* GetSystem() const = 0;
+};
+
+struct IRenderer//: public IRendererCallbackServer
+{
+ virtual ~IRenderer() {}
+ virtual void fn_00(void) = 0;
+ virtual void fn_01(void) = 0;
+ virtual void fn_02(void) = 0;
+ virtual void fn_03(void) = 0;
+ virtual void fn_04(void) = 0;
+ virtual void fn_05(void) = 0;
+ virtual void fn_06(void) = 0;
+ virtual void fn_07(void) = 0;
+ virtual void fn_08(void) = 0;
+ virtual void fn_09(void) = 0;
+ virtual void fn_10(void) = 0;
+ virtual void fn_11(void) = 0;
+ virtual int GetFeatures() = 0;
+ virtual void fn_12(void) = 0;
+ virtual int GetNumGeomInstances() = 0;
+ virtual int GetNumGeomInstanceDrawCalls() = 0;
+ virtual int GetCurrentNumberOfDrawCalls() = 0;
+ virtual void fn_13(void) = 0;
+ virtual void fn_14(void) = 0;
+ virtual void fn_15(void) = 0;
+ virtual void fn_16(void) = 0;
+ virtual void fn_17(void) = 0;
+ virtual void fn_18(void) = 0;
+ virtual void fn_19(void) = 0;
+ virtual void fn_20(void) = 0;
+ virtual void fn_21(void) = 0;
+ virtual void fn_22(void) = 0;
+ virtual void fn_23(void) = 0;
+ virtual void fn_24(void) = 0;
+ virtual void fn_25(void) = 0;
+ virtual void fn_26(void) = 0;
+ virtual void fn_27(void) = 0;
+ virtual void fn_28(void) = 0;
+ virtual void fn_29(void) = 0;
+ virtual void fn_30(void) = 0;
+ virtual void fn_31(void) = 0;
+ virtual void fn_32(void) = 0;
+ virtual void fn_33(void) = 0;
+ virtual void fn_34(void) = 0;
+ virtual void fn_35(void) = 0;
+ virtual void fn_36(void) = 0;
+ virtual void fn_37(void) = 0;
+ virtual int GetWhiteTextureId() const = 0;
+ virtual void fn_38(void) = 0;
+ virtual void fn_39(void) = 0;
+ virtual int GetHeight() const = 0;
+ virtual int GetWidth() const = 0;
+ virtual float GetPixelAspectRatio() const = 0;
+ virtual int GetOverlayHeight() const = 0;
+ virtual int GetOverlayWidth() const = 0;
+ virtual void GetMemoryUsage(PVOID Sizer) = 0;
+ virtual void GetBandwidthStats(float* fBandwidthRequested) = 0;
+ virtual void fn_40(void) = 0;
+ virtual void fn_41(void) = 0;
+ virtual void fn_42(void) = 0;
+ virtual int GetColorBpp() = 0;
+ virtual int GetDepthBpp() = 0;
+ virtual int GetStencilBpp() = 0;
+ virtual bool IsStereoEnabled() const = 0;
+ virtual float GetNearestRangeMax() const = 0;
+ virtual bool ProjectToScreen(
+ float ptx, float pty, float ptz,
+ float* sx, float* sy, float* sz) = 0;
+ virtual int UnProject(
+ float sx, float sy, float sz,
+ float* px, float* py, float* pz,
+ const float modelMatrix[16],
+ const float projMatrix[16],
+ const int viewport[4]) = 0;
+ virtual int UnProjectFromScreen(
+ float sx, float sy, float sz,
+ float* px, float* py, float* pz) = 0;
+ virtual void fn_43(void) = 0;
+ virtual void fn_44(void) = 0;
+ virtual void fn_45(void) = 0;
+ virtual void fn_46(void) = 0;
+ virtual void fn_47(void) = 0;
+ virtual void fn_48(void) = 0;
+ virtual void fn_49(void) = 0;
+ virtual void fn_50(void) = 0;
+ virtual int CurThreadList() = 0;
+ virtual void fn_51(void) = 0;
+ virtual void fn_52(void) = 0;
+ virtual void fn_53(void) = 0;
+ virtual void fn_54(void) = 0;
+ virtual void fn_55(void) = 0;
+ virtual void fn_56(void) = 0;
+ virtual void fn_57(void) = 0;
+ virtual void fn_58(void) = 0;
+ virtual void fn_59(void) = 0;
+ virtual void fn_60(void) = 0;
+ virtual void fn_61(void) = 0;
+ virtual void fn_62(void) = 0;
+ virtual void fn_63(void) = 0;
+ virtual void fn_64(void) = 0;
+ virtual void fn_65(void) = 0;
+ virtual void fn_66(void) = 0;
+ virtual void fn_67(void) = 0;
+ virtual void fn_68(void) = 0;
+ virtual void fn_69(void) = 0;
+ virtual void fn_70(void) = 0;
+ virtual void fn_71(void) = 0;
+ virtual void fn_72(void) = 0;
+ virtual void fn_73(void) = 0;
+ virtual void fn_74(void) = 0;
+ virtual void fn_75(void) = 0;
+ virtual void fn_76(void) = 0;
+ virtual void fn_77(void) = 0;
+ virtual void fn_78(void) = 0;
+ virtual void fn_79(void) const = 0;
+ virtual void fn_80(void) = 0;
+ virtual void fn_81(void) = 0;
+ virtual void fn_82(void) = 0;
+ virtual void fn_83(void) = 0;
+ virtual void fn_84(void) = 0;
+ virtual void fn_85(void) = 0;
+ virtual void fn_86(void) = 0;
+ virtual void fn_87(void) = 0;
+ virtual void fn_88(void) = 0;
+ virtual void fn_89(void) = 0;
+ virtual void fn_90(void) = 0;
+ virtual void fn_91(void) = 0;
+ virtual void fn_92(void) = 0;
+ virtual void fn_93(void) = 0;
+ virtual void fn_94(void) = 0;
+ virtual void fn_95(void) = 0;
+ virtual void fn_96(void) = 0;
+ virtual void fn_97(void) = 0;
+ virtual void fn_98(void) = 0;
+ virtual void fn_99(void) = 0;
+ virtual void fn_100(void) = 0;
+ virtual void fn_101(void) = 0;
+ virtual void fn_102(void) = 0;
+ virtual void fn_103(void) = 0;
+ virtual void fn_104(void) const = 0;
+ virtual void fn_105(void) = 0;
+ virtual void fn_106(void) = 0;
+ virtual void fn_107(void) = 0;
+ virtual void fn_108(void) = 0;
+ virtual void fn_109(void) = 0;
+ virtual void fn_110(void) = 0;
+ virtual void fn_111(void) = 0;
+ virtual void fn_112(void) = 0;
+ virtual void fn_113(void) = 0;
+ virtual void fn_114(void) = 0;
+ virtual void fn_115(void) = 0;
+ virtual void fn_116(void) = 0;
+ virtual void fn_117(void) = 0;
+ virtual void fn_118(void) = 0;
+ virtual void fn_119(void) = 0;
+ virtual void fn_120(void) = 0;
+ virtual void fn_121(void) = 0;
+ virtual int GetPolyCount() = 0;
+ virtual void fn_122(void) = 0;
+ virtual void fn_123(void) = 0;
+ virtual void fn_124(void) = 0;
+ virtual int GetFrameID(bool bIncludeRecursiveCalls = true) = 0;
+ virtual void fn_125(void) = 0;
+ virtual float ScaleCoordX(float value) const = 0;
+ virtual float ScaleCoordY(float value) const = 0;
+ virtual void ScaleCoord(float& x, float& y) const = 0;
+ virtual void fn_126(void) = 0;;
+ virtual void fn_127(void) = 0;
+ virtual void fn_128(void) = 0;
+ virtual void fn_129(void) = 0;
+ virtual IRenderAuxGeom* GetIRenderAuxGeom() = 0;
+ virtual IRenderAuxGeom* GetOrCreateIRenderAuxGeom(const PVOID pCustomCamera = nullptr) = 0;
+ virtual void DeleteAuxGeom(IRenderAuxGeom* pRenderAuxGeom) = 0;
+ virtual void SubmitAuxGeom(IRenderAuxGeom* pRenderAuxGeom, bool merge = true) = 0;
+};
+
+/* generated with: "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\cl.exe" /Zp2 /c /d1reportSingleClassLayoutIActor C:\Users\segfault\Source\Repos\CRYENGINE\Code\CryEngine\CryAction\ActorSystem.cpp /I C:\Users\segfault\Source\Repos\CRYENGINE\Code\CryEngine\CryCommon /I "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um" /I "C:\Users\segfault\Source\Repos\CRYENGINE\Code\CryEngine\CryAction" */
+struct IActor
+{
+ virtual void fn_00(void) = 0;
+ virtual ~IActor(void) = 0;
+ virtual void fn_01(void) = 0;
+ virtual void fn_02(void) = 0;
+ virtual void fn_03(void) = 0;
+ virtual void fn_04(void) = 0;
+ virtual void fn_05(void) = 0;
+ virtual void fn_06(void) = 0;
+ virtual void fn_07(void) = 0;
+ virtual void fn_08(void) = 0;
+ virtual void fn_09(void) = 0;
+ virtual void fn_10(void) = 0;
+ virtual void fn_11(void) = 0;
+ virtual void fn_12(void) = 0;
+ virtual void fn_13(void) = 0;
+ virtual void fn_14(void) = 0;
+ virtual void fn_15(void) = 0;
+ virtual void fn_16(void) = 0;
+ virtual void fn_17(void) = 0;
+ virtual void fn_18(void) = 0;
+ virtual void fn_19(void) = 0;
+ virtual void fn_20(void) = 0;
+ virtual void fn_21(void) = 0;
+ virtual void fn_22(void) = 0;
+ virtual void fn_23(void) = 0;
+ virtual void fn_24(void) = 0;
+ virtual void fn_25(void) = 0;
+ virtual void fn_26(void) = 0;
+ virtual void fn_27(void) = 0;
+ virtual void fn_28(void) = 0;
+ virtual void fn_29(void) = 0;
+ virtual void fn_30(void) = 0;
+ virtual void fn_31(void) = 0;
+ virtual void fn_32(void) = 0;
+ virtual void fn_33(void) = 0;
+ virtual void IActor_SetChannelId(void) = 0;
+ virtual void fn_34(void) = 0;
+ virtual void fn_35(void) = 0;
+ virtual void fn_36(void) = 0;
+
+ virtual void SetHealth(float health) = 0;
+ virtual float GetHealth() const = 0;
+ virtual int GetHealthAsRoundedPercentage() const = 0;
+ virtual void SetMaxHealth(float maxHealth) = 0;
+ virtual float GetMaxHealth() const = 0;
+ virtual int GetArmor() const = 0;
+ virtual int GetMaxArmor() const = 0;
+ virtual int GetTeamId() const = 0;
+ virtual bool IsFallen() const = 0;
+ virtual bool IsDead() const = 0;
+ virtual int IsGod() = 0;
+ virtual void Fall(Vec3 hitPos = Vec3(0, 0, 0)) = 0;
+ virtual bool AllowLandingBob() = 0;
+ virtual void PlayAction(const char* action, const char* extension, bool looping = false) = 0;
+ virtual PVOID GetAnimationGraphState() = 0;
+ virtual void ResetAnimationState() = 0;
+ virtual void CreateScriptEvent(const char* event, float value, const char* str = NULL) = 0;
+ virtual bool BecomeAggressiveToAgent(int entityID) = 0;
+ virtual void SetFacialAlertnessLevel(int alertness) = 0;
+ virtual void RequestFacialExpression(const char* pExpressionName = NULL, float* sequenceLength = NULL) = 0;
+ virtual void PrecacheFacialExpression(const char* pExpressionName) = 0;
+ virtual int GetGrabbedEntityId() const = 0;
+ virtual void HideAllAttachments(bool isHiding) = 0;
+ virtual void SetIKPos(const char* pLimbName, const Vec3& goalPos, int priority) = 0;
+ virtual void SetViewInVehicle(PVOID viewRotation) = 0;
+ virtual void SetViewRotation(PVOID rotation) = 0;
+ virtual PVOID GetViewRotation() const = 0;
+ virtual bool IsFriendlyEntity(int entityId, bool bUsingAIIgnorePlayer = true) const = 0;
+ virtual Vec3 GetLocalEyePos() const = 0;
+ virtual void CameraShake(float angle, float shift, float duration, float frequency, Vec3 pos, int ID, const char* source = "") = 0;
+ virtual PVOID GetHolsteredItem() const = 0;
+ virtual void HolsterItem(bool holster, bool playSelect = true, float selectSpeedBias = 1.0f, bool hideLeftHandObject = true) = 0;
+ virtual PVOID GetCurrentItem(bool includeVehicle = false) const = 0;
+ virtual bool DropItem(int itemId, float impulseScale = 1.0f, bool selectNext = true, bool byDeath = false) = 0;
+ virtual PVOID GetInventory() const = 0;
+ virtual void NotifyCurrentItemChanged(PVOID newItem) = 0;
+ virtual PVOID GetMovementController() const = 0;
+ virtual IEntity* LinkToVehicle(int vehicleId) = 0;
+ virtual IEntity* GetLinkedEntity() const = 0;
+ virtual UINT8 GetSpectatorMode() const = 0;
+ virtual bool IsThirdPerson() const = 0;
+ virtual void ToggleThirdPerson() = 0;
+ virtual bool IsStillWaitingOnServerUseResponse() const { return false; }
+ virtual void SetStillWaitingOnServerUseResponse(bool waiting) { UNREFERENCED_PARAMETER(waiting); }
+ virtual void SetFlyMode(UINT8 flyMode) { UNREFERENCED_PARAMETER(flyMode); };
+ virtual UINT8 GetFlyMode() const { return 0; };
+ virtual void Release() = 0;
+ virtual bool IsPlayer() const = 0;
+ virtual bool IsClient() const = 0;
+ virtual bool IsMigrating() const = 0;
+ virtual void SetMigrating(bool isMigrating) = 0;
+ virtual void InitLocalPlayer() = 0;
+ virtual const char* GetActorClassName() const = 0;
+ virtual PVOID GetActorClass() const = 0;
+ virtual const char* GetEntityClassName() const = 0;
+ virtual void SerializeLevelToLevel(PVOID ser) = 0;
+ virtual void ProcessEvent(const PVOID event) = 0;
+ virtual PVOID GetAnimatedCharacter() = 0;
+ virtual const PVOID GetAnimatedCharacter() const = 0;
+ virtual void PlayExactPositioningAnimation(const char* sAnimationName, bool bSignal, const Vec3& vPosition, const Vec3& vDirection, float startWidth, float startArcAngle, float directionTolerance) = 0;
+ virtual void CancelExactPositioningAnimation() = 0;
+ virtual void PlayAnimation(const char* sAnimationName, bool bSignal) = 0;
+ virtual bool Respawn() { return false; }
+ virtual void ResetToSpawnLocation() {}
+ virtual bool CanBreakGlass() const { return false; }
+ virtual bool MustBreakGlass() const { return false; }
+ virtual void EnableTimeDemo(bool bTimeDemo) = 0;
+ void SetChannelId(UINT16 id) { UNREFERENCED_PARAMETER(id); }
+ virtual void SwitchDemoModeSpectator(bool activate) = 0;
+ virtual void SetCustomHead(const char* customHead) { UNREFERENCED_PARAMETER(customHead); };
+ virtual PVOID GetLinkedVehicle() const = 0;
+ virtual bool GetValidPositionNearby(const Vec3& proposedPosition, Vec3& adjustedPosition) const = 0;
+ virtual void SetExpectedPhysicsPos(const Vec3& expectedPosition) = 0;
+ virtual void OnAIProxyEnabled(bool enabled) = 0;
+ virtual void OnReturnedToPool() = 0;
+ virtual void OnPreparedFromPool() = 0;
+ virtual void OnShiftWorld() {};
+ virtual void MountedGunControllerEnabled(bool val) { UNREFERENCED_PARAMETER(val); };
+ virtual bool MountedGunControllerEnabled() const { return false; }
+ virtual bool ShouldMuteWeaponSoundStimulus() const = 0;
+ virtual int GetPhysicalSkipEntities(PVOID pSkipList, const int maxSkipSize) const
+ {
+ UNREFERENCED_PARAMETER(pSkipList);
+ UNREFERENCED_PARAMETER(maxSkipSize);
+ return 0;
+ }
+ virtual void OnReused(IEntity* pEntity, PVOID params) = 0;
+ virtual bool IsInteracting() const = 0;
+};
+
+struct IActorIterator
+{
+ virtual ~IActorIterator() {}
+ virtual size_t Count() = 0;
+ virtual IActor* Next() = 0;
+ virtual void AddRef() = 0;
+ virtual void Release() = 0;
+};
+typedef _smart_ptr<IActorIterator> IActorIteratorPtr;
+
+typedef std::map<int, IActor*> TActorMap;
+
+struct IActorSystem
+{
+ virtual ~IActorSystem() {}
+ virtual void Reset() = 0;
+ virtual void Reload() = 0;
+ virtual IActor* GetActor(int entityId) = 0;
+ virtual IActor* GetActorByChannelId(UINT16 channelId) = 0;
+ virtual IActor* fn_00(void) = 0;
+ virtual int GetActorCount() const = 0;
+ virtual IActorIteratorPtr CreateActorIterator() = 0;
+ virtual void SetDemoPlaybackMappedOriginalServerPlayer(int id) = 0;
+ virtual int GetDemoPlaybackMappedOriginalServerPlayer() const = 0;
+ virtual void SwitchDemoSpectator(int id = 0) = 0;
+ virtual IActor* GetCurrentDemoSpectator() = 0;
+ virtual IActor* GetOriginalDemoSpectator() = 0;
+ virtual void AddActor(int entityId, IActor* pActor) = 0;
+ virtual void RemoveActor(int entityId) = 0;
+ virtual void Scan(const char* folderName) = 0;
+ virtual bool fn_01(void) = 0;
+ virtual const PVOID GetActorParams(const char* actorClass) const = 0;
+ virtual bool IsActorClass(PVOID pClass) const = 0;
+};
+
+struct IGameFramework
+{
+ virtual void fn_00(void) = 0;
+ virtual void fn_01(void) = 0;
+ virtual void fn_02(void) = 0;
+ virtual void fn_03(void) = 0;
+ virtual void fn_04(void) = 0;
+ virtual void fn_05(void) = 0;
+
+ virtual ~IGameFramework() {}
+ virtual void fn_06(void) = 0;
+ virtual void fn_07(void) = 0;
+ virtual void fn_08(void) = 0;
+ virtual void fn_09(void) = 0;
+ virtual void fn_10(void) = 0;
+ virtual void fn_11(void) = 0;
+ virtual void fn_12(void) = 0;
+ virtual void fn_13(void) = 0;
+ virtual void fn_14(void) = 0;
+ virtual void fn_15(void) = 0;
+ virtual void fn_16(void) = 0;
+ virtual bool IsGamePaused() = 0;
+ virtual bool IsGameStarted() = 0;
+ virtual ISystem* GetISystem() = 0;
+ virtual void fn_17(void) = 0;
+ virtual void fn_18(void) = 0;
+ virtual void fn_19(void) = 0;
+ virtual void fn_20(void) = 0;
+ virtual void fn_21(void) = 0;
+ virtual IActorSystem* GetIActorSystem(void) = 0;
+ virtual void fn_23(void) = 0;
+ virtual void fn_24(void) = 0;
+ virtual void fn_25(void) = 0;
+ virtual void fn_26(void) = 0;
+ virtual void fn_27(void) = 0;
+ virtual void fn_28(void) = 0;
+ virtual void fn_29(void) = 0;
+ virtual void fn_30(void) = 0;
+ virtual void fn_31(void) = 0;
+ virtual void fn_32(void) = 0;
+ virtual void fn_33(void) = 0;
+ virtual void fn_34(void) = 0;
+ virtual void fn_35(void) = 0;
+ virtual void fn_36(void) = 0;
+ virtual void fn_37(void) = 0;
+ virtual void fn_38(void) = 0;
+ virtual void fn_39(void) = 0;
+ virtual void fn_40(void) = 0;
+ virtual void fn_41(void) = 0;
+ virtual void fn_42(void) = 0;
+ virtual void fn_43(void) = 0;
+ virtual void fn_44(void) = 0;
+ virtual void fn_45(void) = 0;
+ virtual void fn_46(void) = 0;
+ virtual void fn_47(void) = 0;
+ virtual void fn_48(void) = 0;
+ virtual void fn_49(void) = 0;
+ virtual void fn_50(void) = 0;
+ virtual void fn_51(void) = 0;
+ virtual void fn_52(void) = 0;
+ virtual void fn_53(void) = 0;
+ virtual void fn_54(void) = 0;
+ virtual void fn_55(void) = 0;
+ virtual void fn_56(void) = 0;
+ virtual void fn_57(void) = 0;
+ virtual void fn_58(void) = 0;
+ virtual void fn_59(void) = 0;
+ virtual void fn_60(void) = 0;
+ virtual void fn_61(void) = 0;
+ virtual void fn_62(void) = 0;
+ virtual void fn_62_1(void) = 0;
+ virtual void fn_63(void) = 0;
+ virtual IActor* GetClientActor() const = 0;
+ virtual int GetClientActorId() const = 0;
+ virtual IEntity* GetClientEntity() const = 0;
+ virtual int GetClientEntityId() const = 0;
+ virtual PVOID GetClientChannel() const = 0;
+ virtual void fn_64(void) = 0;
+ virtual void fn_65(void) = 0;
+ virtual void fn_66(void) = 0;
+ virtual void fn_67(void) = 0;
+ virtual void fn_68(void) = 0;
+ virtual void fn_69(void) = 0;
+ virtual void fn_70(void) = 0;
+ virtual void fn_71(void) = 0;
+ virtual void fn_72(void) = 0;
+ virtual void fn_73(void) = 0;
+ virtual void fn_74(void) = 0;
+ virtual void fn_75(void) = 0;
+ virtual void fn_76(void) = 0;
+ virtual void fn_77(void) = 0;
+ virtual void fn_78(void) = 0;
+ virtual void fn_79(void) = 0;
+ virtual void fn_80(void) = 0;
+ virtual void fn_81(void) = 0;
+ virtual UINT8 IsEditing() = 0;
+ virtual UINT8 IsInLevelLoad() = 0;
+ virtual UINT8 IsLoadingSaveGame() = 0;
+ virtual UINT8 IsInTimeDemo() = 0;
+ virtual UINT8 IsTimeDemoRecording() = 0;
+ virtual void fn_82(void) = 0;
+ virtual void fn_83(void) = 0;
+ virtual UINT8 CanSave() = 0;
+ virtual UINT8 CanLoad() = 0;
+ virtual void fn_84(void) = 0;
+ virtual UINT8 CanCheat() = 0;
+ virtual const char* GetLevelName() = 0;
+ virtual void GetAbsLevelPath(char* pPathBuffer, UINT32 pathBufferSize) = 0;
+ virtual PVOID GetIPersistantDebug() = 0;
+ virtual void fn_85(void) = 0;
+ virtual void fn_86(void) = 0;
+ virtual void fn_87(void) = 0;
+ virtual void fn_88(void) = 0;
+ virtual void fn_89(void) = 0;
+ virtual void fn_90(void) = 0;
+ virtual void fn_91(void) = 0;
+ virtual void fn_92(void) = 0;
+ virtual void fn_93(void) = 0;
+ virtual const char* GetGameGUID() = 0;
+};
+
+struct SSystemGlobalEnvironment {
+ UINT64 ukn_00;
+ UINT64 ukn_01;
+ UINT64 ukn_02;
+ UINT64 ukn_03;
+ UINT64 ukn_04;
+ UINT64 ukn_05;
+ UINT64 ukn_06;
+ UINT64 ukn_07;
+ UINT64 ukn_08;
+ UINT64 ukn_09;
+ UINT64 ukn_10;
+ UINT64 ukn_11;
+ UINT64 ukn_12;
+ UINT64 ukn_13;
+ UINT64 ukn_14;
+ UINT64 ukn_15;
+ UINT64 ukn_16;
+ UINT64 ukn_17;
+ IGameFramework* pGameFramework;
+ UINT64 ukn_18;
+ IEntitySystem* pEntitySystem;
+ UINT64 ukn_19;
+ UINT64 ukn_20;
+ ISystem* pSystem;
+ UINT64 ukn_21;
+ UINT64 ukn_22;
+ UINT64 ukn_23;
+ UINT64 ukn_24;
+ UINT64 ukn_25;
+ UINT64 ukn_26;
+ IRenderer* pRenderer;
+ IRenderAuxGeom* pAuxGeomRenderer; /* NullAuxGeomRenderer */
+ UINT64 ukn_27;
+ UINT64 ukn_28;
+ UINT64 ukn_29;
+ UINT64 ukn_30;
+ UINT64 ukn_31;
+ UINT64 ukn_32;
+ UINT64 ukn_33;
+ UINT64 ukn_34;
+ UINT64 ukn_35;
+ UINT64 ukn_36;
+ UINT64 ukn_37;
+ UINT64 ukn_38;
+ UINT64 ukn_39;
+ UINT64 ukn_40;
+ UINT64 ukn_41;
+ UINT64 ukn_42;
+ UINT64 ukn_43;
+ UINT64 ukn_44;
+ UINT64 ukn_45;
+ UINT64 ukn_46;
+ UINT32 mMainThreadId;
+ UINT32 nMainFrameID;
+ LPCSTR szCmdLine;
+ CHAR szDebugStatus[128];
+ BOOL bServer;
+ BOOL bMultiplayer;
+ BOOL bHostMigrating;
+};
+
+struct ISystem
+{
+ virtual ~ISystem() {}
+ virtual void fn_00(void) const = 0;
+ virtual SSystemGlobalEnvironment* GetGlobalEnvironment() = 0;
+ virtual void fn_01(void) const = 0;
+ virtual const char* GetRootFolder() const = 0;
+ virtual void fn_02(void) = 0;
+ virtual void fn_03(void) = 0;
+ virtual void fn_04(void) = 0;
+ virtual void fn_05(void) = 0;
+ virtual void fn_06(void) = 0;
+ virtual void fn_07(void) = 0;
+ virtual void fn_08(void) = 0;
+ virtual void fn_09(void) = 0;
+ virtual void fn_10(void) = 0;
+ virtual void fn_11(void) = 0;
+ virtual UINT32 GetUsedMemory() = 0;
+ virtual const char* GetUserName() = 0;
+ virtual UINT32 GetCPUFlags() = 0;
+ virtual int GetLogicalCPUCount() = 0;
+ virtual void fn_12(void) = 0;
+ virtual void Quit() = 0;
+ virtual void Relaunch(bool bRelaunch) = 0;
+ virtual UINT32 IsQuitting() const = 0;
+ virtual void fn_13(void) = 0;
+ virtual void fn_14(void) = 0;
+ virtual void fn_15(void) = 0;
+ virtual UINT32 IsRelaunch() const = 0;
+ virtual void fn_16(void) = 0;
+ virtual void fn_17(void) = 0;
+ virtual void fn_18(void) = 0;
+ virtual void fn_19(void) = 0;
+ virtual void fn_20(void) = 0;
+ virtual void fn_21(void) = 0;
+ virtual void fn_22(void) = 0;
+ virtual void fn_23(void) = 0;
+ virtual void fn_24(void) = 0;
+ virtual void fn_25(void) = 0;
+ virtual void fn_26(void) = 0;
+ virtual void fn_27(void) = 0;
+ virtual void fn_28(void) = 0;
+ virtual void fn_29(void) = 0;
+ virtual void fn_30(void) = 0;
+ virtual void fn_31(void) = 0;
+ virtual void fn_32(void) = 0;
+ virtual void fn_33(void) = 0;
+ virtual void fn_34(void) = 0;
+ virtual void fn_35(void) = 0;
+ virtual void fn_36(void) = 0;
+ virtual void fn_37(void) = 0;
+ virtual void fn_38(void) = 0;
+ virtual void fn_39(void) = 0;
+ virtual void fn_40(void) = 0;
+ virtual void fn_41(void) = 0;
+ virtual void fn_42(void) = 0;
+ virtual void fn_43(void) = 0;
+ virtual void fn_44(void) = 0;
+ virtual void fn_45(void) = 0;
+ virtual void fn_46(void) = 0;
+ virtual void fn_47(void) = 0;
+ virtual void fn_48(void) = 0;
+ virtual IEntitySystem* GetIEntitySystem() = 0;
+ virtual void fn_50(void) = 0;
+ virtual void fn_51(void) = 0;
+ virtual void fn_52(void) = 0;
+ virtual void fn_53(void) = 0;
+ virtual void fn_54(void) = 0;
+ virtual void fn_55(void) = 0;
+ virtual void fn_56(void) = 0;
+ virtual void fn_57(void) = 0;
+ virtual void fn_58(void) = 0;
+ virtual void fn_59(void) = 0;
+ virtual void fn_60(void) = 0;
+ virtual void fn_61(void) = 0;
+ virtual void fn_62(void) = 0;
+ virtual void fn_63(void) = 0;
+ virtual void fn_64(void) = 0;
+ virtual void fn_65(void) = 0;
+ virtual PVOID GetHWND() = 0;
+ virtual PVOID GetActiveHWND() = 0;
+ virtual void fn_66(void) = 0;
+ virtual IRenderer* GetIRenderer() = 0;
+};
+
+static inline bool HProjectToScreen(IRenderer* pIRenderer, float sx, float sy, float sz, float* ox, float* oy, float* oz)
+{
+ return pIRenderer->ProjectToScreen(sx, sy, sz, ox, oy, oz);
+}
+
+static inline bool WorldToScreen(SSystemGlobalEnvironment* globalEnv, Vec3 vEntPos, Vec3 &vOut)
+{
+ IRenderer* Renderer = globalEnv->pRenderer;
+ HProjectToScreen(Renderer, vEntPos.x, vEntPos.y, vEntPos.z,
+ &vOut.x, &vOut.y, &vOut.z);
+
+ vOut.x *= (Renderer->GetWidth() / 100.0f);
+ vOut.y *= (Renderer->GetHeight() / 100.0f);
+ vOut.z *= 1.0f;
+
+ return ((vOut.z < 1.0f) && (vOut.x > 0) && (vOut.x < (float)Renderer->GetWidth()) && (vOut.y > 0) && (vOut.y < (float)Renderer->GetHeight()));
+}
+
+
+struct HuntCtx {
+ IEntitySystem ** ppEntSys;
+ SSystemGlobalEnvironment ** ppGlobalEnv;
+ IGameFramework ** ppCCryAction;
+}; \ No newline at end of file
diff --git a/Hunt Showdown/DLL/dllmain.cpp b/Hunt Showdown/DLL/dllmain.cpp
new file mode 100644
index 0000000..00e30ca
--- /dev/null
+++ b/Hunt Showdown/DLL/dllmain.cpp
@@ -0,0 +1,222 @@
+#include "stdafx.h"
+#include "HuntClasses.h"
+
+#include <vector>
+#include <string>
+#include <sstream>
+#include <array>
+
+#include "GdiRadar.h"
+#include <Windows.h>
+
+EXTERN_C BOOL WINAPI _CRT_INIT(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved);
+
+
+static gdi_radar_context * ctx = NULL;
+static UINT64 pEntSys = 0x0;
+static IEntitySystem * iEnt = NULL;
+
+
+#define SHOW_WARNING(format, ...) \
+ do { char errbuf[128]; \
+ snprintf(errbuf, sizeof errbuf, "WARNING: " # format, __VA_ARGS__); \
+ MessageBoxA(NULL, errbuf, "Hunted WARNING", MB_OK | MB_ICONINFORMATION); \
+ } while (0);
+
+static bool ConfigureAndInitGDI(void)
+{
+ SetWindowTextA(GetConsoleWindow(), "Hunted");
+
+ gdi_radar_config cfg = {};
+ cfg.className = L"HR";
+ cfg.windowName = L"HRWND";
+ cfg.minimumUpdateTime = 0.20f;
+ cfg.maximumRedrawFails = 5;
+ cfg.reservedEntities = 16;
+ cfg.drawAngles = true;
+
+ printf("Configure.\n");
+ ctx = gdi_radar_configure(&cfg, gdi_radar_get_fake_hinstance());
+ if (!ctx)
+ {
+ printf("Configure failed.\n");
+ return false;
+ }
+
+ gdi_radar_set_game_dimensions(ctx, 1020.0f, 1020.0f);
+
+ if (!gdi_radar_init(ctx))
+ {
+ printf("Init failed.\n");
+ return false;
+ }
+
+ return true;
+}
+
+static bool InitAndCheckPtr(struct HuntCtx * HuntCtx)
+{
+ pEntSys = *(UINT64*)(HuntCtx->ppEntSys);
+ iEnt = *HuntCtx->ppEntSys;
+
+ if (iEnt->GetNumEntities() > 65535) {
+ SHOW_WARNING("Invalid number of Entities : VALUE[%u] > 65535\n",
+ iEnt->GetNumEntities());
+ return false;
+ }
+ if ((PVOID)(*(UINT64*)(pEntSys + PENTITYSYSTEM_ISYSTEM_OFFSET)) != iEnt->GetSystem()) {
+ SHOW_WARNING("ISystem interface instance not equal : MEMBER[%p] != GETSYSTEM[%p]\n",
+ (PVOID)(*(UINT64*)(pEntSys + PENTITYSYSTEM_ISYSTEM_OFFSET)), iEnt->GetSystem());
+ return false;
+ }
+ if (iEnt->GetSystem()->GetLogicalCPUCount() < 1 ||
+ iEnt->GetSystem()->GetLogicalCPUCount() > 32)
+ {
+ SHOW_WARNING("GetLogicalCPUCount returned an invalid value: %u",
+ iEnt->GetSystem()->GetLogicalCPUCount());
+ return false;
+ }
+ if (iEnt->GetSystem()->IsQuitting() ||
+ iEnt->GetSystem()->IsRelaunch())
+ {
+ SHOW_WARNING("IsQuitting/IsRelaunch returned invalid values: %u/%u",
+ iEnt->GetSystem()->IsQuitting(), iEnt->GetSystem()->IsRelaunch());
+ return false;
+ }
+ if (iEnt->GetSystem()->GetHWND() > (PVOID)((ULONG_PTR)0xFFFFFFFF))
+ {
+ SHOW_WARNING("GetHWND returned an invalid window handle: %p",
+ iEnt->GetSystem()->GetHWND());
+ return false;
+ }
+ if ((PVOID)pEntSys != iEnt->GetSystem()->GetIEntitySystem()) {
+ SHOW_WARNING("IEntitySystem interface instance not equal: GLOBAL[%p] != GETENTITYSYSTEM[%p]\n",
+ (PVOID)pEntSys, iEnt->GetSystem()->GetIEntitySystem());
+ return false;
+ }
+ if ((PVOID)pEntSys != iEnt->GetSystem()->GetGlobalEnvironment()->pEntitySystem) {
+ SHOW_WARNING("IEntitySystem interface instance not equal: GLOBAL[%p] != pEntitySystem[%p]\n",
+ (PVOID)pEntSys, iEnt->GetSystem()->GetGlobalEnvironment()->pEntitySystem);
+ return false;
+ }
+ if (*HuntCtx->ppGlobalEnv != iEnt->GetSystem()->GetGlobalEnvironment()) {
+ SHOW_WARNING("GlobalEnvironment signature not equals GetGlobalEnvironment() instance: ppGlobalEnv[%p] != GetGlobalEnvironment[%p]\n",
+ (PVOID)pEntSys, iEnt->GetSystem()->GetGlobalEnvironment()->pEntitySystem);
+ return false;
+ }
+ if ((*HuntCtx->ppCCryAction)->GetIActorSystem() != iEnt->GetSystem()->GetGlobalEnvironment()->pGameFramework->GetIActorSystem()) {
+ SHOW_WARNING("CCryAction->GetIActorSystem() signature not equals GameFramework->GetIActorSystem() instance: ppCCryAction[%p] != pGameFramework[%p]\n",
+ (*HuntCtx->ppCCryAction)->GetIActorSystem(), iEnt->GetSystem()->GetGlobalEnvironment()->pGameFramework->GetIActorSystem());
+ return false;
+ }
+ if (iEnt->GetSystem() != iEnt->GetSystem()->GetGlobalEnvironment()->pGameFramework->GetISystem()) {
+ SHOW_WARNING("ISystem interface instance not equal: IEntitySystem[%p] != pGameFramework[%p]\n",
+ iEnt->GetSystem(), iEnt->GetSystem()->GetGlobalEnvironment()->pGameFramework->GetISystem());
+ return false;
+ }
+ if (iEnt->GetSystem() != iEnt->GetSystem()->GetGlobalEnvironment()->pSystem) {
+ SHOW_WARNING("ISystem interface instance not equal: IEntitySystem[%p] != pSystem[%p]\n",
+ iEnt->GetSystem(), iEnt->GetSystem()->GetGlobalEnvironment()->pSystem);
+ return false;
+ }
+ if (iEnt->GetSystem()->GetGlobalEnvironment()->pRenderer != iEnt->GetSystem()->GetIRenderer()) {
+ SHOW_WARNING("ISystem interface instance not equal: IEntitySystem[%p] != pSystem[%p]\n",
+ iEnt->GetSystem(), iEnt->GetSystem()->GetGlobalEnvironment()->pSystem);
+ return false;
+ }
+
+ return true;
+}
+
+void APIENTRY LibEntry(struct HuntCtx * HuntCtx)
+{
+ static bool firstEntry = true;
+
+ if (!HuntCtx || !HuntCtx->ppEntSys || !HuntCtx->ppGlobalEnv || !HuntCtx->ppCCryAction)
+ return;
+
+ if (firstEntry) {
+ firstEntry = false;
+
+ HINSTANCE addr = GetModuleHandle(NULL);
+ _CRT_INIT(addr, DLL_PROCESS_ATTACH, NULL);
+
+ if (!InitAndCheckPtr(HuntCtx))
+ {
+ return;
+ }
+
+ AllocConsole();
+ FILE * conout = NULL;
+ freopen_s(&conout, "CONOUT$", "w", stdout);
+
+ printf("Welcome.\n");
+ printf("[thread id: %d][used memory: %u][cpu flags: %u][user name: %s][cpu count: %d]\n",
+ GetCurrentThreadId(),
+ iEnt->GetSystem()->GetUsedMemory(),
+ iEnt->GetSystem()->GetCPUFlags(),
+ iEnt->GetSystem()->GetUserName(),
+ iEnt->GetSystem()->GetLogicalCPUCount());
+
+ if (!ConfigureAndInitGDI()) {
+ return;
+ }
+ }
+
+ if (!iEnt || iEnt->GetSystem()->GetGlobalEnvironment()->pGameFramework->IsInLevelLoad()) {
+ return;
+ }
+ if (!gdi_radar_check_if_redraw_necessary(ctx)) {
+ return;
+ }
+
+ gdi_radar_clear_entities(ctx);
+
+ SIZE_T i = 1;
+ IEntityItPtr pEntIt = iEnt->GetEntityIterator();
+ while (IEntity* pEnt = pEntIt->Next()) {
+ if (!pEnt->IsInitialized() || pEnt->IsGarbage()) {
+ continue;
+ }
+ const char *name = pEnt->GetName();
+ if (strlen(name) < 4) {
+ continue;
+ }
+ if (name[0] != 'H' || name[1] != 'u' || name[2] != 'n' || name[3] != 't') {
+ continue;
+ }
+
+ enum entity_color entCol = entity_color::EC_RED;
+ if (pEnt->GetFlags() & ENTITY_FLAG_LOCAL_PLAYER) {
+ entCol = entity_color::EC_BLUE;
+ }
+
+ Vec3 entPos = pEnt->GetPos();
+ entPos.x -= 520.0f;
+ entPos.y -= 520.0f;
+ entPos.y = 1020.0f - entPos.y;
+ float entAngle = pEnt->GetWorldAngles().z;
+ entAngle *= -1.0f; /* inverse */
+ entAngle -= 1.5707963267948966192313216916398f; /* pi/2 == 90deg */
+ struct entity radar_entity{
+ (int)entPos.x, (int)entPos.y, entAngle,
+ (entCol == entity_color::EC_BLUE ? 60 : 0),
+ entCol, "test"
+ };
+ gdi_radar_add_entity(ctx, &radar_entity);
+
+ i++;
+ }
+
+ static UINT64 redraw_retry = 0;
+ if (!gdi_radar_redraw_if_necessary(ctx) &&
+ ((++redraw_retry) % 250 == 0))
+ {
+ printf("Reint (redraw failed).\n");
+ gdi_radar_close_and_cleanup(&ctx);
+ ConfigureAndInitGDI();
+ return;
+ }
+
+ gdi_radar_process_window_events_nonblocking(ctx);
+} \ No newline at end of file
diff --git a/Hunt Showdown/DLL/stdafx.cpp b/Hunt Showdown/DLL/stdafx.cpp
new file mode 100644
index 0000000..fd4f341
--- /dev/null
+++ b/Hunt Showdown/DLL/stdafx.cpp
@@ -0,0 +1 @@
+#include "stdafx.h"
diff --git a/Hunt Showdown/DLL/stdafx.h b/Hunt Showdown/DLL/stdafx.h
new file mode 100644
index 0000000..f380517
--- /dev/null
+++ b/Hunt Showdown/DLL/stdafx.h
@@ -0,0 +1,16 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+#include "targetver.h"
+
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+// Windows Header Files
+#include <windows.h>
+
+
+
+// reference additional headers your program requires here
diff --git a/Hunt Showdown/DLL/targetver.h b/Hunt Showdown/DLL/targetver.h
new file mode 100644
index 0000000..87c0086
--- /dev/null
+++ b/Hunt Showdown/DLL/targetver.h
@@ -0,0 +1,8 @@
+#pragma once
+
+// Including SDKDDKVer.h defines the highest available Windows platform.
+
+// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
+// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
+
+#include <SDKDDKVer.h>
diff --git a/cheats.sln b/cheats.sln
index 1481674..ca26acc 100644
--- a/cheats.sln
+++ b/cheats.sln
@@ -5,6 +5,10 @@ VisualStudioVersion = 15.0.28307.1062
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CSGO", "csgo_radar_kmem\CSGO.vcxproj", "{65C081C2-3A90-470C-BF06-AFF2EEB00C25}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DLL", "Hunt Showdown\DLL\DLL.vcxproj", "{5BC7339B-8115-493D-925B-9891DBC10EA9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CMD", "Hunt Showdown\CMD\CMD.vcxproj", "{DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@@ -21,6 +25,22 @@ Global
{65C081C2-3A90-470C-BF06-AFF2EEB00C25}.Release|x64.Build.0 = Release|x64
{65C081C2-3A90-470C-BF06-AFF2EEB00C25}.Release|x86.ActiveCfg = Release|Win32
{65C081C2-3A90-470C-BF06-AFF2EEB00C25}.Release|x86.Build.0 = Release|Win32
+ {5BC7339B-8115-493D-925B-9891DBC10EA9}.Debug|x64.ActiveCfg = Debug|x64
+ {5BC7339B-8115-493D-925B-9891DBC10EA9}.Debug|x64.Build.0 = Debug|x64
+ {5BC7339B-8115-493D-925B-9891DBC10EA9}.Debug|x86.ActiveCfg = Debug|Win32
+ {5BC7339B-8115-493D-925B-9891DBC10EA9}.Debug|x86.Build.0 = Debug|Win32
+ {5BC7339B-8115-493D-925B-9891DBC10EA9}.Release|x64.ActiveCfg = Release|x64
+ {5BC7339B-8115-493D-925B-9891DBC10EA9}.Release|x64.Build.0 = Release|x64
+ {5BC7339B-8115-493D-925B-9891DBC10EA9}.Release|x86.ActiveCfg = Release|Win32
+ {5BC7339B-8115-493D-925B-9891DBC10EA9}.Release|x86.Build.0 = Release|Win32
+ {DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}.Debug|x64.ActiveCfg = Debug|x64
+ {DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}.Debug|x64.Build.0 = Debug|x64
+ {DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}.Debug|x86.ActiveCfg = Debug|Win32
+ {DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}.Debug|x86.Build.0 = Debug|Win32
+ {DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}.Release|x64.ActiveCfg = Release|x64
+ {DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}.Release|x64.Build.0 = Release|x64
+ {DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}.Release|x86.ActiveCfg = Release|Win32
+ {DB513F0F-ECDB-4856-8AB1-B2CBCC745E5A}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE