MingW und Antivirenprogramme...



  • hallo,

    ich hab eine seltsame entdeckung gemacht.

    ich hab folgendes programm:

    #include <stdio.h>
    
    int main()
    {
    	printf("Hello World!\n");
    	return 0;
    }
    

    dieses programm hab ich mit gcc (GCC) 4.6.2 unter windows (MingW) kompiliert.

    ich hatte es schon öfters, dass mein antivirusprogramm harmlose hello-world programme als virus erkannt hatte.

    ich hab das programm ("helloworld.exe") bei virustotal hochgeladen.

    das ergebnis hat mich irgendwie erschreckt, aber seht selbst:
    https://www.virustotal.com/file/4c66fb3496f43465103074b6fa7f19b45b6c70faceca7799961ddb73875d36ad/analysis/1356446257/

    wie kann das sein? ich hab einfach den quelltext oben kompiliert!!! trotzdem erkennen 15 von 46 ( ca. 32,6% !) antivirenprogramme das hello-world-programm als virus!
    woran könnte das lieben?



  • Vmtl. weil es keine digitale Signatur beitzt, nicht
    in der Reputation(so heißt die Datenbank bei Kaspersky)
    eingetragen ist, nicht verzertifiziert wurde, ...

    0x0ERROR



  • 0x0ERROR schrieb:

    Vmtl. weil es keine digitale Signatur beitzt, nicht
    in der Reputation(so heißt die Datenbank bei Kaspersky)
    eingetragen ist, nicht verzertifiziert wurde, ...

    0x0ERROR

    also ich glaub nicht, dass das damit zusammenhängt.

    es gibt schließlich auch noch andere antivirenprogramme als das von kaspersky.

    was glaubst du wohl, was es kosten würde, wenn sich jetzt jeder compilerhersteller in irgendwelche listen eintragen müsste?



  • Das leigt am Compiller! Siehe hier mit Visual Studio:
    0 von 46 gaben Fehler an. Und hier mit Dev C++(arbeitet mir GCC): 5 von 45.
    Allerdings schlägt keiner der bekannteren(Kaspersky,Norton,Microsoft,GData, etc.)
    Alarm, nur die "kleineren". Hier einmal mein Quellcode(C++):

    #include <iostream>
    using namespace std;
    int main() {
    cout << "Hallo" << endl; 
    system("PAUSE");
    return 0;
    }
    

    Den habe ich bei beiden Compillern genommen. ⚠

    0x0ERROR



  • ich glaub, du meinst g++ (gcc nur für c; g++ für c++).

    aber man sieht, dass es dieses problem anscheinend auch mit anderen compilern aus dem MingW-Package gibt.


  • Administrator

    sehr seltsam... schrieb:

    ich glaub, du meinst g++ (gcc nur für c; g++ für c++).

    Nope. GCC ist die GNU Compiler Collection, dazu gehört auch g++. Das Programm gcc ist ein Frontend für alle Kompiler der GNU Compiler Collection. Es wird anhand der Dateiendung ausgewählt, welcher Kompiler eingesetzt wird. So gibt es auch das Programm c89-gcc und c99-gcc, wie es auch das Programm g++ gibt.

    Zum Problem:
    Recht bekannt, höre ich nicht zum ersten Mal, dass MinGW Programme Fehlalarme auslösen. Das kommt von der Heuristic der Antiviren Programme. Und ja, da hat Visual Studio bessere Chance daran vorbeizukommen, da es unter Windows eine bessere Unterstützung geniesst als MinGW.

    Grüssli



  • [quote="Dravere"]

    sehr seltsam... schrieb:

    Zum Problem:
    Recht bekannt, höre ich nicht zum ersten Mal, dass MinGW Programme Fehlalarme auslösen. Das kommt von der Heuristic der Antiviren Programme. Und ja, da hat Visual Studio bessere Chance daran vorbeizukommen, da es unter Windows eine bessere Unterstützung geniesst als MinGW.

    Grüssli

    ja aber was genau löst das aus?
    der "MingW-gcc" (so nenn ich ihn jetzt mal) muss ja anscheinend irgendwelche virus-typischen byte-folgen enthalten?

    ich hab ein bissl gegoogelt, und anscheinend gibt es schon länger diese probleme mit mingw.

    vielleicht sollte mal jemand in das offizielle forum/ mailingliste oder was auch immer schreiben?



  • 1. sorry für das "zitat". den text hat natürlich "Dravere" geschrieben.

    2. ich meinte natürlich:
    anscheinend müssen programme, die mit dem "MingW-gcc" kompiliert wurden, virus-typische bytefolgen enthalten?



  • Sind aber nicht alle GCC gleich in der Hinsicht. Ist eventuell gar von der Einstellung des Compilers beim erstellen des GCC abhängig.

    Mit dem GCC 4.4.1, der mit Code::Blocks im Angebot war, erstellte Programme waren da auch öfter auffällig.

    Selbst mit der selben Versionsnummer funktionieren nicht alle GCC gleich. Hatte mal einen dazwischen, der deutlich kleinere Programme erstellte, bei gleichen Compilerschaltern? Die Quelle dieses GCC hab ich mir nicht notiert.

    MfG f.-th.



  • an was erkennen antivirenprogramme eigentlich viren?

    ich denk mal, dass so ein antivirenprogramm als allererstes einen hash von der zu prüfenden datei erstellt und diesen in einer datenbank abgleicht.

    aber sonst?

    könnte es an der c-standardlib liegen?



  • und übrigens ist das nicht das einzige komische bei mingw-gcc, die erstellten exen sind immer sehr groß im verhältnis zum programmumfang.
    die oben erstellte hello-world-datei hat ca 46,9 Kb, das finde ich für so ein einfaches hello-world programm ziemlich viel.

    ich denk mir jetzt dazu mal meinen teil...



  • sehr seltsam... schrieb:

    an was erkennen antivirenprogramme eigentlich viren?

    Zuerst wird mit der Datenbank abgeglichen und dann können Anti-Viren-Programme
    an dem "Inhalt" der Datei erkennen ob es sich um einen Virus handelt, also die heuristische Suche. Dabei wird nach Algorythmen gesucht, die für Viren bekannt sind. Deswegen lassen sich auch Polymorphe Viren schlecht finden, weil sie ihren Quellcode häufig selbst ändern. 👎

    0x0ERROR



  • sehr seltsam... schrieb:

    die oben erstellte hello-world-datei hat ca 46,9 Kb, das finde ich für so ein einfaches hello-world programm ziemlich viel.

    Das Programm hat mit normalem gcc unter Linux 6,8 Kb (ohne Optimierungen).



  • Wenn dir die mit dem gcc erstellten Programme zu gross sind, teste für C den TinyCC 😉



  • ja warum sind die so groß? ich mein, diese größe wird bestimmt nicht durch irgendeinen "overhead" oder null-padding-bytes ausgelöst, oder?


  • Administrator

    sehr seltsam... schrieb:

    ja warum sind die so groß? ich mein, diese größe wird bestimmt nicht durch irgendeinen "overhead" oder null-padding-bytes ausgelöst, oder?

    Wie linkst du die Standardbibliothek? Statisch oder dynamisch?

    sehr seltsam... schrieb:

    ich denk mal, dass so ein antivirenprogramm als allererstes einen hash von der zu prüfenden datei erstellt und diesen in einer datenbank abgleicht.

    Ja. Aber viele unterstützen eben noch eine Heuristik. Und bei gewissen Antivirus Programmen ist dieser Algorithmus nicht gerade gut implementiert, wodurch es viele Falsch-Positive gibt.

    Wieso diese Antiviren Programme nun so ein einfaches "Hello World" als Virus erkennen, hängt eben von diesem Algorithmus ab. Heisst man müsste die genauen Implementationen sehen, sonst kann man nur wild mutmassen.

    Grüssli



  • Geh doch mal mit einem Debugger im Einzelschritt-Modus durch das "Hallo-Welt"-Programm. Dann muesstest du doch sehen, was fuer ein Code dort ausgefuehrt wird.



  • Dravere schrieb:

    sehr seltsam... schrieb:

    ja warum sind die so groß? ich mein, diese größe wird bestimmt nicht durch irgendeinen "overhead" oder null-padding-bytes ausgelöst, oder?

    Wie linkst du die Standardbibliothek? Statisch oder dynamisch?

    ehrlich gesagt... keine ahnung.

    ich hab das programm mit
    gcc helloworld.c -o helloworld.exe
    kompiliert.

    da das programm allerdings so groß ist, nehme ich stark an, dass ich sie statisch gelinkt hab?



  • gigg schrieb:

    Geh doch mal mit einem Debugger im Einzelschritt-Modus durch das "Hallo-Welt"-Programm. Dann muesstest du doch sehen, was fuer ein Code dort ausgefuehrt wird.

    ok, sobald ich versteh, wie man mit gdb arbeitet mach ich das.
    ich hab jetzt:
    gcc helloworld.c -o helloworld.exe -g
    gemacht. so hab ich alle symbols in der exe.

    aber hier zuerstmal der assemblercode vom compiler:

    .file	"helloworld.c"
    	.def	___main;	.scl	2;	.type	32;	.endef
    	.section .rdata,"dr"
    LC0:
    	.ascii "Hello World!\0"
    	.text
    	.globl	_main
    	.def	_main;	.scl	2;	.type	32;	.endef
    _main:
    LFB6:
    	.cfi_startproc
    	pushl	%ebp
    	.cfi_def_cfa_offset 8
    	.cfi_offset 5, -8
    	movl	%esp, %ebp
    	.cfi_def_cfa_register 5
    	andl	$-16, %esp
    	subl	$16, %esp
    	call	___main
    	movl	$LC0, (%esp)
    	call	_puts
    	movl	$0, %eax
    	leave
    	.cfi_restore 5
    	.cfi_def_cfa 4, 4
    	ret
    	.cfi_endproc
    LFE6:
    	.def	_puts;	.scl	2;	.type	32;	.endef
    


  • Das sieht ganz normal aus. Voellig unverstaendlich, wieso die exe so riesig ist.



  • soll ich die exe mal hochladen?


Anmelden zum Antworten