所以前几天,我看到了这个:

http://www.edgeofnowhere.cc/viewtopic.php?p=2483118

它介绍了 DLL 注入的三种不同方法。我将如何防止这些过程发生?或者至少,我如何防止第一个?

我在想,也许 Ring 0 驱动程序可能是阻止这三个驱动程序的唯一方法,但我想看看社区的想法。

有帮助吗?

解决方案

在最佳的技术解决办法是做一些事情,使加载程序代码不能够你的进程初始化后才能正常运行。这样做的一种方式是通过采取NT加载程序锁,这将有效地防止发生任何装载动作。其他选项包括直接在内存,以使给LoadLibrary调用失败对于攻击者修补加载程序代码(例如,插入一个INT3断点和自我调试处理预期例)..

但作为一个黑客(一个谁管理员有您链接到该网站,实际上)说,你不会永远阻止人们越来越代码到你的过程中,这种或那种方式。调用LoadLibrary恰好是一个方便快捷,但也有吨不同的方式来加载代码手动,你永远也别想完全停止,短期的一些极其参与的ring0代码。而且,即使你去的ring0,黑客将是正确的在你身边。

另外,也有大量用于DLL注入合法用途。延伸OS功能主题节目,辅助工具,以及各种程序都可以潜在地使用DLL注射以得到附加的功能在任何程序。

其他提示

如何抵御那些3组的技术:

CreateRemoteThread的

可以通过挂钩的LoadLibrary防止第一技术(CreateRemoteThread的哪些调用LoadLibrary)。在你的钩子,你核对你知道DLL名称的列表是过程的一部分,可加载,或者你可以核对你不希望加载已知的DLL列表。

当你发现你不希望加载SetLastError(ERROR_ACCESS_DENIED),则返回NULL的DLL。我设置了一个错误,使得编写代码寻找错误代码的人得到一个。这似乎工作,也许不同的代码可能更合适。

这将停止加载的DLL。

和SetWindowsHookEx

我觉得对于远程线程阻塞同样的技术将用于调用SetWindowsHookEx工作,但只有在调用SetWindowsHookEx技术已经开始加载其代码(通常是在一个应用程序中创建的第一个窗口时,才可以得到安装钩子 - 这么早在其生命周期)。

代码洞

尼斯技术。没有看到过。您可以抵御这一点,但你必须勾调用LoadLibrary入口点(不是IAT表)作为代码洞调用LoadLibrary直接。

由于文章的作者评论 - 有很多方法可以被攻击,你可能会有一个很难击败他们。但往往你只想要抵御某些DLL加载(如特定的第三方DLL与您的软件不兼容,因为第三方DLL没有正确地编写,以适应这一事实另一个钩子也可能存在,所以你封锁它从装载)。

在最好的办法是,以确保没有不信任的过程中获得的管理员权限,或者运行相同的用户帐户,您的应用程序。如果没有这个访问,代码注入到应用程序是不可能的;而一旦这样的过程中获取的访问,它可能会导致各种恶作剧,而无需自身注入到其他进程 - 注入只是更容易隐藏

由于这海报暗示,他将投资游戏防黑客攻击,让我流下了什么,我认为一些轻。作为前骗子。

只需约游戏反黑客的指针。

,最好的办法是为让服务器运行的核心游戏逻辑即可。例如在第一人称射击游戏,运动监控客户端发送到服务器。不要让他们随意走动。 让服务器告诉每个玩家根据自己的逻辑客户即可。永远不要只是前进命令。他们可能是伪造的。

谁在乎,如果黑客黑客自己的客户端?只是拒绝它的其他的,一切都很好。星际maphacks,解决方法很简单。不要给了游戏状态的应该是未知的领域。这样可以节省带宽太

我是在三角洲部队一个大骗子(它的一个古老的游戏)。我使用的主要诀窍是通过直接修改进程内存在游戏的任何地方翘曲。无需DLL!

您是否正在寻找一个3环的解决方案呢?如果是的话,你想建立更多的功能集成到提供外的开箱即当前没有(至少据我所知)系统,所以它需要一些工作位。此外,这是可以从一个司机,其实大部分的杀毒软件定期进行这种类型的活动。

至于从用户模式停止上述方法,它变得有点棘手,因为你不能只是自己注册为回调到进程创建或加载DLL。你可以,但是,如果你假设你的进程他们,钩远程线程以及类似功能开始之前全球和执行这种类型的检查自己。

所以实际上你想查一下远程线程想要创建一个线程,如果你不喜欢它返回一个错误。

此将否定前两种方法。对于第三种方法,如果你有磁盘上的原始程序的有效散列,那么你总是加载之前检查的哈希值。如果你没有哈希,你至少可以只检查一些简单的地方有人会添加类型的代码,寻找你不要指望在那里的DLL(例如在IAT,或运行字符串)。

这不是傻瓜证明,但它似乎给您所要求的功能。

讨论只是简要的想法:)

使用代码洞穴注入CRC校验到你自己的代码可能会使他人使用别的代码洞穴放缓。

轮询未知的DLL正在加载的进程模块列表可能会减缓人们只是用注射螺纹连接和消息钩子任何旧的东西帮助。

为什么要防止这种情况?它是一个实际的“生意”需要,还是你只是有兴趣在“黑客”反对“黑客”

如果用户权限允许这样的,它的设计 - 操作系统提供的设施到的所有的用户,您的,系统的管理员已分配给它们运行在其下的帐户

Raymond Chen的很快会被这里链接...

我对 Windows API 不太熟悉,但我可以给你一些更通用的指导:

  1. 查看是否可以使用 Windows 数据执行保护 (DEP)。它可能不适用于所有人(阅读:大多数)情况,因为从操作系统的角度来看,链接中概述的过程是有效的过程。虽然纵深防守

  2. 确保您的流程方法在整个应用程序中声明安全权限

  3. 静态分配内存空间,以便在其中生成的任何新线程都将失败或覆盖现有内存空间;不过,您可能需要大量的逻辑来检测和纠正。

  4. 将您的代码分解到设备驱动程序或其他一些低级类型进程中,您可以将其纳入 Windows 文件保护保护范围内。

刚刚看到克苏隆的回答,我担心他可能是正确的:任何想要在您的应用程序上执行代码注入的人都会找到一种方法来做到这一点。上述步骤可能只会让事情变得更加困难。

希望这可以帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top