确定远程应用程序访问/更改的内存/值
Determining what memory/values a remote application accesses/changes?
让我们举一个在IT界众所周知的例子:
我们有一个游戏,例如纸牌,有人为它制作并发布了一个训练器,你的移动总是'0'。
我如何以编程方式确定哪些地址和哪些值被"hack"改变?
如果可能的话,什么方法是最好的?
- 从游戏内[注入/加载我自己的dll?)
- 用我自己的进程拦截黑客和目标进程之间的流量?
我问这个问题有两个原因:
- 保护应用程序不被"黑客攻击"(至少是脚本kiddy)
- 逆向工程培训师(所以你不必重新发明轮子/避免NIH综合症)
你不能。一些失败的尝试可能是设置两个地址,然后比较它们(他们会找到另一个地址)。或者他们可以直接删除你的compare调用。
它们可以改变任何用于"编程确定"的保护函数,使其始终返回false结果。他们可以对你的可执行文件做任何事情,所以没有办法。
除非你钩子内核函数打开进程来修改内存。但是这也是容易被破坏的,如果我没有错的话,你现在需要得到你的"保护内核驱动程序"的数字签名。
还有另一种方式,你在每个运行和新生成的进程中加载DLL(这可能会提醒防病毒程序你的程序是病毒),用那个DLL你钩子OpenProcess(如果有另一个替代方案,那也是)函数在每个进程中,检查它是否针对你的程序,如果是的话,阻止它。搜索函数挂钩。我相信有一个叫"MS绕道"之类的东西。
但是,游戏仍然不会接近安全。
总而言之,没有任何方法能够有效地保护你的游戏。如果你正在存储分数或其他东西,你应该创建一个服务器程序,客户端应该报告每一个移动到服务器。
即使这样,他们也可以创建一个机器人来自动响应服务器。那么你能做的最好的事情就是以某种方式验证它是一个人在玩。(也许是验证码或将解决速度与人类平均水平进行比较?)
相关文章:
- C++尝试深度复制唯一指针时出现内存访问冲突
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- CRTP - 危险的内存访问?
- C++ Python 的扩展 - 安全内存访问和内存布局
- 在Visual Studio中查找非法内存访问
- C++内存访问违反内存大块
- 数组中未映射的内存访问从python传递到c++
- 使用加速进程间创建消息队列 - 内存访问冲突
- C 指针转换会导致内存访问冲突
- 为什么代码会抛出非法内存访问错误
- 多线程环境中C++内存访问
- CUDA 中的递归返回非法内存访问
- 为什么创建进程 API 调用会导致内存访问冲突?
- 在 C++ 中遍历链表比在具有类似内存访问的 Go 中慢
- 确定打开进程的内存访问位置
- 存在内存访问异常,但我不确定我的代码中出了什么问题
- 指向结构的指针的 2D 数组.内存访问问题
- GPU 内存访问和使用 (CUDA)
- 在实时程序中是动态内存访问有害的
- 随机 mmaped 内存访问比堆数据访问慢 16%