用MS绕道防止winsock注射

时间:2013-04-15 11:52:15

标签: c++ dll detours

我已经在某处读过一个代码,承诺它可以保护应用程序Winsock函数免受数据包编辑。

我运行游戏服务器,这对我来说真是个好消息。但这真的有可能吗? 就像在我的游戏可执行文件中使用绕道添加一个DLL来保护我的winsock函数不被劫持一样?

就像他们将数据包编辑器挂钩到我的应用程序一样,他们不会看到有关数据包记录的任何内容吗?

或者从这种工具中隐藏我的应用程序的过程是一种更好的方法吗?

谢谢。请讨论。

我找到的代码:http://pastebin.com/XtfSHxBL

3 个答案:

答案 0 :(得分:3)

如果你要在你的游戏中添加这样的代码,我只会NOP它;)

克服它。
客户端不安全,无法信任。

此外,我可以在两者之间切换一个linux路由器,并在那里捕获数据包..

如果您不希望捕获您的winsock数据,则需要使用良好的不对称加密算法(如PGP)以及将数据发送到winsock之前对其进行加密。

更好的想法是使用isdebuggerpresent关闭程序,如果这是真的。 但是你需要对可执行文件进行加密,因为我只是用IDA对它进行反汇编,并且修补程序是对NOP的修复,或者是0xe9,并且在运行时通过createremotethread返回false,这在文件中无法检测到 - 校验和检查。

然而,这样一来,如果我劫持isdebuggerpresent WinAPI函数并将其删除,你仍然会受到攻击。那种可以通过MS绕道而行的东西;)

答案 1 :(得分:2)

任何类似的东西都是微不足道的。专注于保护实际协议,使用加密,验证服务器端的所有内容。

我会在评论中发布此内容,但显然你需要声誉来做到这一点。

答案 2 :(得分:1)

在某种程度上是可能的。然而,没有什么能阻止持久的黑客。

我记得的一种可能性(因为我调查了对这种“安全”函数导入的攻击)被.NET运行时使用,以保护它免受劫持注册表读取/打开功能(出于与CAS相关的安全原因)。 /> 基本上,他们决定硬连线功能地址,为许多Windows变体(几个服务包)指定直接地址。显然,只有当你是MS时才能熟练地做到这一点(你修改了advapi32,改变了Reg *函数的地址吗?你也提交了一个mscoree补丁)。

这使得捕获和拦截这些功能变得困难(至少比使用IAT更困难),但正如我所说,我发现它是如何检查攻击的......

使用Detour,您仍然使用IAT,但您可以检查是否有人摆弄它,并“恢复”(重写)原始地址。或者至少检查一下。这就是Punkbuster过去常常做的事情,IIRC。请注意,这证明没有像安全的客户端(人们理解PB正在做什么 - >他们规避了它)。