Untitled
unknown
plain_text
5 months ago
2.0 kB
2
Indexable
#include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <string.h> #define ERROR 1 #define PROC_INDEX 0 #define PATH_INDEX 1 #define SIGN_INDEX 2 int isElf(FILE* file); int checkInfected(FILE* file,char* sign); void findSign(char* path, char* sign); char* getFullPath(char* parent,char* child); int main(int argc, char* argv[]) { int errorInFiles = 0; if(argc != 3) { printf("Usage: %s <dir path> <virus signature file>\n",argv[PROC_INDEX]); return ERROR; } FILE* virusSign = fopen(argv[SIGN_INDEX],"rb"); if(!virusSign) { printf("Error opening signature file!\n"); errorInFiles = ERROR; } DIR* path = opendir(argv[PATH_INDEX]); if(!path) { printf("Error opening path directory file!\n"); errorInFiles = ERROR; } if(errorInFiles) return ERROR; findSign(path,virusSign); fclose(virusSign); closedir(path); return 0; } int isElf(FILE* file) { char* header = malloc(strlen("ELF")); fread(header,sizeof(unsigned char), strlen("ELF"), file); if(!strcmp(header,"ELF")) return 1; return 0; } int checkInfected(FILE* file,char* sign) { int streak = 0,flag = 0; FILE* fp = fopen(file,"rb"); if(!fp) { printf("Error opening inner file!\n"); return 0; } while( } void findSign(char* path, char* sign) { struct dirent* entry; DIR* currDir = opendir(path); DIR* dir; FILE* fp; char* entryPath; while((entry = readdir(currDir)) != 0) { entryPath = getFullPath(path,entry->d_name); if((dir = opendir(entryPath)) { closedir(dir); findSign(entryPath,sign); } else if((fp = fopen(entryPath,"rb")) { if(isElf(fp)) { if(checkInfected(fp,sign)) printf("%s is infected!\n",entryPath); } } free(entryPath); } closedir(currDir); } char* getFullPath(char* parent,char* child) { char* fullName = malloc(strlen(parent) + strlen(child) + 1); memset(fullName,0,strlen(parent) + strlen(child) + 1); strncpy(fullName,parent,strlen(parent)); strncat(fullName,"/",1); strncat(fullName,child,strlen(child)); return fullName; }
Editor is loading...
Leave a Comment