例如,如果我编译的应用程序中的套接字设计为连接到 123.456.789.0。如何检查它是否连接到 123.456.789.0?有没有办法做到这一点?
想法是这样的:我想防止其他人编辑我的程序并将地址更改为例如 127.0.0.1 并使其通过代理连接。
连接套接字后是否有任何功能/方式/技巧来检查地址?
使用getpeername函数检索远程主机的地址。
如果有人像您提到的那样编辑您的程序,他们可能也会更改此类检查。
nos关于这种方法的不安全性的评论是正确的,但不完整。您甚至不需要更改程序的代码来规避您提出的机制。
最简单的解决方法是将 IP 别名添加到机器的网络接口之一。然后一个程序可以绑定到你的程序连接的端口上的那个接口,并且操作系统的网络堆栈会很高兴地将连接发送到攻击者的本地程序,而不是你的远程程序。
所以,现在你说你想知道如何列出计算机的接口,这样你就可以检测到这种颠覆。你的对手反击,在安装一个 Winsock 钩子后将你的程序作为他们的子进程启动,该钩子通过父进程路由 Winsock 回调。
然后,我们希望找到您询问如何读取加载到您的进程空间中的特定 DLL 的可执行代码部分,以便您检查代码是否符合您的预期。现在你的对手放弃了 Winsock shim,切换到 NDIS 层过滤器,在数据包到达 NIC 之前重写程序中的数据包。
接下来,我们发现您正在寻找某人来告诉您如何列出 Windows 系统上安装的驱动程序,以便您可以检查其中一个过滤器是否不存在。你的对手思考了大约 6 秒钟,然后决定开始搞砸数据包路由,从我能想到的至少三种不同的攻击中选择一种。(不,等等,四个。)
我不是安全专家。然而,我已经在这上面花了五分钟,并且已经用七种不同的方式击败了你的安全性。
你注定了吗?也许,也许不是。
与其想出解决您可以看到的风险的办法,不如发布一个新问题,说明您要保护的是什么,并让专家对风险和可能的解决方案发表评论。(不要在此处添加。您的问题已经被nos正确回答了。这是一个不同的问题。)
安全很难。与计算机科学的大多数其他领域相比,该学科的专业知识要重要得多。