使用 winrt api (C++) 进行字节修补

问题描述 投票:0回答:1

我想编写一个 C++ 程序,该程序将被编译为 dll 并注入到 C++ uwp 应用程序中。

该程序应该修补特定地址处的字节。 例如,出于某些目的,我们想用

0x12345678
修补地址
{0x01, 0x02, 0x03}

我使用普通的 Windows api 为其编写了一个简单的程序:

void PatchMemory(LPVOID address, BYTE* data, SIZE_T size) {
    DWORD oldProtect;
    int result;

    HANDLE hProcess = GetCurrentProcess();
    if (hProcess == INVALID_HANDLE_VALUE) {
        Log::Warning("Patch unsuccessful...");
        return;
    }

    result = VirtualProtect(address, size, PAGE_EXECUTE_READWRITE, &oldProtect);
    if (result != 0) {
        Log::Warning("Patch unsuccessful... code: {}", result);
        return;
    }

    result = WriteProcessMemory(GetCurrentProcess(), address, data, size, nullptr);
    if (result != 0) {
        Log::Warning("Patch unsuccessful... code: {}", result);
        return;
    }

    result = VirtualProtect(address, size, oldProtect, &oldProtect);
    if (result != 0) {
        Log::Warning("Patch unsuccessful... code: {}", result);
        return;
    }

    Log::Info("Patch successful!");
}

但现在可悲的是...我无法在我的dll中使用这些api,因为它们不能在将注入dll的程序的沙盒uwp环境中工作。

现在我想知道:

  • 是否可以使用 winrt api 进行字节修补?
  • 如果是这样,怎么办?
  • 我的问题还有其他解决方案吗?

祝大家有美好的一天,并希望这个问题能够尽快得到解决......

编辑:

这不是出于恶意目的。这是为了修改 Minecraft 基岩版并增加下界的建筑高度限制。

c++ uwp windows-runtime
1个回答
0
投票

“出于某些目的”嗯 – 约翰

这是一个非常有用的回复,谢谢约翰

© www.soinside.com 2019 - 2024. All rights reserved.