1
0
mirror of https://github.com/valinet/ExplorerPatcher.git synced 2025-01-19 01:04:08 +01:00

Implemented offset patcher for ARM64

This commit is contained in:
Valentin Radu 2021-09-03 01:30:14 +03:00
parent de5fd5ac56
commit e81d47332c

View File

@ -3,6 +3,8 @@
#error This application only supports the amd64 or ARM64 architectures. Compilation aborted.
#endif
#endif
#define STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_NOP 0
#define STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_ALWAYS_JUMP 1
#define HOOK_WITH_FUNCHOOK 0
#define HOOK_WITH_DETOURS 1
#define HOW_TO_HOOK HOOK_WITH_FUNCHOOK
@ -3242,7 +3244,8 @@ __declspec(dllexport) DWORD WINAPI main(
if (ok)
{
dwInjectedAddr += symbols_PTRS.explorer_PTRS[3] + start;
if (strat == 0)
#ifdef _M_AMD64
if (strat == STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_NOP)
{
printf("Results: %d (%d) ", VirtualProtect(
(LPVOID)dwInjectedAddr,
@ -3263,7 +3266,7 @@ __declspec(dllexport) DWORD WINAPI main(
), GetLastError());
printf("when altering taskbar code path using strat 1.\n");
}
else if (strat == 1)
else if (strat == STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_ALWAYS_JUMP)
{
printf("Results: %d (%d) ", VirtualProtect(
(LPVOID)dwInjectedAddr,
@ -3284,6 +3287,60 @@ __declspec(dllexport) DWORD WINAPI main(
), GetLastError());
printf("when altering taskbar code path using strat 1.\n");
}
#elif _M_ARM64
if (strat == STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_NOP)
{
uint32_t instruction = 0xD503201F;
printf("Results: %d (%d) ", VirtualProtect(
(LPVOID)dwInjectedAddr,
sizeof(uint32_t),
PAGE_EXECUTE_READWRITE,
&dwOldValue
), GetLastError());
memcpy(
(LPVOID)dwInjectedAddr,
&instruction,
sizeof(uint32_t)
);
printf("%d (%d) ", VirtualProtect(
(LPVOID)dwInjectedAddr,
sizeof(uint32_t),
dwOldValue,
(PDWORD)(&dwNumberOfBytes)
), GetLastError());
printf("when altering taskbar code path using strat 1.\n");
}
else if (strat == STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_ALWAYS_JUMP)
{
uint32_t instruction;
printf("Results: %d (%d) ", VirtualProtect(
(LPVOID)dwInjectedAddr,
sizeof(uint32_t),
PAGE_EXECUTE_READWRITE,
&dwOldValue
), GetLastError());
memcpy(
&instruction,
(LPVOID)dwInjectedAddr,
sizeof(uint32_t)
);
instruction <<= 8;
instruction >>= 13;
instruction &= 0b00010100000000000000000000000000;
memcpy(
(LPVOID)dwInjectedAddr,
&instruction,
sizeof(uint32_t)
);
printf("%d (%d) ", VirtualProtect(
(LPVOID)dwInjectedAddr,
sizeof(uint32_t),
dwOldValue,
(PDWORD)(&dwNumberOfBytes)
), GetLastError());
printf("when altering taskbar code path using strat 1.\n");
}
#endif
}
else
{