![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Ребят, вот вспомнил, что лет 5 назад так делал программку - телефонный справочник, состоящий из одного exe-файла... Только уже исходников не сохранилось...
В общем, я каким-то образом записывал в конец этого exe файла из самого себя же... А также было обновление самого себя же - копировал поверх, закрывал и открывал снова... Пожалуйста, кто-нибудь напомните как это сделать! Знаю, многие будут говорить, что это в принципе невозможно! Но ведь я -то делал!!! Реально программа работала! |
|
#2
|
||||
|
||||
|
Возможно, вирус называется. Все антивирусники такую программу с г... съедят.
|
|
#3
|
|||
|
|||
|
Тут вопрос в том, как это всё-таки делается!??? И добавить свою же программу в список исключений не составит труда!
|
|
#4
|
||||
|
||||
|
Темы такого плана на форуме не обсуждаются. Хочешь хранить в файле смотри в сторону ресурсов.
|
|
#5
|
||||
|
||||
|
Боюсь схлопотать банку, но на 100% уверен что ТС`у это всё нужно исключительно в мирных, не хакерских целях, чисто для расширения кругозора (вона какой он хороший - телефонный справочник пишет О), а посему пжлст, сильно не бейте :+)
Цитата:
Цитата:
Цитата:
Код:
... 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
|
||||
|
||||
|
Ё мое, что так все сложно? Можно просто скопировать запускаемый екзешник в папку "темп", запустить его с параметрами и закрыть первую запущенную программу, запущенный с параметрами из "темпа" екзешник допишет что нужно в оригинальный файл, запустит его с параметрами - "типа все ок" и сам закроется. Все, оригинальный файл изменен и работает.
P.S. все современные файрволы не дадут запуститься измененному файлу без разрешения пользователя. Так что не майся фигней и сделай сохранение данных в документах и реестре, как это делают все нормальные программы. Последний раз редактировалось ~TB~, 22.02.2013 в 10:51. |
|
#7
|
||||
|
||||
|
Цитата:
|
|
#8
|
|||
|
|||
|
Блин, что же все такие недоверчивые... Если говорю, что делал как-то - значит так оно и было! Ещё знакомый программер очень сильно удивился этому, даже ему код скидывал. Если найду его, спрошу. ДАвно уже не общаемся с ним...
|
|
#9
|
||||
|
||||
|
Не верю! Объяска выше. С ДЗО тебя!
|