Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инсталлятор 
:(
    Опции темы
TDM
Дата 5.2.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.2.2006
Где: SPB

Репутация: нет
Всего: нет



Люди, объясните подробно, как сохранять любой файл в .exe. Открывать его и сохранять на диск???

PM MAIL ICQ   Вверх
SoWa
Дата 5.2.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Либо создать массив байт вручную, потом восстанавливать. Вот код :
Код

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Интегрирование в EXE-шник других файлов

Процедура из указанного файла (FileName) создаёт unit в котором объявлен,
заполненный побайтово, массив и процедура сохранения этого массива обратно
в файл. Таким образом можно включить в один EXE-шник множество других
файлов (dll, ocx, dbf и т.п.) - прикрепить их как unit-ы. Фактически,
после сжатия EXE-шника программами типа UPX, получаем довольно компактный
файл, который можно использовать в качестве дистрибутива, например.

Зависимости: SysUtils, System
Автор:       Delirium
Copyright:   Delirium (Master BRAIN)
Дата:        22 мая 2002 г.
***************************************************** }

procedure FileToPas(FileName: string);
var
  BF: file of Byte;
  F: TextFile;
  P, N, S: string;
  BFSize: integer;
  BBB: Byte;
begin
  AssignFile(BF, FileName);
  Reset(BF);
  BFSize := FileSize(BF);
  P := ExtractFilePath(FileName);
  N := ExtractFileName(FileName);
  N := ChangeFileExt(N, '.PAS');
  AssignFile(F, N);
  ReWrite(F);
  Writeln(F, '(* Generated by Master BRAIN (C) 2002 *)');
  Writeln(F, 'unit ' + ChangeFileExt(N, '') + ';');
  Writeln(F);
  Writeln(F, 'interface');
  Writeln(F);
  Writeln(F, 'const FileSize:integer=' + IntToStr(BFSize) + ';');
  Writeln(F, 'FileData:array[0..' + IntToStr(BFSize - 1) + '] of Byte=');
  Writeln(F, '(');
  while not Eof(BF) do
  begin
    S := '';
    while (not Eof(BF)) and (Length(S) < 80) do
    begin
      Read(BF, BBB);
      S := S + IntToStr(BBB) + ',';
    end;
    if Eof(BF) then
      Delete(S, Length(S), 1);
    Writeln(F, S);
  end;
  CloseFile(BF);
  Writeln(F, ');');
  Writeln(F);
  Writeln(F, 'procedure SaveToFile(FileName:String);');
  Writeln(F);
  Writeln(F, 'implementation');
  Writeln(F);
  Writeln(F, 'procedure SaveToFile(FileName:String);');
  Writeln(F, 'var F:File of Byte;');
  Writeln(F, ' i:integer;');
  Writeln(F, 'begin');
  Writeln(F, 'AssignFile(F,FileName);');
  Writeln(F, 'ReWrite(F);');
  Writeln(F, 'for i:=0 to FileSize-1 do Write(F,FileData[i]);');
  Writeln(F, 'CloseFile(F);');
  Writeln(F, 'end;');
  Writeln(F);
  Writeln(F, 'end.');
  CloseFile(F);
end;



Либо искать спец. компоненты.
Добавлено @ 16:59
Вот еще:
Код

Эта материал открывает цикл статей для юных программеров (и хакеров :)) интересующихся скрытием своей информации (а так же поиском интересной "чужой" :)). Не секрет что у тебя есть много того, что ты бы не хотел показывать ФСБ, друзьям, Васе Пупкину, и прочей "мировой общественности". Конечно можно использовать запароленные архивы и прочую лабуду (например твой сосед может не увидеть скрытый файл на расшареном диске :), но если задуматься, то станет ясно что, чем больше людей использует одинаковые системы защиты, тем быстрее улучшаются методы взлома этих систем (сорри за тавтологию). 

У тебя ёще не появилось желание написать средство для защиты своей ценнейшей инфы (исходников, рефератов, фоток :) и т.д и т.п.) от посторонних глаз. Ведь если ты что-то написал сам, то только ТЫ знаешь, КАК ОНО ПРЯЧЕТСЯ И ДОСТАЁТСЯ. Наши первые программы будут полезны как программерам, так и хакерам. Это будут Пакер и Анпакер (Packer & Unpacker). В этой статье я опишу только пакер (темы анпакера будут затронуты в следующих статьях). Писать мы его будем на всенародно любимом Delphi (у меня шестая версия, но работать должно и на предыдущих). Суть пакера заключается в следующем: в конец некоего экзешника (.exe) дописываем размер файла который мы потом будем из него доставать, далее следует сам файл, потом размер второго файла, и, собственно, второй. Сразу скажу что под "неким экзешником" я подразумеваю анпакер. 

Ну, что? Готов? Если да то запускай Делфи и создавай новый проект (File/New/Application). Первым делом назови как-нибудь форму (Caption) (пусть будет что-то типа "Super-Puper-Mega- Packer"). Далее размести на ней OpenDialog и SaveDialog (вкладка Dialogs). Давай сразу посмотрим на настройки OpenDialog'a. Для этого открой Options в Object Inspector'е и сделай поля ofPathMastExist и ofFileMastExist равными True. Всё это нужно для того, чтобы файлы которые мы будем прятать реально существовали. В SaveDialog'е желательно сделать поле ofPathMastExist равным True. Так же размести на форме кнопку (Button) с грозной надписью "GO!", 3 Edit'а (первым двум Edit'aм в поле ReadOnly надо поставить True) и 3 SpeedButton'а. У SpeedButton1 сделай поле Tag равным 1 (это понадобится в дальнейшем). Теперь можно занятся дизайном нашего пакера (это не должно вызвать особых проблем :)). Не забудь только загрузить рисунки в SpeedButton'ы. Отличные пикчурсы можно взять (если у тебя стоит полная версия Delphi) из \Program Files\Common Files\Borland Shared\Images\Buttons. Я нацепил на SpeedButton1 и SpeedButton2 Fileopen.bmp, а на SpeedButton3 - Filesave.bmp. 

А теперь переходим к самому интересному - к кодингу. Для начала сделаем обработчик SpeedButton1'а OnClick и укажем его же в SpeedButton2. В нем напишем следующий код: 

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    if (Sender as TSpeedButton).Tag = 1 then
      Edit1.Text := OpenDialog1.FileName
    else
      Edit2.Text := OpenDialog1.FileName;
end;
Если пользователь в OpenDialog'е что-то выбрал, то посмотрим какой из SpeedButton'ов он нажал и присвоим соответствующему Edit'у новое значение. Можно было бы сделать два OnClick'a (у каждого SpeedButton'а свой) и написать что-то типа: 

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    Edit1.Text := OpenDialog1.FileName;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    Edit2.Text := OpenDialog1.FileName;
end;
Но мне это кажется неспортивным. Да и откомпилированная прога будет жирнее на пару байт :). Далее обратим свой взор на SpeedButton3. Сделаем обработчик OnClick в котором: 

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    Edit3.Text := SaveDialog1.FileName;
end;
Ну а теперь перейдём к самой интересной кнопке - "GO!". В её OnClick'е будет сам упаковщик: 

procedure TForm1.Button1Click(Sender: TObject);
var
  f, f2: file;
  buf: array[1..1024] of byte;
  done: integer;
begin
  if not ((FileExists(Edit1.Text)) or (FileExists(Edit2.Text))) then
  begin
    ShowMessage('Неправильно указан путь к файлу');
    Exit;
  end;
  if not FileExists(ExtractFilePath((Application.ExeName)) + 'Unpacker.exe')
    then
  begin
    ShowMessage('Не могу найти Unpacker.exe');
    Exit;
  end;
  AssignFile(f, ExtractFilePath((Application.ExeName)) + 'Unpacker.exe');
  AssignFile(f2, Edit3.Text);
  Reset(f, 1);
  Rewrite(f2, 1);
  while not eof(f) do
  begin
    blockread(f, buf, sizeof(buf), done);
    blockwrite(f2, buf, done);
  end;
  CloseFile(f);

  AssignFile(f, Edit1.Text);
  Reset(f, 1);
  done := FileSize(f);
  blockwrite(f2, done, 4);
  while not eof(f) do
  begin
    blockread(f, buf, sizeof(buf), done);
    blockwrite(f2, buf, done);
  end;
  CloseFile(f);

  AssignFile(f, Edit2.Text);
  Reset(f, 1);
  done := FileSize(f);
  blockwrite(f2, done, 4);
  while not eof(f) do
  begin
    blockread(f, buf, sizeof(buf), done);
    blockwrite(f2, buf, done);
  end;
  CloseFile(f);
end;
Тут всё совсем просто :). Для начала проверяем все ли необходимые для упаковки файлы присутствуют. Далее создаем файл указанный в Edit3.Text и записываем в него распаковщик, размер первого файла, файл, размер второго и второй соответственно (какой-то бутерброд получается :)). Вот и всё! В результате получается .exe который может достать из себя эти 2 файла. Но сейчас это работать не будет, так как нет Unpacker.exe. Его мы напишем в следующий раз. Хотя для любопытных я приведу листинг альфа версии 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, $4);
  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, 4);
  assignfile(f, 'temp2');
  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);

  mem.Free;
end.




--------------------
Всем добра smile
PM MAIL ICQ   Вверх
TDM
Дата 5.2.2006, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.2.2006
Где: SPB

Репутация: нет
Всего: нет



Sowa Спасибо. Сохранить получилось, а как открать файл который в exe? Например звук.
PM MAIL ICQ   Вверх
Guedda
Дата 6.2.2006, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Пользуйся ресурсами. Не нужно этих выделок...
А про ресурсы ты найдешь 100 тем + 1


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
SoWa
Дата 6.2.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Цитата(TDM @ 5.2.2006, 22:10 Найти цитируемый пост)

а как открать файл который в exe? Например звук.

Действительно, пользуйся ресурсами или распаковывай звук в темповую директорию и оттуда играй.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.