#define _WINSOCK_DEPRECATED_NO_WARNINGS // ratio + don't care
#define _CRT_SECURE_NO_WARNINGS // ratio + don't care
#include <iostream>
#include <Windows.h>
#include "cheat.h"
#include <vector>
#include <tuple>
std::vector<std::tuple<uint32_t, std::string, std::string>> g_aImports =
{
{ 0xaa5a0130, "?", "?" },
{ 0xaa5a0160, "?", "?" },
{ 0xaa5a0170, "?", "?" },
{ 0xaa5a1578, "?", "?" },
{ 0xaa5a2000, "kernel32.dll", "GetCurrentProcessId" },
{ 0xaa5a2008, "kernel32.dll", "GetCurrentThreadId" },
{ 0xaa5a2010, "kernel32.dll", "GetSystemTimeAsFileTime" },
{ 0xaa5a2018, "kernel32.dll", "InitializeSListHead" },
{ 0xaa5a2020, "kernel32.dll", "QueryPerformanceCounter" },
{ 0xaa5a2030, "user32.dll", "MessageBoxW" },
{ 0xaa5a2040, "vcruntime140.dll", "__std_type_info_destroy_list" },
{ 0xaa5a2048, "vcruntime140.dll", "__C_specific_handler" },
{ 0xaa5a2050, "vcruntime140.dll", "memcpy" },
{ 0xaa5a2060, "ucrtbase.dll", "_cexit" },
{ 0xaa5a2068, "ucrtbase.dll", "_initterm" },
{ 0xaa5a2070, "ucrtbase.dll", "_initialize_onexit_table" },
{ 0xaa5a2078, "ucrtbase.dll", "_initialize_narrow_environment" },
{ 0xaa5a2080, "ucrtbase.dll", "_configure_narrow_argv" },
{ 0xaa5a2088, "ucrtbase.dll", "_seh_filter_dll" },
{ 0xaa5a2090, "ucrtbase.dll", "_initterm_e" },
{ 0xaa5a2098, "ucrtbase.dll", "_execute_onexit_table" },
{ 0xaa5a20a8, "ucrtbase.dll", "__stdio_common_vswprintf" },
{ 0xaa5a20b8, "?", "?" },
{ 0xaa5a20c0, "?", "?" },
{ 0xaa5a20c8, "?", "?" },
{ 0xaa5a20d0, "?", "?" },
{ 0xaa5a20d8, "?", "?" },
{ 0xaa5a20e8, "?", "?" },
{ 0xaa5a2148, "?", "?" },
{ 0xaa5a21e8, "?", "?" },
{ 0xaa5a21f8, "?", "?" },
{ 0xaa5a2278, "?", "?" },
{ 0xaa5a2290, "?", "?" },
{ 0xaa5a2298, "?", "?" },
{ 0xaa5a2320, "?", "?" },
{ 0xaa5a2338, "?", "?" },
{ 0xaa5a2340, "?", "?" },
{ 0xaa5a2348, "?", "?" },
{ 0xaa5a2350, "?", "?" },
{ 0xaa5a2358, "?", "?" },
{ 0xaa5a3060, "?", "?" },
};
int main() {
// я хз почему но у меня получаеться п росто так получить 0x6000 size
MEMORY_BASIC_INFORMATION mem;
uintptr_t base = 0x180000000;
size_t expected_size = 0x6000;
uintptr_t scanned = 0;
while (scanned < expected_size)
{
if (!VirtualQuery(reinterpret_cast<void*>(base + scanned), &mem, sizeof(mem)))
{
printf("[-] failed to query memory at 0x%llx\n", base + scanned);
TerminateProcess(reinterpret_cast<HANDLE>(-1), 0);
}
scanned += mem.RegionSize;
}
printf("[+] memory region is ok, total scanned = 0x%llx\n", scanned);
void* hack_address = VirtualAlloc(
nullptr,
sizeof(cituxs),
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE
);
if (!hack_address)
{
printf("[-] VirtualAlloc failed\n");
return 0;
}
memcpy(hack_address, cituxs, sizeof(cituxs));
printf(" inited!\n");
// импорты
printf(" resolving imports...\n");
for (const auto& CurrentImport : g_aImports)
{
HMODULE hModule = LoadLibraryA(std::get< 1 >(CurrentImport).c_str());
if (!hModule)
continue;
uintptr_t pFunction = (uintptr_t)GetProcAddress(hModule, std::get< 2 >(CurrentImport).c_str());
if (!pFunction)
continue;
*reinterpret_cast<uintptr_t*>(std::get< 0 >(CurrentImport)) = pFunction;
}
printf(" resolved!\n");
printf(" calling entrypoiny []...\n");
using DllEntry_t = BOOL(__stdcall*)(void*, DWORD, void*);
uintptr_t basee = (uintptr_t)hack_address;
reinterpret_cast<DllEntry_t>(basee + 0x16D4)(
(void*)basee,
DLL_PROCESS_ATTACH,
nullptr
);
printf(" called!\n");
}
bool __stdcall DllMain(HANDLE hinstDLL, uintptr_t fdwReason, void* lpReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
AllocConsole();
SetConsoleTitleA("clarity.tk [ft.glowesp7]");
freopen("CONOUT$", "w", stdout);
CreateThread(0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(main), 0, 0, 0);
}
return true;
}