【问题标题】:C++ and process memory protectionC++ 和进程内存保护
【发布时间】:2010-11-29 17:12:28
【问题描述】:

我知道 WinAPI 有内置的黑客功能。

我什至用 Pinvoke 在 C# 中使用它们...破解扫雷...这很容易...所以...

如何保护我的应用程序免受进程内存编辑、拒绝 DLL 注入和其他黑客攻击方式的影响。怎么样?!

希望 WinAPI 有类似 void DontTouchMeOrIWillTerminateYou(bool protect)...

【问题讨论】:

标签: c++ windows winapi memory-management


【解决方案1】:

Windows 中的访问控制是基于每个对象的。如果要保护进程对象,则需要在创建进程时(通过 CreateProcess 的 lpProcessAttributes)或之后(通过SetKernelObjectSecurity)设置进程对象的 ACL。如果您在 ACL 中添加“全部拒绝”条目,攻击者打开进程的尝试将失败。

当然,进程的所有者(以及用户运行的任何恶意代码)都可以将 ACL 改回原来的样子——不过,恶意代码可能还没有准备好这样做。为了有效防止来自用户空间的攻击,您需要以非交互用户(例如 LocalSystem)的身份运行进程。

再多的保护也无法阻止来自内核空间的攻击,因此任何可以安装驱动程序的人也可以破解系统上的任何进程。

【讨论】:

  • 1.有什么方法可以检测启动器应用程序? 2.我可以检测到攻击者并禁用攻击者吗(即时PC崩溃或其他什么......)
【解决方案2】:

黑客?不,这叫做调试(大部分情况下)

您的问题的简短回答是“不,您不能那样做”。我听说在 Vista 和更高版本中,有些操作系统进程无法调试(DRM 进程等),但我不确定你是否可以让进程以这种方式运行。

真正的问题是您为什么要这样做,并且您没有更重要的事情要担心(比如性能和可用性,更不用说软件的正确性了)?

【讨论】:

    【解决方案3】:

    关于内存编辑,检测它的一种简单方法是为某些数据保留校验和。

    【讨论】:

      【解决方案4】:

      不要在最终用户控制的机器上部署/运行您的流程:而是在您自己的计算机上运行您的流程,并让最终用户通过互联网与您的流程通信。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 2016-01-20
        • 2012-04-26
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        相关资源
        最近更新 更多