Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.02.2013, 01:54
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию CopyFile Копирование поверх самого себя

Ребят, вот вспомнил, что лет 5 назад так делал программку - телефонный справочник, состоящий из одного exe-файла... Только уже исходников не сохранилось...
В общем, я каким-то образом записывал в конец этого exe файла из самого себя же... А также было обновление самого себя же - копировал поверх, закрывал и открывал снова...

Пожалуйста, кто-нибудь напомните как это сделать!

Знаю, многие будут говорить, что это в принципе невозможно! Но ведь я -то делал!!! Реально программа работала!
Ответить с цитированием
  #2  
Старый 22.02.2013, 01:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Возможно, вирус называется. Все антивирусники такую программу с г... съедят.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 22.02.2013, 02:20
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Тут вопрос в том, как это всё-таки делается!??? И добавить свою же программу в список исключений не составит труда!
Ответить с цитированием
  #4  
Старый 22.02.2013, 02:33
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Темы такого плана на форуме не обсуждаются. Хочешь хранить в файле смотри в сторону ресурсов.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 22.02.2013, 06:29
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Боюсь схлопотать банку, но на 100% уверен что ТС`у это всё нужно исключительно в мирных, не хакерских целях, чисто для расширения кругозора (вона какой он хороший - телефонный справочник пишет О), а посему пжлст, сильно не бейте :+)
Цитата:
Сообщение от sorockinalex
...вот вспомнил, что лет 5 назад так делал программку - телефонный справочник, состоящий из одного exe-файла...
Такое было возможно и 15 лет назад, как уже заметил УК angvelem, основываясь на принципе выдёргивания данных справочника из ресурсов екзешки. Но это был, так сказать, CD-вариант: новые записи сделать так нельзя. Про это вагоны инфы существует.
Цитата:
...В общем, я каким-то образом записывал в конец этого exe файла из самого себя же...
А может данные хранились в реестре?-О) Что-то дописать к работающему коду невозможно т.к. на время выполнения он "подливается" к swap-файлу, а это значит, что при дефиците свободной оперативки или простоя блок (массив используемых переменных) с данными программы винда сбрасывает в хранилище, а сам код сборки уничтожается из памяти до возобновления процесса, недостающие куски потом считываются из физического файла на диске. Изменение его структуры во время выполнения приведёт к катастрофе, поэтому ося считает это куском файла подкачки, запрещая любые действия с ним. Так что, это всё прогерские байки или фантазии :-)
Цитата:
А также было обновление самого себя же - копировал поверх, закрывал и открывал снова...
Такое можно вытворять или батником (*.bat) почти на ДОСовском уровне (будут некоторые ограничения, типа длинных имён и кодировки, устарело), вот пример, как таким способом удалить самого себя:
Код:
...
var
  BatchFile: TextFile;
  BatchFileName : string;
  TempMem : PChar;
begin
  BatchFileName := changefileext(paramstr(0), '.bat');
  AssignFile(BatchFile, BatchFileName);
  Rewrite(BatchFile);
  Writeln(BatchFile,':try');
  Writeln(BatchFile,'del "' + ParamStr(0) + '"');
  Writeln(BatchFile,'if exist "' + ParamStr(0) + '" goto try');
  Writeln(BatchFile,'del "' + BatchFileName + '"');
  CloseFile(BatchFile);
  GetMem (TempMem,70);
  GetShortPathName (pchar(BatchFileName), TempMem, 70);
  BatchFileName:=TempMem;
  FreeMem(TempMem);
  winexec(Pchar(BatchFileName),sw_hide);

// http://forum.sources.ru
либо с помощью стороннего файла управления содержимым справочника, который будет запускаться при завершении работы, принимать на себя все изменения записей и после "отпускания" основного файла операционкой дописывать к нему новьё. Но к сожалению, "принцип одного окна" здесь невозможен.
Цитата:
...Знаю, многие будут говорить, что это в принципе невозможно! Но ведь я -то делал!!! Реально программа работала!
Ошибаетесь, скажут не многие, а все! Ну и чтобы немного освежилась память, чтоб удалось "вспомнить всё", вот пример добавления в конец файла текста:
Код:
...
var
txt: string;
b: byte;
i: integer;
begin

...

txt:= 'проверка';
with TFileStream.create('Моя софтина', fmOpenWrite or fmShareDenyWrite) do
try
Seek(0, soFromEnd);
for i:=1 to length(txt) do begin b:= Byte(txt[i]);Write(b,1);end;
b:=length(txt);
Write(b, 1);
finally
Free;
end;
end;
А вот как это считывать во время работы:
Код:
...
var
  bn: byte;
  txt: string;
  text: pchar;
begin

...

with TFileStream.create(Application.ExeName, fmOpenRead or fmShareDenyWrite) do
try
Seek(-1, soFromEnd);
Read(bn,1);
Seek(-byte(bn)-1, soFromEnd);
GetMem(text, byte(bn));
Read(text^, byte(bn));
txt:= string(text);
SetLength(txt, byte(bn));
FreeMem(text);
finally 
Free; 
end;
end;
Это только принцип, много добавить так не получится.

Последний раз редактировалось Alegun, 22.02.2013 в 07:30. Причина: Хорошая мысля приходит опосля:)
Ответить с цитированием
  #6  
Старый 22.02.2013, 10:47
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Ё мое, что так все сложно? Можно просто скопировать запускаемый екзешник в папку "темп", запустить его с параметрами и закрыть первую запущенную программу, запущенный с параметрами из "темпа" екзешник допишет что нужно в оригинальный файл, запустит его с параметрами - "типа все ок" и сам закроется. Все, оригинальный файл изменен и работает.

P.S. все современные файрволы не дадут запуститься измененному файлу без разрешения пользователя. Так что не майся фигней и сделай сохранение данных в документах и реестре, как это делают все нормальные программы.
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110

Последний раз редактировалось ~TB~, 22.02.2013 в 10:51.
Ответить с цитированием
  #7  
Старый 22.02.2013, 13:29
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от ~TB~
...Можно просто скопировать запускаемый екзешник в папку "темп", запустить его с параметрами и закрыть первую запущенную программу, запущенный с параметрами из "темпа" екзешник допишет что нужно в оригинальный файл, запустит его с параметрами - "типа все ок" и сам закроется. Все, оригинальный файл изменен и работает.
Мона и так, хотя сути дела это не меняет. Правда две копии оригинала в оперативке, особенно когда они рессурсоёмкие не есть хорошо, да и сложная прога больно получается: несколько сценариев запуска, можно в них запутаться. Я так параметры настроек однажды сохранял - намучился.
Ответить с цитированием
  #8  
Старый 23.02.2013, 01:13
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Блин, что же все такие недоверчивые... Если говорю, что делал как-то - значит так оно и было! Ещё знакомый программер очень сильно удивился этому, даже ему код скидывал. Если найду его, спрошу. ДАвно уже не общаемся с ним...
Ответить с цитированием
  #9  
Старый 23.02.2013, 01:24
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Не верю! Объяска выше. С ДЗО тебя!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025