PDA

Просмотр полной версии : Вопрос о контрольной сумме


cyber_xz
28.09.2009, 13:18
Кто может помочь:есть 10к одинаковых файлов с разными именами.Нужна программа\скрипт которая добавит в каждый файл рандомный кусок мусорного кода,чтобы контрольные суммы были разные.Как возможно реализовать такое??запись версион инфо или иконок влияет на CRC?Заранее спасибо

slesh
28.09.2009, 15:47
если это exe или dll файлы то любое изменение в файле повлияет на CRC
если отдельно её вычислять. А если юзать crc в PE заголовке то не все компиляторы её заполняют и она никем не проверяется.
А вообще достаточно будет в конец файла дописать 512 байт - мусора.
и эже всё отлично будет. за исключеним случая если прога проверяет свою CRC

s0l_ir0n
28.09.2009, 15:53
в большинстве случаев безопасно дописывать в конец файла нули, если это ПЕ файлы, то можно вообще все что угодно в конец пихать оно будут считаться оверлеем, т.к. вне секций. А вот если это какие-нибудь архивы или еще что-нибудь с самопроверкой чексуммы, как сказал Slash, то тут сложней...

cyber_xz
28.09.2009, 16:03
В принципе я понял,можете пример кода привести,или написать софт за монетку??Просто никогда не занимался таким,а тут нужно срочно

slesh
28.09.2009, 16:26
обыная консольная команда.
copy /b file.exe + file_musor.txt new.exe
осталось тока сгенерить мусорные текстовые файлы.

cyber_xz
28.09.2009, 16:30
Спасибо,сейчас буду пробовать.Я просто не знал команду как вообще дописать что либо в середину файла.

Kaimi
28.09.2009, 16:34
Должно работать, если я не накосячил

use warnings;

#Директория
my $dir = '.';
#Расширения обрабатываемых файлов
my @ext = qw(txt);

$| = 1;
my %ext;
$ext{$_} = 1 for @ext;

opendir(my $hn, $dir) || die "Error opening $dir - $!\n";
for my $file(readdir $hn)
{
my ($prefix, $ext) = ($file =~ /^(.*)\.(.*)$/);
if(defined $ext{$ext})
{
print "Processing $file\n";
open(F, ">>$file") || die "Error opening $file - $!\n";
binmode F;
print F rand 1000000;
close F;
}
}
closedir $hn;