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

Determining what memory/values a remote application accesses/changes?

本文关键字:内存 访问 应用程序      更新时间:2023-10-16

让我们举一个在IT界众所周知的例子:

我们有一个游戏,例如纸牌,有人为它制作并发布了一个训练器,你的移动总是'0'。

我如何以编程方式确定哪些地址和哪些值被"hack"改变?

如果可能的话,什么方法是最好的?

  • 从游戏内[注入/加载我自己的dll?)
  • 用我自己的进程拦截黑客和目标进程之间的流量?

我问这个问题有两个原因:

  • 保护应用程序不被"黑客攻击"(至少是脚本kiddy)
  • 逆向工程培训师(所以你不必重新发明轮子/避免NIH综合症)

你不能。一些失败的尝试可能是设置两个地址,然后比较它们(他们会找到另一个地址)。或者他们可以直接删除你的compare调用。

它们可以改变任何用于"编程确定"的保护函数,使其始终返回false结果。他们可以对你的可执行文件做任何事情,所以没有办法。

除非你钩子内核函数打开进程来修改内存。但是这也是容易被破坏的,如果我没有错的话,你现在需要得到你的"保护内核驱动程序"的数字签名。

还有另一种方式,你在每个运行和新生成的进程中加载DLL(这可能会提醒防病毒程序你的程序是病毒),用那个DLL你钩子OpenProcess(如果有另一个替代方案,那也是)函数在每个进程中,检查它是否针对你的程序,如果是的话,阻止它。搜索函数挂钩。我相信有一个叫"MS绕道"之类的东西。

但是,游戏仍然不会接近安全。

总而言之,没有任何方法能够有效地保护你的游戏。如果你正在存储分数或其他东西,你应该创建一个服务器程序,客户端应该报告每一个移动到服务器。

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