Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Скрипт для безвозвратного удаления данных |

08.03.2007, 05:17
|
|
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..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|