昨天我开始搞乱c#和VAMemory.ddl。我的目标是制作一个程序,从一个游戏“英雄联盟”中读取玩家的HP。 我找到了HP的静态地址并阅读了它:
vam.ReadFloat((IntPtr)address);
它工作得很好,我可以从我的程序中看到我的游戏内HP,但由于它是一个静态地址,每次重新启动游戏时它都会改变,我每次都必须找到该地址。 所以我开始寻找指针。我跟着几个教程,大约一个小时后我可以在cheatengine中看到我的HP,重新启动游戏并且没有查看地址仍然看到它。
但我不明白我将如何实现它到我的程序,我找不到任何教程。 :/
以下是我从Cheatengine发现的:
当前的HP - Legends.exe联盟 - 0x032871FC - 0x58,0x6C0,0x42C,0x90,0x448 - float
答案 0 :(得分:0)
这是解决问题的可行方法。请注意,该软件需要是32位软件!
第一步是获取流程的基地址:
Process GameProcess = Process.GetProcessesByName("GameProcessName").FirstOrDefault();
IntPtr BaseAddress = GameProcess.MainModule.BaseAddress;
基于此地址,您可以逐步执行指针(示例偏移量0x58)
int ReadBytes;
IntPtr BasePlusOneAddress = IntPtr.Add(BaseAddress, 0x58);
IntPtr BasePlusOneValue = (IntPtr)BitConverter.ToInt32(MemoryHandler.ReadMemory(GameProcess, BasePlusOneAddress, 4, out ReadBytes), 0);
您可以再次使用该值作为指针。
这导致了一个简单的功能,如
void IntPtr GetOffsetPointer(Process P, IntPtr BasePointer, Int32 Offset)
{
int ReadBytes;
IntPtr OffsetAddress = IntPtr.Add(BasePointer, Offset);
return (IntPtr)BitConverter.ToInt32(MemoryHandler.ReadMemory(P, OffsetAddress, 4, out ReadBytes), 0);
}
编辑: MemoryHandler
只包装ReadProcessMemory function个窗口。这只是一个示例 - 因此您必须实现自己的功能。 Code Project提供了一个greate示例。