// вы читаете...

Новости

Заметки о installer. Часть 2



В моей прошлой статье обсуждалась тема написания упаковщика (Packer), теперь же подробно
остановимся на программе, котрая всё спрятанное будет из себя доставать. Но сначала я хотел
бы обосновать своё мнение о личных форматах хранения информации, которое, возможно, было
неправильно понято некоторыми читателями. Когда человек создаёт свой формат хранения
информации, то только он знает как её оттуда достать. Большинство программ (например игровые)
используют свои форматы хранения ресурсов (музыка, спрайты/текстуры, мультики). Быть может,
взломать эти ресурсные файлы легче, так как можно декомпилить/дизассемблить исполняемый файл
и понять, как и что прячет и достаёт программа, но я знаю очень мало людей способных это сделать.
Если же использовать стандартные средства хранения (какой-нибудь архиватор), то любой более или
менее опытный пользователь может посмотреть заголовок файла и по нему найти нужную «открывалку».
Теперь вернёмся к коду пакера. Для удобства я добавил в OnCreate формы следующую строчку:

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit3.Text:=ExtractFilePath(ParamStr(0))+’test.exe’;
end;

Это сделано для удобства использования программы, так как до этого файл «Test.exe» кидался
в последнюю открытую директорию и приходилось постоянно указывать путь. Так же надо добавить
строчку в самый конец Button1Click:

CloseFile(f2);

Ну вот и всё, что качалось пакера. Осталось самое интересное — анпакер. Вот усовершенствованный
код Unpacker’а с последующими комментариями:

program Unpacker;

uses
Classes;

const c=117248;

var mem:TmemoryStream;
i:integer;
done:integer=0;
done1:integer;
f:file;
buf:array[1..2048] of byte;
begin
mem:=TmemoryStream.Create;
mem.LoadFromFile(paramstr(0));
mem.Seek(c,soFromBeginning);
mem.ReadBuffer(i,sizeof(i));
assignfile(f,’temp1′);
rewrite(f,1);
while i>=done+2048 do begin
done1:=mem.Read(buf,sizeof(buf));
blockwrite(f,buf,done1);
done:=done+done1;
end;
if i>done then begin
done1:=mem.Read(buf,i-done);
blockwrite(f,buf,done1);
end;
closefile(f);

done:=0;
mem.ReadBuffer(i,Sizeof(i));
assignfile(f,’temp2′);
rewrite(f,1);
while i>done+2048 do begin

Страницы: 1 2 3

Обсуждене

Отзывов нет на «Заметки о installer. Часть 2»

Ваш отзыв

Рубрики