windows - Har EXE internetadgang? (Bloker det?)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gerne skrive et lille værktøj, som analyserede en EXE-fil (x32, x64), som kontrollerer, om EXE har evnen til at få adgang til internettet.


Jeg kender denne funktionalitet fra 'Noton Firewall 2003' (meget gammel ...), som kunne scanne harddisken til EXE-filer, der har internetadgang.


Spørgsmålet er, hvordan man opdager det? Er der nogle DLL-filer, der altid importeres, hvis der er brug for internetadgang? (WININET.DLL?) Jeg undrer mig også, om det gør forskel, hvordan kommunikationen blev udviklet (ved hjælp af en ramme, ved hjælp af stikkontakter, ved hjælp af WinAPI, ...?)


Relateret side-spørgsmål: Er der nogen 'nem' (og forhåbentlig 'ren') måde at forhindre en applikation på at få adgang til internettet? (f.eks. vedhæftning af en DLL-import, som er påkrævet for ALLE slags/implementering af internetadgang?)


Intented brug af mit værktøj ville være noget som


my\_easy\_firewall.exe [target-application] [parameters]


-> Hvis applikationen har internetadgangsfunktion, så spørg, om du tillader eller nægter internetadgang. Kør derefter [[mål-applikation]] med [[parametre]] med eller uden internetadgang, baseret på brugerens beslutning.


Jeg vil gerne udvikle dette i Borland Delphi.


Tak skal du have.


Hilsen


Daniel Marschall

Bedste reference


Daniel scanner exe-filerne for at opdage, om importen nogle dll, der bruges til internetadgang, ikke er pålidelig, fordi der findes mange metoder til at få adgang til internettet uden import direkte en dll. for eksempel kan du bruge funktionen LoadLibrary, som indlæser en dll dynamisk eller et COM-objekt som WinHttpRequest objektet ved hjælp af sen binding. [8] [9]


for eksempel kan du oprette et projekt som dette


{$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.


Nu ved at bruge et værktøj til at kontrollere dll afhængigheden vil du se en lille liste som denne


oleaut32.dll
advapi32.dll
user32.dll
kernel32.dll
ole32.dll


ingen af ​​disse dll bruges til at få adgang til internettet direkte.


Jeg tror, ​​at i stedet for at registrere internetadgangen kan du overvåge TCP- og UDP-forbindelserne til ethvert program ved hjælp af en funktion som GetExtendedTcpTable (se delphi-prøver her og her) herfra bestemmer du porten og serveren, som applikationen har adgang til og informere brugeren. eller anden måde at bruge noget mere avanceret som Winpcap parsing netværkspakker fanget. [10] [11] [13]

Andre referencer 1


Så vidt jeg ved, at alle antimalware bruger en slags signatur til at registrere inficerede filer.

For den relaterede side spørgsmål er den bedste måde at forhindre en applikation på at få adgang til internettet ved at aflytte alle anmodninger om TCP/IP-kommunikation. Dette er et firewall job, og udviklingen af ​​din Firewall er ikke en triviel opgave.

Andre referencer 2


Jeg bruger en løsning


For eksempel en .bat-fil med indhold


"\%~dp0"hosts add access.blocked.com 127.0.0.1
call "\%~dp0"programname.exe
"\%~dp0"hosts del access.blocked.com


Det bruger hosts.exe fra url nedenfor for at redigere Windows værtsfilen. Batfilen ovenfor vil redigere værtsfil for at blokere uønsket eksempelforbindelse access.blocked.com, det vil starte programmet exe, vil vente på, at det lukkes, når det er færdigt, og det vil slette posten i værtsfilen, så den er ren igen. Fungerer perfekt.


https://code.google.com/p/hostscmd/downloads/list[14]