コード例 #1
0
ファイル: Main.cpp プロジェクト: ezhangle/PVZ-Hack
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;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: xairy/packet-sniffer
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;
}