DWORD WINAPI InitThread(LPVOID lparam) { HookSetCursor(); //OffsetMngr.AddOffset("DXRenderer", "48 8B 0D ? ? ? ? 48 85 C9 74 0E E8 ? ? ? ? 48 8B A8 ? ? ? ? EB 19",0x141FDF650); DxRenderer* pDxRenderer = DxRenderer::GetInstance(); while (!IsValidPtr(pDxRenderer)) { DxRenderer* pDxRenderer = DxRenderer::GetInstance(); } Screen* pScreen = pDxRenderer->m_pScreen; while (!IsValidPtr(pScreen)) { Screen* pScreen = pDxRenderer->m_pScreen; } IDXGISwapChain* pSwap = pScreen->m_pSwapChain; while (!IsValidPtr(pSwap)) { pSwap = pScreen->m_pSwapChain; } PresentHook = new CVMTHookManager64((DWORD64**)pSwap); oPresent = (tPresent)PresentHook->dwGetMethodAddress(8); PresentHook->dwHookMethod((DWORD64)hkPresent, 8); Helpers::OffsetManager mngr; mngr.AddOffset("DXRenderer", "48 8B 0D ? ? ? ? 48 8B 01 FF 50 08 85 C0 75 2D 48 8B 05 ? ? ? ? 48 85 C0 75 1A", 3); mngr.AddOffset("GameContext", "48 8B 0D ? ? ? ? E8 ? ? ? ? 48 8B D8 48 89 44 24 ? 4C 8D B6 ? ? ? ? 49 8B 3E 48 8B AE ? ? ? ?", 3); mngr.AddOffset("GameRenderer", "48 8B 0D ? ? ? ? 48 85 C9 74 06 48 8B 01 FF 50 50", 3); mngr.AddOffset("Dedicated Server Settings", "48 8B 05 ? ? ? ? 48 85 C0 75 1A 48 8D 15 ? ? ? ? 48 8B 0D ? ? ? ? E8 ? ? ? ? 48 89 05 ? ? ? ? 48 8B 58 20 48 85 DB 74 06 48 8B 5B 28 EB 28", 3); mngr.AddOffset("DebugRenderer", "48 8B 0D ? ? ? ? 48 85 C9 75 03 33 C0 C3 E9 ? ? ? ?", 0); mngr.AddOffset("DrawText", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 20 49 8B F9 41 8B F0 8B EA 48 83 CB FF 48 FF C3", 0); mngr.AddOffset("DrawLine", "48 89 5C 24 ? 44 89 4C 24 ? 57 48 83 EC 20 48 8B DA BA ? ? ? ? 49 8B F8 44 8D 42 FF E8 ? ? ? ? 8B 0B 89 08 8B 4B 04 48 8B 5C 24 ?", 0); mngr.AddOffset("DrawLineRect", "48 89 5C 24 ? 48 89 74 24 ? 44 89 4C 24 ? 57 48 83 EC 50 0F 29 74 24 ? F3 0F 10 32 0F 29 7C 24 ? F3 0F 10 7A ? 48 8B DA 49 8B F8 BA ? ? ? ? 48 8B F1 44 0F 29 44 24 ? F3 45 0F 10 00 44 8D 42 FF E8 ? ? ? ?", 0); mngr.FindSignatures(); mngr.PrintSignatures(); while (1) { if (GetAsyncKeyState(VK_F8) & 0x8000) EjectDLL(); if (GetAsyncKeyState(VK_F7) & 0x8000) { ShowMenu = !ShowMenu; Sleep(200); } Sleep(100); } return 1; }
int main() { std::string dll_name = "sniffer.dll"; std::string exe_name = "process.exe"; if(!CheckWindowsVersion()) { THROW_ERROR("The system does not meet the requirements (should be XP or later)!"); ps::Error::Print(); system("PAUSE"); return EXIT_FAILURE; } DWORD process_id = GetProcessIdFromExe(exe_name); if(process_id == 0) { THROW_ERROR("Could not find process if by the name of the executable!"); ps::Error::Print(); system("PAUSE"); return EXIT_FAILURE; } printf("Process id: %u\n", process_id); HMODULE module = NULL; if(!InjectDLL(process_id, dll_name, &module)) { THROW_ERROR("DLL injection failed!\n"); ps::Error::Print(); system("PAUSE"); return EXIT_FAILURE; } printf("DLL successfully injected!\n"); ps::Pipe client; bool rv = client.InitializeClient("packet_sniffer_pipe_42"); CHECK(rv == true); rv = client.Connect(); CHECK(rv == true); printf("Connected to server via pipe!\n"); std::vector<char> message; rv = client.ReadMessage(&message); if(rv == false) { ps::Error::Print(); system("PAUSE"); return EXIT_FAILURE; } //printf("%u\n", message.size()); CHECK(message.size() == 1); CHECK(message[0] == 0); /*client.ReadMessage(&message); std::string packet(message.begin(), message.end()); printf("Received: '%s'\n", packet.c_str());*/ rv = client.FinalizeClient(); CHECK(rv == true); system("PAUSE"); if(!EjectDLL(process_id, module)) { THROW_ERROR("DLL ejection failed!\n"); ps::Error::Print(); system("PAUSE"); return EXIT_FAILURE; } printf("DLL successfully ejected!\n"); system("PAUSE"); return EXIT_SUCCESS; }