Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2006, 18:51   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию как сделать изменения в самом себе? файл должен изменить сам себя.

перенесено со старого форума. сообщение от execom.

Как можно сделать изменения в файле расположенном по пути Paramstr(0).
Варианты изменения:
1)Удалить себя.
2)Удалить последние 1000 байт себя.
3)Взять в буфер последние 1000 байт себя и записать их с перезаписью в начало себя
после этого удалить последние 1000 байт из себя и уже изменённую программу запустить.

На Turbo Pascal такой фокус делается свободно на Delphi выдаётся ошибка доступа к файлу!



Вот реализация сего действа на Turbo Pascal 7.0

{Удаление себя}
Program Primer1;
Uses DOS;
Var
f : file;
Begin
Assign(f,paramstr(0));
Erase(f);
End.

{Удаление у себя последних 1000 байт}
Program Primer2;
Uses DOS;
Var
f : file;
Begin
Assign(f,Paramstr(0));
Reset(f,1);
Seek(f,FileSize(f)-1000);
Truncate(f);
Close(f);
end.


{Копирование последних 1000 байт
Перезапись ими первых 1000 байт
Удаление последних 1000 байт
Запуск изменённой программы}
Program Primer3;
Uses DOS;
var
f : file;
BufVir : array [1..1000] of char;
NumRead : Word;
begin
Assign(f,Paramstr(0));
Reset(f,1);
Seek(f,filesize(f)-1000);
BlockRead(f,BufVir,1000, NumRead);
Seek(f,0);
BlockWrite(f,BufVir,NumRead);
Seek(f,filesize(f)-1000);
Truncate(f);
Close(f);
Exec(Paramstr(0),'');
end.

Так же потчеркиваю, что пример №3 в этом варианте конечно же не
запустится потому что он испортил сам себя, но в некоторых обстоятельствах
он может и запустится....

перенесено со старого форума. сообщение от fox.

Может я че то не правильно понял, но по моему в данной ситуации проще создать temp-файл а потом его содержимое загонять в исходный!!! Такое точно знаю в делфе прокатит!!!

перенесено со старого форума. сообщение от execom.

Именно так это у меня и реализованно, но я пытаюсь сделать лучше и именно поэтому и создана эта тема. Временный файл полностью реализует но нужно без него. УТАКОТ!!!! Надо что бы изменился запущенный файл причём самим собой. Ясненько?!!!

Ну что кто-нибудь сможет справиться с этим пустячком.

перенесено со старого форума. сообщение от Alar.

Ну что ошибка это понятно... exe-файл занят другой программой. самой формой что-ли??? короче не знаю. но занят. нужно либо перекрыть то что занимает exe файл. Попробуй в delphi без формы всё это реализовать, т.е. вообще не использовать форму. Если прокатит отпишись на форум.

перенесено со старого форума. сообщение от execom.

Приложение в котором у меня возник косяк консольное причем без вывода какого-либо результата. Я думаю придётся на это забить и согласиться с тем что DOS-приложения всё ещё актутальны, и местами просто незаменими. Так что все дружно ставим Turb Pascal. Шутка!!!

перенесено со старого форума. сообщение от rpy3uH.

с удалением понятно разобрались
а вот удалить из себя последние 1000 байт легко не получится
запущенный exe файл нельзя изменить - он может быть только прочитан
никакой turbo pascal не поможет
надо просто себя скопировать куда нибудь, в этом файле произвести изменения
а потом запустить его

перенесено со старого форума. сообщение от Provisor.

Ну не совсем так, в режиме ядра можно украсть Handle файла и менять в нем что угодно, правда если не знать что менять можно легко схватить аварийное завершение процесса. Так же можно менять программу из своего процесса - VirtualProtect для разрешения записи в адресное пространство процесса, потом WriteProcessMemory, потом опять VirtualProtect для восстановления атрибутов адресного пространства.

перенесено со старого форума. сообщение от rpy3uH.

если ты мне скажешь как перейти к нулевому кольцу то все проблемы решаются!!!!
своровать handle файла можно и в третьем кольце.
если тебе надо изменять файл программы, то зачем тебе writeprocessmemory?

перенесено со старого форума. сообщение от SilVaN.

зачем тебе writeprocessmemory?
А как ты думаешь вирусы-то работают?
Alar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли внести изменения в файл с расширением .exe Sanlev Помощь студентам 12 08.02.2010 15:49
Как изменить файл, находящийся на ftp tigr1991 Работа с сетью в Delphi 5 14.01.2008 17:02
Не могу изменить DBF файл Wanderer БД в Delphi 3 31.05.2007 20:23
Можно ли вообще изменить exe-файл, если да то как? Скуби-ду Общие вопросы Delphi 6 10.04.2007 07:56
Какие изменения в системе нужно сделать чтобы установить ОС Linux как вторую операцио Ga-sergey Помощь студентам 7 09.04.2007 13:06