![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать чтобы один exe-шник мог ;создавать другой ;exe [D6, Win95/98, WinME, NT4, Win2k]
Serega_spb © (2002-09-02 10:07:00)Как сделать чтобы один exe-шник мог создавать и редактировать
другой exe-шник.
Объясняю на примерах:
Наверное все видели программы-склеиватели
(джойнеры),такая программа запихивает несколько файлов в себя и делает новый exe-файл,при запуске этого нового exe запускаются и те файлы,которые были в него засунуты.
Тоже самое с троянскими прграммами, у которых есть редактор сервера(Можно создать новый или отредактировать exe-файл сервера)
Та же история с архиваторами(создание sfx-архивов)
Надеюсь вы поняли ,что я имею в виду...
Надеюсь получить ответ,желательно с примерами,возможно он займет
много места,тогда отсылайте: Seregaspb@yandex.ru
alena.svt (2002-09-03 05:50:00) [1]Вот он простенький пример
Записывает число в DLL а по следущему запуску его показывает.
Далее его можно переписать по новой.
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TForm1 = class(TForm)
Edit1: TEdit;
StaticText1: TStaticText;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
NDLL:integer;
function WriteToResource(N:integer):boolean;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.WriteToResource(N:integer):boolean;
var
hLib:THandle;
begin
hLib:=BeginUpdateResource("MyDLL.dll",false);
Result:=UpdateResource(hLib,RT_RCDATA,"MYFILE",0,@N,4);
EndUpdateResource(hLib,false);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
hLib:HINST;
hFile,hN:THandle;
p:pointer;
begin
//грузим либу:
hLib:=LoadLibrary("MyDLL.dll");
if hLib<>0 then
begin
//находим pесурс в ней
hFile:=FindResource(hLib,"MYFILE",RT_RCDATA);
if hFile<>0 then
begin
//загружаем его
try
hN:=LoadResource(hLib,hFile);
//вытаскиваем из него число
p:=LockResource(hN);
CopyMemory(@NDLL,p,4);
Edit1.Text:=IntToStr(NDLL);
except
ShowMessage("Библиотека повреждена!!!")
end;
end else
begin
ShowMessage("Не найден ресурс. Будет записано значение 0.");
NDLL:=0;
if not WriteToResource(NDLL) then ShowMessage("Не удаётся записать число в библиотеку.");;
end;
//выгружаем либу, чтобы можно было в неё писать
FreeLibrary(hLib);
end else ShowMessage("Библиотека не найдена!!!");
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
try
NDLL:=StrToInt(Edit1.Text);
except
ShowMessage("Введённая строка не является целым числом. Запись невозможна");
Exit;
end;
if not WriteToResource(NDLL) then ShowMessage("Не удалось записать данные!!!");
end;
end.
Это и есть пример той WriteToDll.
Естественно MyDll.dll пусть у вас будет MyExe.exe
Ну а дальше Help + Поиски и сразу говорю путь не легкий.
alena.svt (2002-09-03 05:19:00) [2]Если очень надо то можно и в Exe"шнике.
Запаковываете его в ресурсы. Теперь допустим он у вас будет
File>New юзер указывает место на диске туда вы его и распаковываете. Далее работаете с ним как с обыкновенной dll.
Начните изучение с Rexplore.exe в Demos. А потом поищите инфу как писать в PE файлы как читать c них. Инфы по этому поводу море.
Где то даже помойму в кладовке была демка WriteToDll на ее очень легком примере(а там код в три строчки)можно построить даже своего рода базу данных для хранения любой инфы в любых форматах(но для этого почитать надо и поискать много). Так как не для кого не секрет что Dll позволяет хранить все что душе угодно.
С Ехе работа ничем не отличается лишьбы он не был сжат чем то вроде AsPack"a или Upx"a.
Я делала своего рода миниБД из Exe"шника. Работа его была похожа на что то вроде TheBat"овской персональной книги данных. И честно говоря давольно таки интересно получилось. Никакой BDE. Хранил все и картинки и пароли и адреса, плюс всегда можно было удалить ресурс и записать. Только чтоб по нему не прыгали я его сначала компрессом сжимала, при начале работы разжимала в System32 чтоб не видно было работы.,а по завершению в обратном порядке. К сожалению я его не сохранила. Так бы с удовольствием поделилась. Ну удачи.
ЮЮ (2002-09-03 04:19:00) [3]>Просто в программе пользователь устанавливает или убирает какие-нибудь определённые свойства и нужно создать exe"шник с этими включёнными свойствами.
А кроме как в exe-шнике их и сохранить негде?
Alessio18 (2002-09-02 22:23:00) [4]>Это как это ?
>Нажал пимпочку - создалась Бухгалтерия, нажал другую - Склад, >третью - Торговля, а вот еще галочку поставил - так в SQL->варианте.
>Так примерно ?
Что за примитивизм! Просто в программе пользователь устанавливает или убирает какие-нибудь определённые свойства и нужно создать exe"шник с этими включёнными свойствами.
Jeer (2002-09-02 21:36:00) [5]>Мне, к примеру, нужно создавать отдельные exe"шники с >установленными пользователем
Это как это ?
Нажал пимпочку - создалась Бухгалтерия, нажал другую - Склад, третью - Торговля, а вот еще галочку поставил - так в SQL-варианте.
Так примерно ?
Jeer (2002-09-02 21:15:00) [6]>Надеюсь получить ответ,желательно с примерами,возможно он займет
>много места,тогда отсылайте: Seregaspb@yandex.ru
Конечно, сейчас все тебе сразу и отошлют и исходники и bin-файлы, да еще для разных платформ.
P.S.
Если ты совсем начинающий - от Подгорецкого верный совет дан.
Когда станешь не совсем начинающим, поймешь, что тебе это совсем не надо.
Alessio18 (2002-09-02 21:14:00) [7]Это проблема, кстати, давно набила многим программистам оскомину. Так что, пожалуйста, сделайте доброе дело и ответьте на вопрос! Мне, к примеру, нужно создавать отдельные exe"шники с установленными пользователем свойствами (не троян).
Anatoly Podgoretsky (2002-09-02 21:05:00) [8]А может тогда не надо с этого, лучше для начало что нибудь попроще
Serega_spb (2002-09-02 20:36:00) [9]Я еще начинающий(совсем начинающий),можно поподробнее.
alena.svt (2002-09-02 11:06:00) [10]Ну и че?
Создай exe запакуй в ресурсы еще один ехе При запуске вытаскивай его из ресурсов и работай с ним как душе угодно можно даже как с библиотекой.