![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,630
|
![]()
перенесено со старого форума. сообщение от 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? А как ты думаешь вирусы-то работают? |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли внести изменения в файл с расширением .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 |