Пример #1
0
TEST(fixHooks, fixHook2)
{
  ReloadLibrary();

  HMODULE h2 = GetModuleHandleA("SampleDll2.dll");

  uint32_t entryPoint = GetAddressOfEntryPoint(h2);
  auto entryPointHook = HookEngine::createHook<HookEngine::Stdcall, BOOL, HMODULE, DWORD, LPVOID>(entryPoint);
  entryPointHook->assignHook([entryPointHook](HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) -> BOOL {

    return entryPointHook->original(hModule, ul_reason_for_call, lpReserved);
  });

  uint32_t target = (uint32_t)GetProcAddress(h2, "fixHookTarget2");

  ASSERT_EQ(5067, ((fnFixHook)target)(5, 6, 7));

  auto hook = HookEngine::createHook<HookEngine::Stdcall, int, int, int, int>(L"SampleDll2.dll", "fixHookTarget2");
  hook->assignHook([hook] (int a1, int a2, int a3) -> int {
    return 10000 + hook->original(a1,a2,a3);
  });

  ASSERT_EQ(15067, ((fnFixHook)target)(5, 6, 7));

  hook->makePersistent();

  ReloadLibrary();


  h2 = GetModuleHandleA("SampleDll2.dll");
  target = (uint32_t)GetProcAddress(h2, "fixHookTarget2");
  ASSERT_EQ(15067, ((fnFixHook)target)(5,6,7));
}
Пример #2
0
TEST(TemplateHook64, hookWithTemplate_mixArgs)
{
  int intRes = 0;
  float floatRes = 0.0f;
  
  int res = targetTemplate_MixArgs(700, 700, 30, 30, intRes, floatRes);
  ASSERT_EQ(42, res);
  ASSERT_EQ(1730, intRes);
  ASSERT_FLOAT_EQ(1730.0f, floatRes);

  intRes = 0;
  floatRes = 0.0f;
  res = 0;

  uintptr_t target = (uintptr_t)targetTemplate_MixArgs;
  auto hook = HookEngine::createHook<HookEngine::Win64, int, int, float, int, float, int&, float&>(target);
  hook->assignHook([hook](int a1, float a2, int a3, float a4, int& intResult, float& floatResult) -> int {
    int res = hook->original(a1, a2, a3, a4, intResult, floatResult);

    intResult += 10000;
    floatResult += 10000.0f;

    return res + 1;
  });

  res = targetTemplate_MixArgs(700, 700, 30, 30, intRes, floatRes);
  ASSERT_EQ(43, res);
  ASSERT_EQ(11730, intRes);
  ASSERT_FLOAT_EQ(11730.0f, floatRes);
}
Пример #3
0
TEST(Fastcall, Sample4)
{
  ASSERT_EQ(72, targetFastcallFunc4(30));

  auto hook = HookEngine::createHook<HookEngine::Fastcall, int, int>((uint32_t)targetFastcallFunc4);
  hook->assignHook([hook](int a1) -> int {
    return 10 + hook->original(a1);
  });

  ASSERT_EQ(82, targetFastcallFunc4(30));
}
Пример #4
0
TEST(Fastcall, Sample)
{
  ASSERT_EQ(102, targetFastcallFunc1(10, 20, 30));

  auto hook = HookEngine::createHook<HookEngine::Fastcall, int, int, int, int>((uint32_t)targetFastcallFunc1);
  hook->assignHook([hook](int a1, int a2, int a3) -> int {
    return 10 + hook->original(a1, a2, a3);
  });

  ASSERT_EQ(112, targetFastcallFunc1(10, 20, 30));
}
Пример #5
0
TEST(TemplateHook64, hookWithTemplate_args2)
{
  uintptr_t target = (uintptr_t)targetTemplate_Args2;

  auto hook = HookEngine::createHook<HookEngine::Win64, int, int, int>(target);
  hook->assignHook([hook](int a1, int a2) -> int {
    int result = hook->original(a1, a2);
    return result + 10000;
  });

  int q = targetTemplate_Args2(5, 60);
  ASSERT_EQ(20065, q);
}
Пример #6
0
TEST(TemplateHook64, hookWithTemplate_args5)
{
  uintptr_t target = (uintptr_t)targetTemplate_Args5;

  auto hook = HookEngine::createHook<HookEngine::Win64, int, int, int, int, int, int>(target);
  hook->assignHook([hook](int a1, int a2, int a3, int a4, int a5) -> int {
    int result = hook->original(a1, a2, a3, a4, a5);
    return result + 10000;
  });

  int q = targetTemplate_Args5(5, 60, 700, 8000, 300000);
  ASSERT_EQ(328765, q);
}
Пример #7
0
TEST(TemplateHook64, hookWithTemplate_args0)
{
  uintptr_t target = (uintptr_t)targetTemplate_Args0;

  auto hook = HookEngine::createHook<HookEngine::Win64, int>(target);
  hook->assignHook([hook]() -> int {
    int result = hook->original();
    return result + 10000;
  });

  int q = targetTemplate_Args0();
  ASSERT_EQ(20000, q);
}
Пример #8
0
TEST(fixHooks, fixHook)
{
  ReloadLibrary();

  HMODULE h2 = GetModuleHandleA("SampleDll2.dll");

  uint32_t target = (uint32_t)GetProcAddress(h2, "fixHookTarget");
  ASSERT_EQ(567, ((fnFixHook)target)(5, 6, 7));

  auto hook = HookEngine::createHook<HookEngine::Stdcall, int, int, int, int>(target);
  hook->assignHook([hook] (int a1, int a2, int a3) -> int {
    return 1000 + hook->original(a1,a2,a3);
  });

  ASSERT_EQ(1567, ((fnFixHook)target)(5, 6, 7));

  hook->makePersistent();

  ReloadLibrary();

  h2 = GetModuleHandleA("SampleDll2.dll");
  target = (uint32_t)GetProcAddress(h2, "fixHookTarget");
  ASSERT_EQ(1567, ((fnFixHook)target)(5,6,7));
}
Пример #9
0
TEST(Fastcall, Sample3)
{
  ASSERT_EQ(65, targetFastcallFunc3(1,2,3,4,5,6,7,8,9,10));

  auto hook = HookEngine::createHook<HookEngine::Fastcall, int, int, int, int, int, int, int, int, int, int, int>(
    (uint32_t)targetFastcallFunc3);

  hook->assignHook([hook](
    int a1,
    int a2,
    int a3,
    int a4,
    int a5,
    int a6,
    int a7,
    int a8,
    int a9,
    int a10) -> int {
      int result = hook->original(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
      return result + 20;
  });

  ASSERT_EQ(85, targetFastcallFunc3(1,2,3,4,5,6,7,8,9,10));
}