确定远程应用程序访问/更改的内存/值?

时间:2013-02-26 21:13:23

标签: c++ c windows memory memory-management

让我们举一个在IT世界中随处可见的例子:

我们有一个游戏,例如纸牌游戏,有人制作并发布了一个培训师,因为你的行动始终是' 0'

我如何以编程方式确定哪些地址以及哪些价值" hack"变化?

如果可能的话,哪种方式最好?

  • 从游戏中[注入/加载我自己的dll?]
  • 通过我自己的流程拦截黑客攻击和目标进程之间的流量?

我问这个问题是因为有两件事:

  • 保护应用程序免遭"黑客攻击" (至少由script kiddies
  • 对培训师进行逆向工程(因此您不必reinvent the wheel /避免NIH综合症)

1 个答案:

答案 0 :(得分:1)

你做不到。一些破坏的尝试可能是设置两个地址然后比较它们(他们将找到另一个地址)。或者他们可以简单地删除你的比较电话。

他们可以改变您用于“以编程方式确定”的任何保护功能,以便始终返回错误结果。他们可以对你的可执行文件做任何事情,所以没办法。

除非你挂钩打开你的进程的内核函数来修改内存。但这也是可以破解的,如果我没有错,你需要立即对你的“保护内核驱动程序”进行数字签名。

还有另一种方法可以在每个正在运行和新生成的进程中加载​​DLL(这可能会警告有关您的程序是病毒的反病毒),使用该DLL挂钩OpenProcess(如果还有其他替代方法,这也是每个过程中的功能,并检查它是否针对您的程序,如果是,则阻止它。搜索关于功能挂钩。我相信有一种叫做“MS Detour”的东西或类似东西。

然而,游戏甚至不会接近安全。

总而言之,在本地保护您的游戏绝不好。如果您要存储分数或其他内容,则应创建服务器程序,客户端应报告每次移动到服务器。

即使这样,他们也可以创建一个机器人来自动响应服务器。那么你能做的最好就是以某种方式验证它是一个正在玩的人。 (也许验证或比较解决速度与人类的平均值?)