Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
 
ziqp
124 / 60 / 15
Регистрация: 03.09.2015
Сообщений: 819
#1

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

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

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

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

Добавлено через 54 минуты
Или на c++ есть альтернатива?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2017, 04:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удаление самого себя во время исполнения (C++):

Чтение информации с самого себя exe
суть такая одна программа должна дописывать к exe заведомо не известный...

Верно ли, что масса самого тяжелого человека превышает массу самого легкого более, чем в 2 раза
известна масса каждого человека из группы. верно ли, что масса самого тяжелого...

Длина самого короткого и самого длинного слов
помогите плз Дан текст. Найти длины самого короткого и самого длинного слов.

Изменение имени файла (самого себя)
Собственно, вопрос в названии. Как изменить имя файла из под себя же? Т.е, если...

Ошибка во время исполнения
При попытке запустить программу Visual Studio пишет: Unhandled exception at...

Время исполнения алгоритмов
Дали задание "Экспериментально сравнить реализации этих двух алгоритмов по...

26
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
24.05.2017, 09:50 #2
ziqp, это сделать нельзя, при запуске ехе отображается в память - шлепнуть его на диске не выйдет
0
Байт
Эксперт C
17771 / 11796 / 2450
Регистрация: 24.12.2010
Сообщений: 23,718
24.05.2017, 11:04 #3
ziqp, Для чего вам это нужно? Не для автообновления ли? Тогда есть такой вариант. Переименовывайте программу (это можно) И обновленную записывайте на место старой. (тоже можно)
На форуме эта проблема обсуждалась.
0
VTsaregorodtsev
464 / 407 / 64
Регистрация: 19.02.2010
Сообщений: 1,638
24.05.2017, 12:40 #4
ziqp, во время исполнения не получится - только после того, как прога отработает=закроется.
Удалить можно бат-файлом, который создаётся и запускается во время работы проги, и в котором крутится цикл
:repeat
del name.exe
if exist name.exe goto repeat
Батнику при этом желательно приоритет понизить, а то неизвестно сколько времени он будет крутиться вхолостую до закрытия программы (его ведь можно и не при обработке закрытия проги запустить - а раньше, т.к. до обработчика закрытия прога может не добраться (если вдруг по какому-то исключению или ассерту вылетит)).
0
SatanaXIII
Супер-модератор
Эксперт С++
5765 / 2763 / 374
Регистрация: 01.11.2011
Сообщений: 6,717
Завершенные тесты: 1
24.05.2017, 16:24 #5
VTsaregorodtsev, еще существует вариант с длительным пингом из батника как таймера ожидания завершения программы. Типа запускается bat-файл непосредственно перед завершением программы, ожидает с помощью пинга закрытия программы, а потом удаляет все, что нужно.
Просто так, к слову.
0
ziqp
124 / 60 / 15
Регистрация: 03.09.2015
Сообщений: 819
24.05.2017, 16:32  [ТС] #6
Я имею в виду насильное удаление, чтобы образ самого файла (exe) не существовал, а программа была уже запущена в оперативной памяти. Что вы думаете об этом? Теоретически возможно? Ведь когда программа в памяти и полностью загружена, она уже не достает информацию из образа
0
SatanaXIII
Супер-модератор
Эксперт С++
5765 / 2763 / 374
Регистрация: 01.11.2011
Сообщений: 6,717
Завершенные тесты: 1
24.05.2017, 16:51 #7
ziqp, устройство размещения программы в памяти сложнее, чем вы вероятно сейчас представляете.
Если кто и может в трех словах пролить свет на все это таинство, то это только славный Убежденный.
1
ziqp
124 / 60 / 15
Регистрация: 03.09.2015
Сообщений: 819
24.05.2017, 17:32  [ТС] #8
Я его представляю себе так:
С образа программа выгружает себя в оперативную память, все функции всегда расположены по разным адресам с каждым запуском программы. Все, что вы меняете отладчиком, вы меняете в оперативной памяти. Если программа зашифрована, она также расшифровывает себя и перезаписывает также в оперативной памяти. Единственное где я не уверен, это как работает peb и teb. Не знаю, нужен ли им exe, чтобы программа не крашалась
0
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
24.05.2017, 19:11 #9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
только славный Убежденный.
Он уже проливал свет здесь: http://www.cyberforum.ru/win-api/thread1800824.html
1
Байт
Эксперт C
17771 / 11796 / 2450
Регистрация: 24.12.2010
Сообщений: 23,718
24.05.2017, 22:31 #10
Цитата Сообщение от ziqp Посмотреть сообщение
она уже не достает информацию из образа
Это не так. Ей иногда требуются Ресурсы, которые она берет по мере необходимости. В старину было такое понятие - Оверлеи. Они и нонче, наверное, используются, только механизм скрыт.
1
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,438
Записей в блоге: 30
25.05.2017, 11:45 #11
Тот факт, что нельзя удалять файл от запущенного приложения - это не есть какая-то обязаловка, это всего лишь одна из концепций работы операционных систем. По каким-то причинам им надо было сделать так. И если так сделали, то скорее всего для этого имелись объективные причины

Цитата Сообщение от Байт Посмотреть сообщение
В старину было такое понятие - Оверлеи. Они и нонче, наверное, используются, только механизм скрыт
Механизм как таковой остался, просто он с уровня приложения ушёл на уровень операционной системы и превратился в swap (файл подкачки)
1
jupman
230 / 133 / 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
karaulov6
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 243
Завершенные тесты: 2
26.05.2017, 21:15 #13
Это ТС'у нужен прямой доступ к файловой системе, после запуска программы просто стереть файл из списка ?)
0
jupman
230 / 133 / 19
Регистрация: 10.11.2015
Сообщений: 305
27.05.2017, 06:14 #14
ziqp, кстати, а вариант удаления после перезагрузки не подойдет? (MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT)
0
karaulov6
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 243
Завершенные тесты: 2
27.05.2017, 10:41 #15
Может он хочет сделать вирус который нельзя будет отследить, тогда надо полностью стереть файл из файловой системы после запуска ))
0
ziqp
124 / 60 / 15
Регистрация: 03.09.2015
Сообщений: 819
28.05.2017, 22:47  [ТС] #16
Это ТС'у нужен прямой доступ к файловой системе, после запуска программы просто стереть файл из списка ?)
Да, именно
Может он хочет сделать вирус который нельзя будет отследить, тогда надо полностью стереть файл из файловой системы после запуска ))
Цели другие. Глупо удалять вирус после запуска и потом снова добавлять в автозагрузку

ziqp, кстати, а вариант удаления после перезагрузки не подойдет? (MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT)
К сожалению нет. Мне нужно чтобы другие программы не имели доступа к моей именно во время исполнения
0
TRam_
зомбяк
601 / 606 / 191
Регистрация: 14.05.2017
Сообщений: 2,042
28.05.2017, 23:31 #17
Цитата Сообщение от ziqp Посмотреть сообщение
Мне нужно чтобы другие программы не имели доступа к моей
так твоя ж программа будет в оперативной памяти, к которой доступ получить из другого процесса гораздо проще, чем к её исполняемому файлу... Простейшие примеры - дебаггеры, которыми пользуешься для отладки. Они ж не жёсткий диск считывают.
0
ziqp
124 / 60 / 15
Регистрация: 03.09.2015
Сообщений: 819
30.05.2017, 07:22  [ТС] #18
Прошу прощения. Нужно именно ограничить доступ к образу файла
0
karaulov6
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 243
Завершенные тесты: 2
30.05.2017, 08:51 #19
Цитата Сообщение от ziqp Посмотреть сообщение
Глупо удалять вирус после запуска и потом снова добавлять в автозагрузку
Не вирус, который должен удалять сам себя, и добавлять в автозагрузку?

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

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


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

И все же, если наплевать на все запреты системы и насильно удалить exe в то время, когда он уже запущен, что будет? Краш?
0
30.05.2017, 13:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2017, 13:05
Привет! Вот еще темы с решениями:

Ошибка во время исполнения
Здравствуйте, вылазит ошибка: Debug Assertion Failed! Expression: string...

Произведение массива кроме самого себя
Произведение массива кроме самого себя Имеется массив in из n целых чисел....

Время исполнения операций и циклов
Каким образом рассчитать время на исполнение любой операции в коде? К примеру,...

Изменение значения переменной во время исполнения
Задача: Преобразовать введенный с клавиатуры массив таким образом, чтобы в...


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

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

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