【问题标题】:c++ dynamicly change addresses in another process?c ++在另一个进程中动态更改地址?
【发布时间】:2013-01-28 21:28:20
【问题描述】:

是否可以更改应用程序中的地址以使该应用程序仍然可以正常工作,但对该应用程序的 hack(基于内存读/写)不能?也许移动堆栈之类的?

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

【问题讨论】:

  • 移动堆栈是什么意思?你的意思是改变堆栈的内容?更具体,问题不清楚
  • 请至少包含一些附加信息,例如操作系统、程序类型、您尝试搜索的内容等。您可能正在寻找类似 MSVC 中的“随机基地址”选项的内容,或Address space layout randomization等技术
  • what do you mean by movind the stack? 我的意思是一些方法可以在应用程序运行时将条目移动到整个内存中
  • 您是否在询问是否存在程序本身可以访问(可以读取和写入)但不能从使用 os 系统 API 的不同进程上的应用程序访问的进程内存的某些部分?跨度>
  • @PoiXen 是的!这正是我的意思!

标签: c++ security


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 2015-05-05
    • 2015-01-26
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2019-06-26
    • 2014-10-16
    相关资源
    最近更新 更多