Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Datei ausführen wird als Virus erkannt (https://www.delphipraxis.net/148839-datei-ausfuehren-wird-als-virus-erkannt.html)

jokerfacehro 9. Mär 2010 12:38


Datei ausführen wird als Virus erkannt
 
Hallo,

ich programmiere mit Delphi 7 Enterprise und hab da ein Problem.

ich habe Antivir Classic und das meckert bei meinem programm
unzwar immer dann wenn ich einen der folgenden befehle nutze zum öffnen eines externen programms:

CreateProcess
ShellExecute
ShellExecuteEx


Das nervt ganz schön besonders weil das programm auf mehreren Rechnern laufen soll.
Gibt's da ne alternative zu den befehlen oder ne möglichkeit mit assembler code das muster zu verändern ?

himitsu 9. Mär 2010 12:49

Re: Datei ausführen wird als Virus erkannt
 
Es wird nur gemeckert, wenn diese Befehle genutzt werden?

Es gibt öeider wirklich den Fall, daß vorallem Delphi 7 von einem Virus befallen sein kann.
http://www.delphipraxis.net/internal...ighlight=virus

Ansonsten sind solche Probleme einer "Fehlmeldung" bekannt und es gibt auch schon Unmassen an Threads dazu.

z.B.:
http://www.delphipraxis.net/internal...ighlight=virus

Entweder den Code etwas ändern ... im allgemeinen führt das blose Einfügen derser Befehle nicht zu einer Erkennung (viele meiner Programme werden nicht erkannt, obwohl soetwas enthalten ist).

Oder du schickst dein Programm (besser samt QuellCode) an den Virenhersteller, damit er seine Definitionen entsprechend anpassen kann.

jokerfacehro 9. Mär 2010 12:51

Re: Datei ausführen wird als Virus erkannt
 
Sobald ich einen dieser befehle hinzufüge springt Antivir drauf an, ansonsten totenstille :/


Edit: den virus hatte ich schon, daran liegts auf keinen fall

jokerfacehro 9. Mär 2010 12:57

Re: Datei ausführen wird als Virus erkannt
 
wie soll ich denn den quelltext umschreiben, damit die heuristic nicht anspringt ?

ich meine welche veränderungen im quelltext führen zur änderung des maschinencodes

kommentare et.c is ja eh egal
aber zum beispiel funktionsnamen etc. bringt das was die zu ändern.
oder geht es nur um die reihenfolge der befehle ?

jokerfacehro 9. Mär 2010 13:45

Re: Datei ausführen wird als Virus erkannt
 
sooo ich hab ne andere funktion zur überprüfung auf internetkonnektivität rausgenommen und jetzt schlägt die heuristic nicht mehr an

hab die getinternetconnectionstate dynamisch eingebunden, so passt jetzt alles zusammen :)

http://www.swissdelphicenter.ch/de/showcode.php?id=466

Sherlock 9. Mär 2010 13:58

Re: Datei ausführen wird als Virus erkannt
 
Es war also eine Kombination aus der Connectivity-Prüfung und den Dateiöffnern? Gut zu wissen ;)

Sherloc

Bernhard Geyer 9. Mär 2010 14:09

Re: Datei ausführen wird als Virus erkannt
 
Zitat:

Zitat von jokerfacehro
wie soll ich denn den quelltext umschreiben, damit die heuristic nicht anspringt ?

Wenn du sicher bist das kein Virus drinn ist: Einfach das Programm an Hersteller schicken zwecks Signaturkorrektur. Irgenwann wird das "umschiffen" von AV-Scannerfehler nicht mehr mögich sein wenn man das nicht meldet und korrektur einfordert.

jokerfacehro 9. Mär 2010 14:15

Re: Datei ausführen wird als Virus erkannt
 
Zitat:

Zitat von Sherlock
Es war also eine Kombination aus der Connectivity-Prüfung und den Dateiöffnern? Gut zu wissen ;)

Sherloc


jop:

shellexecute...createprocess etc.

führte zusammen mit

Delphi-Quellcode:
uses wininet;

function IsInternetConnected: Boolean;
var dwConnectionTypes: DWORD;
begin
dwConnectionTypes:=INTERNET_CONNECTION_MODEM;
  if InternetGetConnectedState(@dwConnectionTypes, 0) then
  begin
    Result := True;
  end
  else
  begin
    Result := False;
  end;
end;
zu einer heuristic

Edit: mein programm war nonVCL

Astat 9. Mär 2010 22:11

Re: Datei ausführen wird als Virus erkannt
 
Hallo jokerfacehro, relevante Funktionen können auch Encoded werden, um nervige Virenscanner abzustellen.

Delphi-Quellcode:

const
  INTERNET_CONNECTION_MODEM = 1;
  KEY                       = '{746BEB0F-8995-4C99-AB60-AABFD294DF8F}';

  k32 : array[0..11] of Byte = (23, 25, 14, 18, 25, 16, 79, 78, 82, 24, 16, 16);
  LLA : array[0..11] of Byte = (48, 19, 29, 24, 48, 21, 30, 14, 29, 14, 5, 61);
  WID : array[0..10] of Byte = (11, 21, 18, 21, 18, 25, 8, 82, 24, 16, 16);
  ICS : array[0..24] of Byte = (53, 18, 8, 25, 14, 18, 25, 8, 59, 25, 8, 63,
    19, 18, 18, 25, 31, 8, 25, 24, 47, 8, 29, 8, 25);

type
  TAPIByteArray = array of Byte;

function Encode(const Text, Key: string): TAPIByteArray;
var
  i, j: integer;
begin
  SetLength(Result, Length(Text));
  move(Text[1], Result[0], Length(Result));
  for i := 1 to Length(Key) do begin
    for j := 1 to Length(Text) do begin
      Result[j - 1] := Result[j - 1] xor Ord(Key[i]);
    end;
  end;
end;

function Decode(APIByteArray: array of byte; Key: string): string;
var
  i, j: integer;
begin
  for i := 1 to Length(Key) do begin
    for j := 1 to Length(APIByteArray) do begin
      APIByteArray[j - 1] := APIByteArray[j - 1] xor Ord(Key[i]);
    end;
  end;
  setlength(Result, length(APIByteArray));
  move(APIByteArray[0], result[1], Length(APIByteArray));
end;

type
  TIGCS = function(lpdwFlags: LPDWORD; dwReserved: DWORD): BOOL; stdcall;
  TLL = function(lpLibFileName: PChar): HMODULE; stdcall;

function IsInternetConnected: Boolean;
var
  dwConnectionTypes: DWORD;
  IGCS: TIGCS;
  LL: TLL;
begin
  LL := GetProcAddress(GetModuleHandle(PChar(Decode(k32, KEY))),
    PChar(Decode(LLA, KEY)));

  IGCS := GetProcAddress(LL(PChar(Decode(WID, KEY))), PChar(Decode(ICS, KEY)));
  dwConnectionTypes := INTERNET_CONNECTION_MODEM;
  Result := IGCS(@dwConnectionTypes, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IsInternetConnected;
end;
lg. Astat

BUG 9. Mär 2010 22:52

Re: Datei ausführen wird als Virus erkannt
 
[OT]

Delphi-Quellcode:
uses wininet;
// ...
function IsInternetConnected: Boolean;
var dwConnectionTypes: DWORD;
begin
  dwConnectionTypes:=INTERNET_CONNECTION_MODEM;
  result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;
Sollte auch funktionieren, ist übersichtlicher und spart ein wertvolles if.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz