有EXE互联网接入? (阻止它?)

我想写一个小工具来分析一个EXE文件(x32,x64),它检查EXE是否有访问互联网的能力。

我知道这从“诺顿防火墙2003”(非常老…)的function,它能够扫描硬盘上的EXE文件有互联网接入。

问题是,如何检测? 是否有一些DLL文件,如果需要互联网访问总是导入? (WININET.DLL?)我也想知道,如果有区别,通信是如何开发的(使用框架,使用套接字,使用WinAPI,…?)

相关副题:有没有“简单”(有希望“干净”)的方式来阻止应用程序访问互联网? (例如,挂钩每个types/实现互联网访问所需的DLL导入?)

我的工具的使用情况就像这样

my_easy_firewall.exe [target-application] [parameters] 

– >如果应用程序具有互联网访问function,则询问是否允许互联网访问。 然后根据用户的决定使用或不使用互联网访问[参数]运行[目标应用程序]。

我想在Borland Delphi中开发这个。

谢谢。

问候

丹尼尔Marschall

丹尼尔,扫描exe文件,以检测是否导入一些用于互联网访问的DLL是不可靠的,因为存在许多方法来访问互联网,而无需直接导入一个DLL。 例如,您可以使用LoadLibrary函数来动态加载dll,或者使用后期绑定,像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://stackoverflow.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都不能直接访问互联网。

我认为,而不是检测到互联网访问,你可以监视任何应用程序的TCP和UDP连接使用像GetExtendedTcpTable (从这里检查德尔福示例)这里你确定应用程序正在访问的端口和服务器,并通知用户。 或者采用其他更高级的方法,像Winpcap解析捕获的网络数据包。

据我所知,所有的反恶意软件都使用某种签名来检测受感染的文件。
对于相关的问题,阻止应用程序访问Internet的最佳方法是拦截所有TCP / IP通信请求。 这是一个防火墙的工作,开发你的防火墙不是一件小事。

我使用了一种解决方法

例如一个带有内容的.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文件将编辑主机文件来阻止不需要的示例连接access.blocked.com,它将启动程序exe,等待它关闭完成后,它将删除主机文件中的条目,使其再次清理。 完美的作品。

https://code.google.com/p/hostscmd/downloads/list