gpt4 book ai didi

python - 检查可执行文件是否可以尝试连接到互联网

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:20 24 4
gpt4 key购买 nike

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

我应该用什么方法来处理这个问题?查看用 C 编写的程序的十六进制,我可以看到包含的库以纯文本显示。我应该寻找像 socket.h 这样的图书馆吗?这个可靠吗?

请注意,我是一名二年级的道德黑客专业学生,因此我不会制作出可以与专业 AV 软件相媲美的东西。

我也在用 Python 编写我的 AV 并在 Linux 下进行演示。

最佳答案

我认为您不会看到是否包含了 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\)@'

objdump -D 反汇编可执行文件(包括数据部分,以防某些恶意可执行文件使用一些诡计),然后 grep 检查对原型(prototype)化的 libc 函数的任何调用在 socket.h 中。

但这只有在可执行文件本身直接调用套接字函数时才有效,但情况并非总是如此。将 wget 替换为 curl,您将得不到任何结果。原因是 curl 的网络功能都在 libcurl 中。

因此,下一步:查看库。

ldd `which curl`

实际上,这甚至可能是您的第一步。如果可执行文件链接到一些明显的网络库(即 libssl.so.1.0.0),您可以在此处停止。但假设不是,您现在拥有可执行文件加载的动态库列表。您也可以对它们使用 objdump -D。反汇编 /usr/lib/x86_64-linux-gnu/libcurl.so.4 表明该库确实调用了套接字函数。

希望这能为您提供一个不错的起点。除了单调乏味之外(尽管您将编写代码来为您执行此操作这一事实减轻了单调乏味),还有一个问题是任何与套接字函数同名的外部函数都将使用我的命令行显示。如果您可以接受误报方面的错误,那应该没什么大不了的,但可能有更好的方法来检查函数。

编辑:这可能不适用于所有二进制文件。 grep 直接在可执行文件中找到那些函数名,这是我在 Ubuntu 中的分布式 wgetcurl 上没想到的。

关于python - 检查可执行文件是否可以尝试连接到互联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23411138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com