有 EXE 上网吗? (阻止它?)
Posted
技术标签:
【中文标题】有 EXE 上网吗? (阻止它?)【英文标题】:Has EXE internet access? (Block it?) 【发布时间】:2011-03-26 20:36:01 【问题描述】:我想写一个小工具来分析一个EXE文件(x32,x64)来检查这个EXE是否有能力访问互联网。
我从“Noton Firewall 2003”(非常老的......)中知道这个功能,它能够扫描硬盘以查找可以访问 Internet 的 EXE 文件。
问题是,如何检测它?如果需要访问互联网,是否有一些始终导入的 DLL 文件? (WININET.DLL ?)我也想知道,如果它有所不同,通信是如何开发的(使用框架,使用套接字,使用 WinAPI,......?)
相关的附带问题:是否有任何“简单”(并且希望是“干净”)的方法来阻止应用程序访问互联网? (例如,挂钩每个类型/实现互联网访问所需的 DLL 导入?)
我的工具的预期用途类似于
my_easy_firewall.exe [target-application] [parameters]
--> 如果应用程序具有互联网访问功能,则询问是否允许或拒绝互联网访问。然后根据用户的决定,使用 [parameters] 运行 [target-application] 是否可以访问 Internet。
我想在 Borland Delphi 中开发它。
谢谢。
问候
丹尼尔·马歇尔
【问题讨论】:
这听起来很难。祝你好运。 您提出了两个截然不同的问题。请将它们分成单独的帖子。有人问如何静态确定程序的 Internet 活动。另一个询问如何阻止进程的网络流量。 【参考方案1】:Daniel,扫描exe文件以检测是否导入了一些用于上网的dll是不可靠的,因为存在许多不直接导入dll即可上网的方法。例如,您可以使用动态加载 dll 的 LoadLibrary
函数或使用后期绑定的 WinHttpRequest
对象等 COM 对象。
例如,您可以创建这样的项目
$APPTYPE CONSOLE
uses
ActiveX,
ComObj,
SysUtils;
Procedure HttpGetText(const Url:string);
var
objHTTP : OleVariant;
begin
objHTTP:=CreateOleObject('WinHttp.WinHttpRequest.5.1');
objHTTP.Open('GET', Url, False);
objHTTP.Send();
Writeln(objHTTP.ResponseText);
end;
begin
try
CoInitialize(nil);
try
HttpGetText('https://***.com/questions/5445133/has-exe-internet-access-block-it');
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
begin
Writeln(E.Classname, ':', E.Message);
Readln;
end;
end;
end.
现在使用一个工具来检查 dll 依赖,你会看到一个像这样的小列表
oleaut32.dll
advapi32.dll
user32.dll
kernel32.dll
ole32.dll
这些 dll 都不用于直接访问互联网。
我认为,您可以使用GetExtendedTcpTable
之类的功能(检查delphi 示例here 和here)来监控任何应用程序的TCP 和UDP 连接,而不是检测互联网访问,您可以从这里确定端口和服务器应用程序正在访问并通知用户。或者使用更高级的方法,例如 Winpcap 解析捕获的网络数据包。
【讨论】:
感谢您的回答。好吧,我已经认为有很多方法可以访问互联网。我真的很想知道诺顿是如何在不启动 EXE 的情况下检测到它的。带有 TCP/UDP 连接监控的解决方案需要启动 EXE(存在无法避免某些 Internet 活动的风险)。您知道如何在不启动 EXE 的情况下执行静态分析吗?我认为 Norton 软件确实在 EXE 中找到了所有“互联网活动”应用程序的“典型”内容,但我真的很想知道,是什么。 Daniel 如果您的系统中安装了 Norton,您可以编译提供的代码吗?并测试诺顿是否检测到生成的exe是否可以访问互联网? 唉,我早就放弃了这个旧防火墙(因为它也使计算机变得很慢)。但我可以尝试在接下来的几天内将其安装在虚拟机上。然后我可以告诉你,如果你能成功地“欺骗”我所说的这个检测;-)【参考方案2】:据我所知,所有反恶意软件都使用某种签名来检测受感染的文件。 对于相关的附带问题,阻止应用程序访问 Internet 的最佳方法是拦截所有 TCP/IP 通信请求。这是一项防火墙工作,开发防火墙并非易事。
【讨论】:
不,我不是在谈论反恶意软件。我担心你没有理解这个问题。 Norton Firewall 2003 具有检测连接到 Internet 的 EXE 文件的功能。这并不意味着 EXE 文件被编入索引、白名单或黑名单。诺顿软件会扫描某种导入表等,以发现此 EXE 正在与 Internet 通信。 @Daniel 这是静态分析,还是 exe 尝试连接时的动态检测。我必须说你的问题非常缺乏可能导致你得到一个好的答案的细节。 是静态分析。正如我所描述的,诺顿可以扫描硬盘并检测使用互联网的 EXE,并列出它们。不必启动 EXE。 @Daniel 当您提到 Norton 2003(古代软件)时,我怀疑该产品的新版本是否提供相同的特性......如果不是,我认为他们发现该方法不可靠足以让庞大的表单从应用程序获取 Internet 访问权限。【参考方案3】:我使用了一种解决方法
例如带有内容的 .bat 文件
"%~dp0"\hosts add access.blocked.com 127.0.0.1
call "%~dp0"\programname.exe
"%~dp0"\hosts del access.blocked.com
它使用下面 url 中的 hosts.exe 来编辑 windows 主机文件。上面的 bat 文件将编辑 hosts 文件以阻止不需要的示例连接 access.blocked.com,它将启动程序 exe,完成后将等待它关闭,并将删除 hosts 文件中的条目,以便再次清理。完美运行。
https://code.google.com/p/hostscmd/downloads/list
【讨论】:
这可能有助于防止到达主机。如果程序不需要名称解析,或者如果您无法识别程序可能尝试访问的所有可能主机,则它不会帮助阻止程序访问 Internet。 是的。但是如果不安装完整的防火墙等,我无法找到阻止 exe 的方法以上是关于有 EXE 上网吗? (阻止它?)的主要内容,如果未能解决你的问题,请参考以下文章