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!"
发现有两个个引用,一个一个看
看包含这个字符串的函数的汇编代码,看哪个和下面图片的汇编比较像,然后找到红框中的一条
比如这里能看到的是 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 对象
*/