我试图学习用C ++修改游戏而不是游戏只是用来获取弹药的记忆,所以有人能指出我的书
答案 0 :(得分:13)
操作远程进程内存的最方便方法是在该程序的上下文中创建一个线程。这通常通过将dll强制注入目标过程来完成。在目标应用程序中执行代码后,您可以自由使用标准内存例程。例如(memcpy,malloc,memset)。
我现在可以告诉你,最方便易用的方法是CreateRemoteThread / LoadLibrary技巧。
正如其他人所提到的,可以通过扫描内存来获取已知值的简单黑客攻击。但是如果你想要执行更高级的任何操作,你需要研究调试和死列表分析。 (工具:分别为ollydbg和IDA pro)。
你已经触及了一个非常广泛的黑客主题的表面,那里有丰富的知识..
首先是一些互联网资源:
gamedeception.net - 一个致力于游戏RE(逆向工程)和黑客攻击的社区。 p>
http://www.edgeofnowhere.cc/viewtopic.php?p=2483118 - 关于各种DLL注入方法的优秀教程。
Openrce.org - 反向代码工程社区。 p>
我还可以向您推荐一本书 - http://www.exploitingonlinegames.com/
您应该研究的Windows API例程(msdn.com):
CreateRemoteThread
LoadLibraryA
VirtualAllocEx
VirtualProtectEx
WriteProcessMemory
ReadProcessMemory
CreateToolhelp32Snapshot
Process32First
Process32Next
答案 1 :(得分:4)
注入代码:
我认为最好的方法是修改exe以将代码注入其中一个已加载的模块。 Check this tutorial
简短的相关故事:
10多年前,我确实记得用简单的C ++程序在Windows中成功修改了纸牌游戏的得分。我这样做是通过在某个基地址启动一个int *指针并迭代内存地址(使用try / catch来捕获异常)。
我会在其中一个指针变量中查找当前得分,并将其替换为新的整数值。我只是确保我的当前分数是一些不明显的值,不会包含在许多内存地址中。
一旦我找到一组与我的分数匹配的内存地址,我会在纸牌中手动更改我的分数,只查看最后一次迭代中找到的内存地址。通常这会缩小到包含分数的单个内存地址。在这一点上,我有一个神奇的简单代码行* pCode = MY_DESIRED_SCORE;
尽管使用新的内存安全模型,但这可能不再可能。但是这个方法在10-20行C ++程序中效果很好,只需要大约一分钟来修改我的分数。
答案 2 :(得分:0)
有足够的程序可以让你修改正在运行的程序的内存。它们经常被用来作弊。但要小心使用在线游戏,因为大多数作弊行为都会被检测到,并且你会被禁止而不会发出警告。
如果您想自己创建它们,只需查看描述Windows API的书籍。你会在那里找到足够的信息。
答案 3 :(得分:-1)
可以使用窗口上的钩子来访问进程的内存空间。