ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Скрипт для безвозвратного удаления данных
  #1  
Старый 08.03.2007, 05:17
Аватар для Digimortal
Digimortal
Banned
Регистрация: 22.08.2006
Сообщений: 608
Провел на форуме:
6144796

Репутация: 1095


По умолчанию Скрипт для безвозвратного удаления данных

пример скрипта на perl, служащего для безвозвратного удаления файлов (без возможности восстановления спец. софтом) с жесткого диска.. Есть возможность использования 3х алгоритмов удаления; удалять отдельные файлы или полностью содержимое директорий..
Код:
#!/usr/bin/perl -w

use strict;

my $file = shift || usage();

if ($file =~ /^\'/)
{
	while ($file !~ /\'$/ && @ARGV)
	{
		$file .= ' '; 
		$file .= shift;
	} 
	$file =~ s/^\'//;
	$file =~ s/\'$//;
}

my $algo = shift || 'visr';
my $mode = shift || 0;

my ($f, $rand, @size);

$file =~ /[\/\\]$/ ? delete_dir($file) : wipe($file);


sub delete_dir

{
	my $dir = shift;
	
	my @files = getfiles($dir, 0);	 
	wipe("$dir/$_") foreach (@files);
	
	my @dirs  = getfiles($dir, 1);
	delete_dir ("$dir/$_") foreach (@dirs);
	
	print "Directory $dir deleted..\n" if rmdir($dir) or print "Can't delete directory $dir\n";
}


sub getfiles

{
	my ($dir, $flag, $line, @dirlist, @res_mas, @dir_mas) = @_;
	
	opendir my $d, "$dir";
	@dirlist = readdir $d;
	
	foreach my $line(@dirlist)
	{
		push @res_mas, $line if (!-d "$dir/$line" && $line ne '.' && $line ne '..' && !$flag);
		push @dir_mas, $line if ( -d "$dir/$line" && $line ne '.' && $line ne '..' && $flag);
	}
	
	closedir $d;
	
	return @res_mas if !$flag;
	return @dir_mas if $flag;
}


sub wipe

{
	my $file = shift;

	open $f, "+<", $file or exit print "Can't delete $file";
	
	binmode $f;
	@size = stat $f;
	my $t = time;

	open $rand, "<", '/dev/urandom' or die "\n\tCan\'t open /dev/urandom\n" if $mode;

	if ($algo eq 'visr') { visr() }
	elsif ($algo eq 'bs') { bs() }
	elsif ($algo eq 'pg') { pg() }
	else { usage() }
	
	close $rand if $mode;
	close $f;

	unlink $file;
	$t = time-$t;
	
	print "File $file deleted in $t seconds..\n";
}


sub usage

{ 
	print << 'HELL';

			The Mainest Evil of Runet
	 _  _     _ _ _  __     _      _   _
	| || |___| | | |/ /_ _ (_)__ _| |_| |_ ___
	| __ / -_) | | . <| . \| / _. | . \  _(_-<
	|_||_\___|_|_|_|\_\_||_|_\__. |_||_\__/__/
            hellknights.void.ru  |___/   .0x48k.
            digimortal.0x48k.cc        .Digimortal.
	
	   Tool: DiWiper.pl v.0.4

	  Usage: perl diwiper.pl <file/dir> [algo] [mode]
	  	  
	Options: 	                   
	   algo: visr - algorithm VISR  (default)
		 bs   - Bruce Shneier's algorithm
		 pg   - Peter Gutmann's algorithm
	   mode: 0    - use rand()      (default)
	   	 1    - use /dev/urandom
	   	
HELL

	exit;
}


sub fill

{
	my $val = shift;
	seek $f, 0, 0;
	print $f $val for (1..$size[7]);
}


sub fill_rand

{
	seek $f, 0, 0;
	for (1..$size[7])
	{
		print $f getc $rand if $mode;
		print $f chr rand 256 if $mode==0;
	}
}


sub visr

{
	for (1..3)
	{
		fill ("\x00");
		fill ("\xFF");
	}
	fill ("\xAA");
}


sub bs

{
	fill ("\xFF");
	fill ("\x00");
	fill_rand() for (3..7);
}


sub pg

{
	fill_rand() for (1..4);
	
	my @val =( "\x55", "\xAA", "\x92", 
		   "\x49", "\x24", "\x00", 
		   "\x11", "\x22", "\x33", 
		   "\x44", "\x55", "\x66", 
		   "\x77", "\x88", "\x99", 
		   "\xAA", "\xBB", "\xCC", 
		   "\xDD", "\xEE", "\xFF", 
		   "\x55", "\xAA", "\x92", 
		   "\x00", "\x49", "\x24" );
      		
	fill ($val[$_]) for (0..$#val);
	fill_rand() for (32..35);
}


# thnx 2 ShadOS за то, что подкинул идейку этого скриптика ;)
# & thnx 2 KSURi за "технический аудит" моего perl-кода =)
# eof..
для удаления папок/каталогов следует добавить в конец их имени "\" или "/", если есть пробелы в значении параметра - то обрамить одинарными кавычками.. например:
perl diwiper.pl 'c:\Documents and Settings\user\123\' bs
удалит безвозвратно алгоритмом Брюса Шнайера все файлы, содержащиеся в директории 123 и ее саму..

з.ы. юзайте аккуратно, ато удалите чего лишнего =))

Последний раз редактировалось Digimortal; 11.03.2007 в 21:41..
 
Ответить с цитированием

  #2  
Старый 11.03.2007, 22:19
Аватар для ShadOS
ShadOS
ы
Регистрация: 11.02.2007
Сообщений: 750
Провел на форуме:
1347723

Репутация: 1477


Отправить сообщение для ShadOS с помощью ICQ
По умолчанию

digi, молодец! Это скрипт ведь и под никсами работает! А оффтоперам жирные минусы поноставить надо!
__________________
..когда же кто-нибудь выпустит MD5(Unix) брутер на GPU.... жду....
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват данных, кто, где и как? GreenBear Чужие Статьи 1 16.12.2006 16:43
Словарь Java-терминов foreva Чужие Статьи 0 08.02.2005 16:28
Что ломать? Almight Чаты 3 09.02.2004 18:48



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ