CoreWindow 对象的获取 - cngege/Mod GitHub Wiki

命名空间

#include <winrt/windows.ui.core.h> 
using namespace winrt::Windows::UI::Core; 
//CoreWindow


首先在 鼠标事件Hook回调中 执行

{
  ...
  CoreWindow core = CoreWindow::GetForCurrentThread();
  uintptr_t out = *(uintptr_t)&core;
  printf("%llX", out);
  ...
}

将得到的指针结果 在CE中搜索, 大概会出现二十多个值,最下方能看到 基于Minecraft.Windows.exe 的静态偏移

我们后面就用这个静态偏移即可

后面通过特殊手段获取基址,比如 Minecraft.Windows.exe+5D77228,再转为 CoreWindow 对象:

CoreWindow win = *(CoreWindow*)(ModManager::getMCBase() + 0x5D77228);

方法二:

在 IDA中搜索字符串 "Only backbuffer pointer and native window handle can be changed after initialization!"
发现有两个个引用,一个一个看
看包含这个字符串的函数的汇编代码,看哪个和下面图片的汇编比较像,然后找到红框中的一条

QQ_1727809717168

比如这里能看到的是 145D766E0 前面的14是入口地址偏移去掉,5D766E0 是基址偏移,再加上8得到 5D766E8, 就是我们要找的目标偏移
最终得到结果:Minecraft.Windows.exe + 5D766E8

/* 如何获取CoreWindow 单例

  • [*] 命名空间:#include <winrt/windows.ui.core.h> | using namespace winrt::Windows::UI::Core; | CoreWindow
  • 原理 在鼠标按键事件回调中 调用 CoreWindow::GetForCurrentThread(), 获取 CoreWindow 对象单例
    • 使用&取存储的引用地址,得到后在使用*取值转为地址,则得到一个地址即 CoreWindow 对象的地址
    • 在CE中搜索这个地址,则在下面能得到 Minecraft.Windows.exe + XXXX 的静态地址, 则找到了Minecraft for UWP 的 CoreWindow 对象

*/