Python 检查可执行文件是否可以尝试连接到internet

Python 检查可执行文件是否可以尝试连接到internet,python,linux,antivirus,Python,Linux,Antivirus,我正在为我的年终项目写一个简单的反恶意软件。我已经确定了一些基础知识,但我想添加一个功能,检查可执行文件是否可能尝试连接到internet 我应该怎么做?查看用C编写的程序的十六进制,我可以看到包含的库以纯文本显示。我应该找像socket.h这样的图书馆吗?这可靠吗 请注意,我是一名二年级的道德黑客学生,所以我不希望生产出能与专业AV软件相匹敌的产品 我还在用Python编程AV,并在Linux下演示。您所说的是一种签名扫描形式 您将把代码与已知的恶意代码签名进行比较,并查看该代码是否包含在恶意

我正在为我的年终项目写一个简单的反恶意软件。我已经确定了一些基础知识,但我想添加一个功能,检查可执行文件是否可能尝试连接到internet

我应该怎么做?查看用C编写的程序的十六进制,我可以看到包含的库以纯文本显示。我应该找像socket.h这样的图书馆吗?这可靠吗

请注意,我是一名二年级的道德黑客学生,所以我不希望生产出能与专业AV软件相匹敌的产品


我还在用Python编程AV,并在Linux下演示。

您所说的是一种签名扫描形式

您将把代码与已知的恶意代码签名进行比较,并查看该代码是否包含在恶意应用程序中

假设这是一行被称为恶意代码的代码,并编译为特定的签名,该签名也是已知的:

Send IP address to hacker
六边形

 00105e0 e6b0 343b 9c74 0804 e7bc 0804 e7d5 0804
 00105f0 e7e4 0804 e6b0 0804 e7f0 0804 e7ff 0804
 0010600 e80b 0804 e81a 0804 e6b0 0804 e6b0 0804
然后,您的程序可以搜索十六进制文件,试图找到已知的恶意签名

你更可能在短时间内完成的事情被称为:

行为阻滞

想想病毒或恶意代码可能会对您的系统造成的影响,并注意它。 前面的代码假装连接并在某处发送IP地址。 就像防火墙一样,您可以监视尝试建立的连接并向用户发出警报


您还可以监视正常情况下未被修改或访问的文件,以防止此类情况发生。

我认为您无法查看是否包含
socket.h
,并且相关函数在libc中,因此应用程序始终可以使用这些函数。我会尝试看看应用程序是否真的调用了这些函数

检查可执行文件是否直接调用套接字函数的一种简单方法(在shell中):

objdump -D `which wget` | grep '<\(accept\|bind\|connect\|getpeername\|getsockname\|getsockopt\|listen\|recv\|recvfrom\|recvmsg\|send\|sendmsg\|sendto\|setsockopt\|shutdown\|socket\|socketpair\)@'
事实上,这可能是你的第一步。如果可执行文件链接到一些明显的网络库(即
libssl.so.1.0.0
),您可以到此为止。但假设不是这样,您现在拥有了可执行文件加载的动态库列表。您也可以在这些上使用
objdump-D
。反汇编
/usr/lib/x86_64-linux-gnu/libcurl.so.4
表明该库确实调用了套接字函数

希望这能给你一个不错的起点。除了繁琐之外(尽管您将编写代码来完成这项工作,这一点也有所缓解),还有一个问题,即任何名为socket函数的外部函数都将使用我的命令行显示。如果你不介意在误报方面出错,那应该没什么大不了的,但是可能有更好的方法来检查函数


编辑:这可能不适用于所有二进制文件
grep
直接在可执行文件中查找那些函数名,这是我在Ubuntu的分布式
wget
curl
上没有想到的。。。直接使用的腿。将url请求放入函数并检查结果/错误不是更容易吗?我认为urlopen可能会在几秒钟后报告连接失败。我认为查找字符串是不可靠的,因为函数可以按顺序从DLL导入,而不必按名称导入(至少在Windows下)。简而言之,没有简单的方法可以检查程序是否连接到互联网。谢谢你的回答。另外,请原谅我的无知,但是您的方法是否只适用于用C编写的可执行文件?是的。它可以与编译为机器代码的其他语言一起工作,但对于解释/字节码语言,需要不同的方法。例如,使用Python,您可以检查.py文件中的任何相关导入(例如,
socket
urllib
,等等),并使用Python反编译器检查
.pyc
/
.pyo
文件,但您还需要对任何
文件进行C风格的检查。因此,如果存在
文件,请使用Python反编译器(如果有人创建一个C扩展来直接使用套接字函数以绕过这些导入)。
ldd `which curl`