![]() |
Trojaner problem mit UrlDownloadToFile
Hallo,
ich habe für mein Programm eine Updatefunktion hinzugefügt, indem ich eine 2. Programm starte und diese lädt die Datei runter, ersetzt die .exe und startet es. Alles läuft super, nur bei manchen antivirus Programmen erhalte ich eine Trojaner Meldung, wie z.B. NOD32, ArcaVir, Emsisoft, VBA32 und Ikarus. Ich benutze für das Herunterladen UrlDownloadToFile und wenn ich die Zeile auskommentiere bekomme ich keine Trojaner Meldung mehr. AntiVir konnte ich austricksen, indem ich den Umweg mit Button1Click(self) genommen habe. Nur wie kann ich die anderen antivirus Programme austricksen? Hier mein Code von Update.exe:
Delphi-Quellcode:
URL und DownloadFile sind Konstante.
function TForm1.laden(Source, Dest: string): Boolean;
begin try Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0; except Result := False; end; end; procedure TForm1.FormShow(Sender: TObject); begin Button1Click(Self); end; procedure TForm1.Button1Click(Sender: TObject); begin if laden(url+downloadFile, extractfilepath(application.exename)+downloadFile) then begin MessageDlg('Das Programm wurde aktualisiert.', mtInformation,[mbOk], 0); ShellExecute(Application.Handle,'open',Pchar(ExtractFilePath(application.exename)+'Repertuar.exe'),nil,nil,sw_ShowNormal); Form1.Close; end else begin MessageDlg('Das Programm konnte nicht aktualisiert werden!!!.', mtWarning,[mbOk], 0); ShellExecute(Application.Handle,'open',Pchar(ExtractFilePath(application.exename)+'Repertuar.exe'),nil,nil,sw_ShowNormal); Form1.Close; end; end; |
AW: Trojaner problem mit UrlDownloadToFile
Sowas kann ja nur über "Heuristik" (besser: simple generische Erkennmethoden) erkannt werden. Und dabei werden sicherlich noch andere Parameter überprüft. Ist die Datei signiert? Sowas sollte z.B. die Einschätzung schon zu Deinen Gunsten verschieben.
|
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
Nur noch Emsisoft und Ikarus mekern, aber die kenne ich nicht mal, also sind die auch nicht wichtig. Überprüft habe ich die Datei auf ![]() Was meinst du mit signieren? |
AW: Trojaner problem mit UrlDownloadToFile
Da bleibt nur deine Exe an die Hersteller zu schicken, damit die ihre Definitionen aktualisieren.
Oder du versuchst es mit Indy statt UrlDownloadToFile. Aber das wiederum erkennt dann vielleicht z.B. Antivir. Aber einen Versuch wäre es ja wert... |
AW: Trojaner problem mit UrlDownloadToFile
Mit Signieren meine ich
![]() Nächste Frage: hast Du ordentliche Versionsresourcen? Und ein Manifest eingebunden? Halt alles, was seriöse Programme haben, Malware aber eher nicht. Wobei Signatur und Versionsresource wegen der Herkunftsangabe beide am meisten Gewicht haben könnten (kommt aber total auf die generischen Muster an). Indy ist tatsächlich ne Überlegung, oder zumindest die Http*-Befehle aus der WinINet (wobei sowas wie Indy und Synapse zwar aufbläht, aber weniger in das generische Muster passen wird). |
AW: Trojaner problem mit UrlDownloadToFile
Nun habe ich eine andere Funktion gefunden und die "laden"-Funtion erzetzt.
Nun merkert nur noch NOD32 und VBA32. Wenn ich die ShellExecute Zeile auskommentiere mekert NOD32 nicht mehr. Aber ich muss das Programm auch wieder starten, damit die Benutzer es nicht selber tun müssen. Hier die Funktion, falls jemand es braucht:
Delphi-Quellcode:
function CopyURL(const URL, OutputFile: string): Boolean;
const BufferSize = 2048; var hSession, hURL: HInternet; Buffer: array[0..Pred(BufferSize)] of Byte; BufferLength: DWORD; f: file; m: tmsg; begin Result := False; hSession := InternetOpen('User', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0); try Assign(f, OutputFile); Rewrite(f, 1); repeat if PeekMessage(M, 0, 0, 0, pm_Remove) then begin TranslateMessage(M); DispatchMessage(M); end; InternetReadFile(hURL, @Buffer, BufferSize, BufferLength); BlockWrite(f, Buffer, BufferLength); until BufferLength = 0; Close(f); Result := True; finally InternetCloseHandle(hURL); end; finally InternetCloseHandle(hSession); end; end; Zitat:
|
AW: Trojaner problem mit UrlDownloadToFile
Du solltest keine Energie dafür investieren, ein harmloses Programm was fälschlicherweise bemängelt wird für die Virenscanner harmlos erscheinen zu lassen. Es ist auch nicht ganz unwahrscheinlich, dass deine ganzen Workarounds mit dem nächsten Update der Antivirensoftware hinfällig werden... sowohl im positiven als auch im negativen Sinne.
Also am sinnvollsten: Zitat:
|
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
Deswegen habe ich nun mit Indy mein Problem gelöst. nur VBA32 mekert von 20 antivirus Programmen und das ist mir nicht wichtig. Hier mein funktionierender Code:
Delphi-Quellcode:
Vielen Dank an euch:-D
procedure TForm1.FormShow(Sender: TObject);
begin Button1Click(Self); end; procedure TForm1.Button1Click(Sender: TObject); var responseStream: TFileStream; begin try IdHTTP1.Head(Url+downloadFile); if (IdHTTP1.ResponseCode <> 404) then responseStream := TFileStream.Create(ExtractFilePath(application.exename)+'Repertuar.exe', fmCreate); IdHTTP1.Get(url+downloadFile, responseStream); //downloadFile MessageDlg('Das Programm wurde aktualisiert.', mtInformation,[mbOk], 0); responseStream.free; except on E: EIdHTTPProtocolException do MessageDlg('Das Programm konnte nicht aktualisiert werden!!!.', mtWarning,[mbOk], 0); end; ShellExecute(Application.Handle,'open',Pchar(ExtractFilePath(application.exename)+'Repertuar.exe'),nil,nil,sw_ShowNormal); Form1.Close; end; |
AW: Trojaner problem mit UrlDownloadToFile
Delphi-Quellcode:
Solche Fehlermeldungen liebe ich. Die kann man sich auch sparen, denn sie hilft werde dem Benutzer noch dir, wenn der Benutzer dich fragt, warum das Update nicht funktioniert hat. Wenn du schon die Exception abfängst, dann kannst du doch auch gleich den Exceptiontext ausgeben. Dann hat man zumindest schon mal einen Anhaltspunkt, was nicht funktioniert hat.
on E: EIdHTTPProtocolException do
MessageDlg('Das Programm konnte nicht aktualisiert werden!!!.', mtWarning,[mbOk], 0); |
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
Hier braucht man eine Fehlerinformationsanreicherungs-Strategie:
Delphi-Quellcode:
try
// hier der Code für Download ... on E:Exception do begin E.Message := Format('Update konnte nicht von heruntergeladen werden.'#13#10'Url: %s'#13#10, [url+downloadFile])+ E.Message; // Orginale Fehlermeldung anhängen raise; // Exception neu auslösen; MessageDlg zu verwenden wäre ungeschickt end; |
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
|
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
Kompletter Widerspruch ;) Hauptsächlich in der Formulierung. Dateien zu signieren, ja überhaupt erstmal gültige ordentliche Versionsresourcen einzutragen hat nichts mit "harmlos erscheinen lassen", sondern mit "seriös machen" zu tun. Und genau das sollte er tun - wenn er ernst genommen werden möchte. Indy zu verwenden gehört jetzt nicht zum seriös machen, wohl aber die Punkte, auf die er gar nicht eingegangen ist. Einschicken bedeutet nichts anderes, als vor jedem Release wieder neu an alle Hersteller einschicken zu müssen. Und die husten ihm irgendwann einen. Tun wir zumindest, wenn jemand schlampig programmiertes einschickt und beratungsresistent ist. Wobei, die meisten Entwickler sind für Hinweise tatsächlich dankbar :o |
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
Und die Beratungsresistenz würde ich in diesem Fall bei den Virenscanner-Hersteller ansiedeln, nicht beim einfachen Programmierer. Der wird dadurch nur gehindert. Und auch schlampig programmiertes Zeug hat durchaus seine Berechtigung zu laufen, ohne dass der Virenscanner einen Trojaner verdächtigt. Bernhard |
AW: Trojaner problem mit UrlDownloadToFile
Das Problem ist grundlegender.
Alle Methoden einen Download zu machen, sei es mit UrlDownloadToFile oder den Indys, erfordern das dein Programm auf das Internet zugreifen muss. Diese ist für eine Firewall oder ein Antivirus-Programm ein nicht gewünschtest verhalten. Für den Benutzer ist das auch nicht gut, da er dein Programm erst in der Firewall freischalten muss. Du könntest versuchen den Windows Bits Dienst zu nutzen. Der ist meist in der Firewall freigeschaltet. Eine Demo findest du in den Quelltexten meiner Session letztes Jahr bei den Delphi-Tagen. "UpToDate" - Software aktuell halten. Hat mal jemand einen Link dazu? Ich finde es nicht mehr (hier im Forum). Alternativ: Entwickler Mag. 4.2010. ![]() ![]() |
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
Wenn ich ein Flugblatt, Dorfblättchen oder sonstiges Pamphlet rausgebe, muss ich den ViSdP nennen. Wenn ich eine Webseite zu meiner Hamsterzucht ins Netz stelle, muss ich ein Impressum dazu packen. Wenn ich Software veröffentliche, ist das auch nicht anders, dann sollte ich die Herkunft angeben, und das gehört in die Versionsresource. Software ist immer potentieller Schadcode, und damit hat der Anwender ein Recht, die Herkunft zu kennen. Und signieren ist ähnlich. Zugegeben, für Hobby-Freeware-Entwickler nicht günstig. Aber so wie ich kein Auto verkaufen würde, das man nicht abschließen kann, würde ich auch keine Software an den Kunden bringen, die nicht wenigstens so minimal gegen Fremdeinwirkung abgesichert ist. Insofern: genauso, wie ich jemanden nicht für seriös halte, der seine Meinung zur politischen Lage ohne ViSdP an Laternenmasten klebt, halte ich Software-Autoren, die ihre Software nicht ausreichend kennzeichnen, für unseriös. Oder ein anderes Beispiel: wer sein eigenes Auto nicht abschließt, ist gegen Diebstahl nicht versichert und hat letztendlich sogar noch Teilschuld an dem, was mit dem gestohlenen Auto passiert. Weil er grob fahrlässig war. Und Schlampigkeit ist auch grob fahrlässig. Damit möchte ich jetzt niemanden persönlich angreifen. Und auch F/Ps nicht generell schönzureden. Wir selber versuchen zwar, F/Ps manchmal auch auf Kosten einer geringen Erkennungsrate zu vermeiden, aber ganz vermeiden lassen sie sich nunmal nicht. Und genau wie beim Auto-Beispiel gibt's halt irgendwo eine moralische "Selbst-Schuld"-Schranke. Die, ich wiederhole mich, von eigentlich seriösen Herstellern auch durch die Bank anerkannt wird. |
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
|
AW: Trojaner problem mit UrlDownloadToFile
Dass eine Software mal False Positives hat, ist normal und unvermeidbar.
Dass aber manche Antivirensoftware wie Antivir vor einer Weile (in letzter Zeit ja offenbar nicht mehr so) oder AVG im Moment andauernd False Positives anzeigt, ist nicht mehr normal... |
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
Ok, das ist in vielen Fällen nicht soo schlimm, aber Du bringst ein eigentlich gutes Beispiel... Zitat:
Aber ich wiederhole mich nochmal: ich bin kein Freund von F/Ps. Wie jaenicke schon schreibt, sie sind unvermeidbar, aber übertriebene generische Erkennungen sorgen nur für gute Ergebnisse in Tests (die nur gegen Schadsoftware-Datenbanken testen, und oft F/Ps ignorieren), schaden aber letztendlich sogar der Sicherheit des Kunden, weil der so genervt ist, daß er echte Schadsoftware bald übersieht, weil er sie irgendwann mit einem "ach noch ein F/P" einfach wegklickt. Wir machen das nicht (wobei, das sagen vermutlich alle :D ), und ich find's wie gesagt wenn übertrieben auch fernab von gut, aber wenn Entwickler Grundzüge der Seriösität missen lassen, habe ich ziemlich wenig Mitleid mit ihnen. Wenn das Hochmut ist, dann sei es so. |
AW: Trojaner problem mit UrlDownloadToFile
Zitat:
Diese wird von der VCL auf oberster Ebene abgefangen und über
Delphi-Quellcode:
angezeigt.
Application.ShowException
Dieses Standardverhalten macht "im Prinzip" genau das Gleiche wie MessageDlg: es zeigt die Fehlermeldung in einem modalen Fenster an. Aber ein raise macht noch etwas mehr: es unterbricht den Programmfluss und gibt die Kontrolle an die Windows-Message-Loop zurück. Dieses Verhalten ist hier ebenfalls erwünscht, denn welchen Sinn macht es wenn der Download des Updates gescheitert ist das Programm weiterlaufen zu lassen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz