?
Also es ist ein Daten Shredder Program... als Methode habe ich mal Gutmann dazugepack, die anderen sehen gleich aus bis auf die Methode.
...
...
...
wprintf_s(L"Nach dem Vorgang sind die Daten nicht mehr wiederherstellbar!\nWollen Sie die Daten wirklich überschreiben? (y/n):",szName);
scanf("%[n-y]c",&cny);
puts("");
if(cny == 'y') {
cls();
/* Init time */
start = clock();
/* Get file info attribut */
_wstat(szPath ,&attr1);
/* File */
if((attr1.st_mode & S_IFREG) || (attr1.st_mode & S_IFCHR)) {
/* Set file attribute */
SetFileAttributes(szPath ,FILE_ATTRIBUTE_NORMAL);
/* File delete routine */
FileDel(szPath, &modnr);
/* Print logfile */
PrintLog(L"log.dat");
wprintf(L"\n\nErase complete!\n");
/* Directory */
} else if(attr1.st_mode & S_IFDIR) {
/* Set file attribute */
SetFileAttributes(szPath ,FILE_ATTRIBUTE_NORMAL);
/* Recursiv directory delete routine */
RecDirecDel(szPath ,&modnr);
/* Remove main directory */
if( RemoveDirectory(szPath) == 0) {
wsprintf(&logbuf[0] ,L"\nVerzeichnis > \"%s\" konnte nicht entfernt werden.\n" ,szPath);
WriteLog(L"log.dat" ,logbuf);
}
/* Printf logfile */
PrintLog(L"log.dat");
wprintf(L"\n\nErase complete!\n");
}
end = clock();
printf_s("Time : %.2f Sec\n\n", (float)(end - start) / CLOCKS_PER_SEC);
}
} else {
/* Mod deepfs */
rc = modDEEPfs();
if(rc != 0) {
printf_s("\nFalsche Eingabe - return [PRESS ENTER]\n");
fflush(stdin);
getchar();
}
}
wprintf(L"Zurück zum Hauptmenü [PRESS ENTER]");
fflush(stdin);
getchar();
}
return 0;
}
int FileDel(wchar_t *name, int *modnrp)
{
wchar_t logbuf[1000];
__int64 size = 0;
int rc = 0;
int fh = 0;
char statbuf[256];
memset(statbuf ,' ' ,256);
statbuf[255] = '\0';
fh = _wopen(&name[0], O_RDWR | O_BINARY);
if(fh == -1) {
wsprintf(&logbuf[0] ,L"\nDatei > \"%s\" kann nicht geöffnet werden...\n" ,name);
WriteLog(L"log.dat" ,logbuf);
return 1;
}
_lseeki64(fh, 0,SEEK_END);
size = _telli64(fh);
_lseeki64(fh, 0,SEEK_END);
_close(fh);
setCursor(4 ,0);
printf_s("%s",statbuf);
setCursor(4 ,0);
wprintf(L"File > \"%s\"\n",name);
if(*modnrp == 1) {
setCursor(1,0);
printf_s(">Gutmann Shredder Algorithmus");
rc = modGTM(name ,&size);
}
if(*modnrp == 2) {
setCursor(1,0);
printf_s(">BRUCE SCHNEIER Shredder Algorithmus");
rc = modBRS(name ,&size);
}
if(*modnrp == 3) {
setCursor(1,0);
printf_s(">Standard 5220.22-M des US-Verteidigungsministeriums");
rc = modUSSTD(name ,&size);
}
if(*modnrp == 4) {
setCursor(1,0);
printf_s(">LB Shreeder Algorithmus");
rc = modLB(name ,&size);
}
if(*modnrp == 5) {
setCursor(1,0);
printf_s(">Fast Methode");
rc = modFAST(name ,&size);
}
if( rc ) {
wsprintf(&logbuf[0] ,L"\nDatei > \"%s\" konnte nicht spezifisch überschriben oder gelöscht werden. - %lli Byte\n" ,name ,size);
WriteLog(L"log.dat" ,logbuf);
return 1;
}
return 0;
}
int RecDirecDel(wchar_t *name, int *modenrp)
{
WIN32_FIND_DATA data;
HANDLE h = NULL;
struct _stat64i32 attr = {0};
wchar_t tmp[1000];
wchar_t tmp1[1000];
wchar_t logbuf[1000];
lstrcpy(&tmp1[0] ,&name[0]);
lstrcat(tmp1 ,L"\\*");
h = FindFirstFile(tmp1, &data);
do
{
if( !((! wcscmp(data.cFileName ,L".")) || (! wcscmp(data.cFileName ,L".."))) ) {
lstrcpy(&tmp[0] ,&name[0]);
lstrcat(tmp ,L"\\");
lstrcat(tmp, data.cFileName);
_wstat(tmp, &attr);
if( attr.st_mode & S_IFDIR ) {
/* Set file attribute */
SetFileAttributes(tmp ,FILE_ATTRIBUTE_NORMAL);
/* Rekursive directory delete routine */
RecDirecDel(tmp, modenrp);
/* Directory delete */
if( RemoveDirectory(tmp) == 0) {
wsprintf(&logbuf[0] ,L"\nVerzeichnis > \"%s\" konnte nicht entfernt werden.\n" ,data.cFileName);
WriteLog(L"log.dat" ,logbuf);
}
}else if((attr.st_mode & S_IFREG) || (attr.st_mode & S_IFCHR)) {
/* Set file attribute */
SetFileAttributes(tmp ,FILE_ATTRIBUTE_NORMAL);
/* File delete */
FileDel(tmp, modenrp);
}
}
}
while( FindNextFile(h ,&data) );
FindClose(h);
return 0;
}
void ren_rem(wchar_t *name)
{
wchar_t re_name[41];
int rc2 = 0 ,i = 0;
/* Build pseudo random name */
for(i=0; i < 40 ;i++) {
rc2 = rand()%122;
if( (rc2 <= 97) ) {
--i;
} else {
re_name[i] = (wchar_t)rc2;
}
}
re_name[i] = L'\0';
/* Rename */
_wrename(name ,re_name);
/* Remove file */
_wremove(re_name);
}
int modGTM(wchar_t *fname, __int64 *fsize)
{
unsigned int i, x;
unsigned char ret_val = 0;
int fh = 0;
unsigned int res = 0;
__int64 blockcount = 0;
unsigned char PATTERNBLOCK[BSIZE];
fh = _wopen(&fname[0], O_WRONLY | O_BINARY);
if(fh == -1){
return 1;
}
blockcount = (__int64)(*fsize / BSIZE);
res = (unsigned int)(*fsize % BSIZE);
for(x=0; x < GUTMANN; x++) {
setCursor(3 ,0);
_lseeki64(fh ,0 ,SEEK_SET);
/* Get random pattern */
ret_val = rand_pattern(x);
printf_s("Pattern: 0x%.2X : ",ret_val);
putBits(ret_val);
puts("");
/* Build pattern-block */
for(i=0;i<BSIZE;i++) {
PATTERNBLOCK[i] = ret_val;
}
for(i=0; i < blockcount ; i++) {
_write(fh ,PATTERNBLOCK ,BSIZE);
}
if(res) {
_write(fh ,PATTERNBLOCK ,res);
}
}
_close(fh);
/* Rename file */
ren_rem(fname);
return 0;
}