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

标签 windows delphi api firewall

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

我从“Noton Firewall 2003”(非常老...)知道这个功能,它能够扫描硬盘以查找可以访问互联网的 EXE 文件。

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

相关的附带问题:是否有任何“简单”(并且希望“干净”)的方法来阻止应用程序访问互联网? (例如, Hook 每一种/实现互联网访问所需的 DLL 导入?)

我的工具的预期用途类似于

my_easy_firewall.exe [target-application] [parameters]

--> 如果应用程序具有互联网访问功能,则询问是否允许或拒绝互联网访问。然后根据用户的决定,在有或没有 Internet 访问的情况下运行带有 [parameters] 的 [target-application]。

我想在 Borland Delphi 中开发它。

谢谢。

问候

丹尼尔·编码(marshal)

最佳答案

Daniel,扫描 exe 文件来检测是否导入一些用于互联网访问的 dll 是不可靠的,因为存在许多无需直接导入 dll 即可访问互联网的方法。例如,您可以使用 LoadLibrary动态加载 dll 或 COM 对象的函数,如 WinHttpRequest使用后期绑定(bind)的对象。

例如你可以这样创建一个项目

{$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 都不用于直接访问互联网。

我认为您可以使用 GetExtendedTcpTable 之类的函数监控任何应用程序的 TCP 和 UDP 连接,而不是检测互联网访问。 (检查 delphi 样本 herehere )从这里您可以确定应用程序正在访问的端口和服务器并通知用户。或者使用更高级的东西的另一种方式,比如 Winpcap解析捕获的网络数据包。

关于windows - 有 EXE 互联网接入吗? (阻止它?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5445133/

相关文章:

c++ - 不能包含 "vcruntime_new_debug.h"

java - 在 Android Studio 中获取 "Gradle sync failed: connection reset"

windows - 新的 Windows 应用商店搜索 API?

linux - Windows 和 Linux 之间的 Socket 性能

delphi - 有什么方法可以加快在位图 Canvas 上的绘制速度?

windows - 如何从任务栏(XE4)隐藏 firemonkey 应用程序按钮?

sql - 我应该创建表还是查询?

javascript - Pinterest API 可用性

java - 如何在 NEO4J API 中设置关系属性?

javascript - 自动播放Google云端硬盘中的视频并在完成JavaScript时发出警报