所以我正在玩DLL注入并试图在一个小游戏中改变我的弹药的价值。我注入了DLL并且它很成功但是我在尝试编辑内存值时遇到了问题。
DWORD* address = (DWORD*)((*(DWORD*)(0x00400000 + 0x50F4F4)) + 0x150);
*(int*)address = value;
每当我注入DLL并且这段代码运行时它会因访问冲突错误而崩溃,我甚至尝试使用VirtualProtect取消保护内存并且它仍然崩溃。相当新的,所以任何建议都表示赞赏,谢谢
答案 0 :(得分:0)
您使用了错误的偏移量:
DWORD* address = (DWORD*)((*(DWORD*)(0x00400000 + 0x50F4F4)) + 0x150);
0x50F4F4是攻击多维数据集中本地播放器对象的绝对虚拟地址。相对偏移为0x10F4F4。您应该将0x10F4F4添加到0x00400000或直接使用0x50F4F4。
正确的代码:
int* address = (int*)((*(DWORD*)(0x50F4F4)) + 0x150);
*address = 1337;
此游戏未使用ASLR,所以很好。