c ++动态更改另一个进程中的地址?

时间:2013-01-28 21:28:20

标签: c++ security

是否可以更改应用程序中的地址以使应用程序仍能正常工作,但是此应用程序的黑客攻击(基于内存读/写)不是?也许移动堆栈或什么?

@Update 我不寻找随机化基地址。我正在寻找在运行应用程序时更改地址的方法,以便应用程序仍可正常工作,但“黑客和机器人”无法读取这部分内存。 ASLR不是我想要的(它很容易绕过)

1 个答案:

答案 0 :(得分:1)

移动堆栈将非常困难,除非您在执行之前可以一直返回到main。作为引用传递的任何变量或指向堆栈上的varíable的指针都不允许移动。在你说“好,然后我只是动态地分配所有东西”之前,现在你有完全相同的问题 - 你的HEAP位于一个可预测的地方(至少在某种程度上是可预测的),因此可以修改。当然,即使堆不可预测地放置,也不能在执行期间随机移动它,因为你的代码依赖于指针和对堆中其他数据的引用 - 如果你移动它,你最终不得不重新安排所有这些参考文献。最后,您仍然会有一些已知或可能从某些其他值(例如堆栈,某些全局数据值或其他值)计算的寄存器或内存位置,这些值可用于确定数据的位置。

我最好的建议是在堆中生成代码,并使用它来并行计算游戏中使用的结果。

此外,避免持久位置的一种方法是在动态创建和销毁的线程中运行代码 - 这样,堆栈只能在一个地方短时间内完成。但是,当然,它并没有真正阻止那些技术娴熟,决心找到保护方法的人。世界上有数以百万计的人可以访问计算机并且能够“闯入事物”,你无法真正依赖“通过默默无闻的安全”[使事情变得复杂并不安全]。

正确的安全方法是在保存代码的服务器上执行所有必要的计算,并且公众无法获得代码!但是,对于FPS游戏来说,这可能不太现实。对于扑克游戏来说,这是非常逼真的,特别是如果你打得好的话你会赢钱!