Virus-Scanner

K

Kryptox

Grünschnabel
:hilfe2: Ich habe ein vorbereitetes C-Projekt.In diesem Projakt sind Verzeichnisse:scan - da befinden sich weitere Verzeichnisse und Dateien.Einige dieser Dateien sind von Viren befallen; virus - mit verschiedenen Viren in Form einer Datei. Meine Aufgabe ist es, einen Algorithmus in C unter Linux/Unix zu implementieren, welcher alle befallenen Dateien aufspürt und feststellt, welcher Virus diese Datei ab welchem Offset (Abstand zum Beginn der Datei) befallen hat. Bsp.: Wäre xxx ein Virus und abcaaxxxabaa eine befallene Datei, so lautete die Antwort: Diese Datei wurde vom Virus xxx ab der Stelle 5 befallen. Im Projekt sollen zwei Funktionen vorhanden sein: void scan(void) - zum Scannen; void report_virus(char *filename, int virus_id, long offset): Immer wenn ein Virus entdeckt wurde, wird dies mit dieser Funktion gemeldet. filename beschreibt dabei den Namen der infizierten Datei (absolut oder relativ). virus_id zeigt an, von welchem Virus die Datei befallen wurde. Alle Viren sind, ihrem Dateinamen entsprechend, numeriert. Der dritte Parameter, offset gibt an, ab welchem Offset der Virus beginnt.Nach erfolgtem Check soll ich eine Zusammenfassung erhalten, der ich entnehmen kann, wie viele der infizierten Dateien ich korrekt ausfindig gemacht habe. Eine Datei kann durchaus von mehr als einem Virus befallen werden. Wie kann ich mich daran machen?
 
Na die groben Schritte sind ja klar.
Du liest erstmal alle Virusdefinitionen ein, z.B. in ein char[][].
Dann lieste der Reihe nach alle Dateien ein und prüfst während dem einlesen, ob einer der Viren drin vorkommt.
 
also ich hoffe ich kann dir weiterhelfen ich denke das koenntest du so machen:
Code:
lese die vierendefinition in eine datenstruktur ein;
solange noch nicht alle dateien gelesen wurden{
      oeffne naechstedatei
      solang nicht alle vieren in der vierendefinition durchgegangen wurden{
         nimm einen virus aus der vierendefinition
         gehe die datei durch ob dieser virus vorhanden{
             falls forhanden{
                  schreibe pos filename und id in ergebnis datei
             }
         }
     }
}
 
Danke hehejo und hazelnoot! Ich versuche gerade, den Algorithmus zu implementieren. Mit welcher Funktion kann ich die Virendefinition (z.B.die Datei 1.virus) und die Datei (z.B. 2.dat) einlesen? Soll ich das byteweise im Hex-System einlesen und dann irgendwie die Hex-Muster beider Dateien vergleichen?
Gruß
Kryptox
 
Zuletzt bearbeitet:
soweit ich das verstanden habe willst du die datei binaer zum lesen oeffnen:
das kannste so machen:
Code:
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

#define SIZE 2 /*anpassen der blockgroesse(bytes)*/

int main(void){
   int readFD; /*filedeskriptor*/
   int readBytes; /*hier wird spaeter die anzahl der gelesenen bytes gespeichert*/
   char buffer[SIZE];
   /*eventuelle declaration des dateinamens fileName*/
   
   readFD = open(fileName, O_RDONLY); /*oeffnen der datei bei error: return -1*/

   /*lesen aus der datei bis zum ende der datei*/
   while((n = read(readFD, buffer, SIZE)) > 0){
      /*hier kann man was auch immer mit buffer anstellen*/
   }
   
   return 0;
}

ich hab den code nicht probiert aber es sind mal ein paar stichwoerter drinnen nachdenen du suchen kannst :-)

ps ob die bytes jet im binaerformat oder im hexformat sind, spielt ja keine rolle da es ja nur andere schreibweisen sind:-)
 
Dein Codestück ist hilfreich.
Wie kann ich aber die eingelesenen Inhalte beider Dateien vergleichen um festzustellen, ob eine Datei vom Virus befallen ist?
 
Hm, ich will dir jetzt ja nicht zu nahe treten, aber wenn du nicht weisst wie man zwei Werte auf Gleichheit testet, dann wuerde ich sagen fehlen dir irgendwie vielleicht noch ein paar Grundlagen?!
Inzwischen wurde dir doch praktisch alles schon vorgekaut, es steht da wie man Dateien oeffnet und einliest, weiter oben steht eine pseudo-Struktur, und ein bissl was musst halt schon auch noch selbst tun...

Die Idee hinter dem Ganzen hast du ja verstanden (xxx - aaaxxxbbb) insofern musst jetzt das einfach nur noch umsetzen.
Vielleicht fuehrst du dir einfach mal das hier und/oder das hier zu Gemuete, dann wird denk ich auch etwas Licht ins Dunkel kommen ;)
 
Zurück
Oben