Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 832
1

Удаление самого себя во время исполнения

24.05.2017, 04:41. Просмотров 3625. Ответов 26
Метки нет (Все метки)

Всем привет.
Как программа может удалить саму себя во время исполнения без закрытия?

Как я думаю (теоретически), можно затереть место на жестком диске, где находится программа без стандартных команд удаления, где есть условия, что файл должен быть "свободен".
С этим мне в ассемблер?

Добавлено через 54 минуты
Или на c++ есть альтернатива?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2017, 04:41
Ответы с готовыми решениями:

Как можно удалить или очистить тело макроса после его исполнения из самого себя?
Скажите пожалуйста! Как можно удалить или очистить тело макроса после его исполнения из самого себя?

Удаление файлом самого себя
Может .exe удалить самого себя и как это сделать в VS15?

Удаление самого себя после выполнения
ребят прошу помидорками не кидатся первый мой мессадж если что прост опоправьте мня вопрос ...

Как задать программе время исполнения и время закрытия?
Подскажите пожалуйста как можно задать время исполнения и время закрытия программы допустим нужно...

26
Модератор
3319 / 2106 / 337
Регистрация: 13.01.2012
Сообщений: 8,178
24.05.2017, 09:50 2
ziqp, это сделать нельзя, при запуске ехе отображается в память - шлепнуть его на диске не выйдет
0
Эксперт C
25078 / 15582 / 3331
Регистрация: 24.12.2010
Сообщений: 33,772
24.05.2017, 11:04 3
ziqp, Для чего вам это нужно? Не для автообновления ли? Тогда есть такой вариант. Переименовывайте программу (это можно) И обновленную записывайте на место старой. (тоже можно)
На форуме эта проблема обсуждалась.
0
1025 / 945 / 139
Регистрация: 19.02.2010
Сообщений: 2,933
24.05.2017, 12:40 4
ziqp, во время исполнения не получится - только после того, как прога отработает=закроется.
Удалить можно бат-файлом, который создаётся и запускается во время работы проги, и в котором крутится цикл
:repeat
del name.exe
if exist name.exe goto repeat
Батнику при этом желательно приоритет понизить, а то неизвестно сколько времени он будет крутиться вхолостую до закрытия программы (его ведь можно и не при обработке закрытия проги запустить - а раньше, т.к. до обработчика закрытия прога может не добраться (если вдруг по какому-то исключению или ассерту вылетит)).
0
Почетный модератор
Эксперт С++
5840 / 2848 / 390
Регистрация: 01.11.2011
Сообщений: 6,884
24.05.2017, 16:24 5
VTsaregorodtsev, еще существует вариант с длительным пингом из батника как таймера ожидания завершения программы. Типа запускается bat-файл непосредственно перед завершением программы, ожидает с помощью пинга закрытия программы, а потом удаляет все, что нужно.
Просто так, к слову.
0
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 832
24.05.2017, 16:32  [ТС] 6
Я имею в виду насильное удаление, чтобы образ самого файла (exe) не существовал, а программа была уже запущена в оперативной памяти. Что вы думаете об этом? Теоретически возможно? Ведь когда программа в памяти и полностью загружена, она уже не достает информацию из образа
0
Почетный модератор
Эксперт С++
5840 / 2848 / 390
Регистрация: 01.11.2011
Сообщений: 6,884
24.05.2017, 16:51 7
ziqp, устройство размещения программы в памяти сложнее, чем вы вероятно сейчас представляете.
Если кто и может в трех словах пролить свет на все это таинство, то это только славный Убежденный.
1
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 832
24.05.2017, 17:32  [ТС] 8
Я его представляю себе так:
С образа программа выгружает себя в оперативную память, все функции всегда расположены по разным адресам с каждым запуском программы. Все, что вы меняете отладчиком, вы меняете в оперативной памяти. Если программа зашифрована, она также расшифровывает себя и перезаписывает также в оперативной памяти. Единственное где я не уверен, это как работает peb и teb. Не знаю, нужен ли им exe, чтобы программа не крашалась
0
13710 / 7333 / 1751
Регистрация: 30.01.2014
Сообщений: 12,302
24.05.2017, 19:11 9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
только славный Убежденный.
Он уже проливал свет здесь: Может ли программа удалить себя?
1
Эксперт C
25078 / 15582 / 3331
Регистрация: 24.12.2010
Сообщений: 33,772
24.05.2017, 22:31 10
Цитата Сообщение от ziqp Посмотреть сообщение
она уже не достает информацию из образа
Это не так. Ей иногда требуются Ресурсы, которые она берет по мере необходимости. В старину было такое понятие - Оверлеи. Они и нонче, наверное, используются, только механизм скрыт.
1
Evg
Эксперт CАвтор FAQ
21142 / 8158 / 628
Регистрация: 30.03.2009
Сообщений: 22,467
Записей в блоге: 30
25.05.2017, 11:45 11
Тот факт, что нельзя удалять файл от запущенного приложения - это не есть какая-то обязаловка, это всего лишь одна из концепций работы операционных систем. По каким-то причинам им надо было сделать так. И если так сделали, то скорее всего для этого имелись объективные причины

Цитата Сообщение от Байт Посмотреть сообщение
В старину было такое понятие - Оверлеи. Они и нонче, наверное, используются, только механизм скрыт
Механизм как таковой остался, просто он с уровня приложения ушёл на уровень операционной системы и превратился в swap (файл подкачки)
1
231 / 134 / 19
Регистрация: 10.11.2015
Сообщений: 305
26.05.2017, 15:54 12
Цитата Сообщение от ziqp Посмотреть сообщение
она уже не достает информацию из образа
Если достает, то это инициатива самой программы, а не ОС (при чем программа для этого использует обычные API чтения (ReadFile etc), т.е. особых механизмов работы с оверлеями нету). Если бы это было не так, то не работали бы различные PE-упаковщики/-протекторы/-крипторы. Есть исключение, к примеру NET-приложения, но автору PE-упаковщика достаточно похучить ZwMapViewOfSection (подсовываем оригинальный образ) и будет работать.
Цитата Сообщение от ziqp Посмотреть сообщение
Теоретически возможно?
На сколько мне известно это невозможно. ZwUnmapViewOfSection над exe-образом срабатывает корректно, но файл после этого все равно удалить нельзя.

Добавлено через 5 минут
Цитата Сообщение от ziqp Посмотреть сообщение
Единственное где я не уверен, это как работает peb и teb. Не знаю, нужен ли им exe, чтобы программа не крашалась
PEB и TEB не с кем не работают . Это просто структуры содержащие информацию о окружении. Работают с ними.
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 243
26.05.2017, 21:15 13
Это ТС'у нужен прямой доступ к файловой системе, после запуска программы просто стереть файл из списка ?)
0
231 / 134 / 19
Регистрация: 10.11.2015
Сообщений: 305
27.05.2017, 06:14 14
ziqp, кстати, а вариант удаления после перезагрузки не подойдет? (MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT)
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 243
27.05.2017, 10:41 15
Может он хочет сделать вирус который нельзя будет отследить, тогда надо полностью стереть файл из файловой системы после запуска ))
0
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 832
28.05.2017, 22:47  [ТС] 16
Это ТС'у нужен прямой доступ к файловой системе, после запуска программы просто стереть файл из списка ?)
Да, именно
Может он хочет сделать вирус который нельзя будет отследить, тогда надо полностью стереть файл из файловой системы после запуска ))
Цели другие. Глупо удалять вирус после запуска и потом снова добавлять в автозагрузку

ziqp, кстати, а вариант удаления после перезагрузки не подойдет? (MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT)
К сожалению нет. Мне нужно чтобы другие программы не имели доступа к моей именно во время исполнения
0
зомбяк
1420 / 1084 / 310
Регистрация: 14.05.2017
Сообщений: 3,552
28.05.2017, 23:31 17
Цитата Сообщение от ziqp Посмотреть сообщение
Мне нужно чтобы другие программы не имели доступа к моей
так твоя ж программа будет в оперативной памяти, к которой доступ получить из другого процесса гораздо проще, чем к её исполняемому файлу... Простейшие примеры - дебаггеры, которыми пользуешься для отладки. Они ж не жёсткий диск считывают.
0
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 832
30.05.2017, 07:22  [ТС] 18
Прошу прощения. Нужно именно ограничить доступ к образу файла
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 243
30.05.2017, 08:51 19
Цитата Сообщение от ziqp Посмотреть сообщение
Глупо удалять вирус после запуска и потом снова добавлять в автозагрузку
Не вирус, который должен удалять сам себя, и добавлять в автозагрузку?

Где-то логика потерялась ))))

Так через доступ к процессу можно будет узнать путь к программе, и прочитать содержимое.
Изменить образ нельзя никаким образом если программа уже запущена...


Если нужно просто запретить открывать образ для чтения, то наверно можно использовать открытие файла с запретом чтения, не знаю)
0
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 832
30.05.2017, 13:05  [ТС] 20
про автозагрузку это я в пример к вирусу привел

И все же, если наплевать на все запреты системы и насильно удалить exe в то время, когда он уже запущен, что будет? Краш?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2017, 13:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перекомпиляция самого себя
Есть программа, скажем самая простая - консольная, которая выводит одно число, жеско прописано в...

Копирование самого себя
Здравствуйте уважаемые кодеры у меня такой вопрос: Как можно скопировать самого себя не зависимо...

Указатель на самого себя
Дана переменная-указатель ,надо описать ее тип так,чтобы он соответствовал указателю на ее саму.

Ссылка на самого себя
Подскажите пожалуйста, как правильно передать ссылку на экземпляр класса, из которого мы создаем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.