Как удалить исполняемый файл windows

Мне необходимо удалить exe файл после того, как он запустился, чтобы его невозможно было анализировать (если, конечно, пропустить возможность дампа).
Есть пару известных мне методов это сделать, но они очень костыльные:

  1. Вытащить флешку после запуска программы. Она продолжит работать, но образа уже нигде не будет (что может вызвать runtime ошибку при запросе, например, к ресурсам, но это не важно).
  2. Создавать виртуальный диск и отключать его когда программа с него будет запущена (делает практически то же самое, что и метод 1.

Так как же нормально удалить exe во время исполнения? Может быть, работа с дисками на физическом уровне?

αλεχολυτ's user avatar

αλεχολυτ

28.4k12 золотых знаков58 серебряных знаков118 бронзовых знаков

задан 18 янв 2018 в 22:18

user2173645's user avatar

13

Вообще-то Windows блокирует файлы во время исполнения или чтения\записи. Можно, конечно, попробовать обойти это методами, которые используются вирусами, но, думаю, что антивирус быстро зарубит такой беспредел. Думаю, лучшим вариантом для вас будет поставить скрипт удаления после завершения.

Viktor Tomilov's user avatar

Viktor Tomilov

8,3154 золотых знака25 серебряных знаков63 бронзовых знака

ответ дан 18 янв 2018 в 22:36

Вадим Корженко's user avatar

4

Это не отвечает на вопрос, но это максимум, чем владею.

http://web.archive.org/web/20160308234918/http://www.catch22.net/tuts/self-deleting-executables

Самое простое решение из статьи основано на том факте, что bat-файл может удалить сам себя:
del %0 или del %0.bat сохранили в блокноте, затем запустили.

Из личного опыта добавлю (не связано с вышеприведённой статьёй):
Программа WinHEX позволяет заменять любые байты на носителе, не важно, файл не файл, запущен не запущен, Вы можете использовать знания о файловой системе, чтобы в разделе устройства найти исполняемый модуль и убрать его из файловой системы путём перезаписи этих байт.
Но неизвестны способы достижения таких действий программой WinHEX.
Таким же способом, Вы также можете находясь в среде Windows, прочитать системные файлы, хранящие пароли. Это можно сделать с помощью одной из утилит восстановления удалённых файлов. Когда Вы просите восстановить файл, который существует (например, хранящий пароли и заблокированный операционной системой), она скопирует его содержимое туда, куда пожелаете.

ответ дан 19 янв 2018 в 3:03

Roman Loskutov's user avatar

Есть 1 очень сложный вариант для винды: 1. Создаём файл 2.exe он

1) создаёт область с ассемблерным кодом(VirtualAlloc на адрес 0x20000 например и ещё на 0x410000(для 1.exe))

2) считывает 1.exe в 0x410000 единым блоком

3) создаёт область с ассемблерным кодом(на адрес 0x20000 например)

4) переходит на ассемблер очищает все ассемблерные стеки и делает jmp 0x20000

5) ассемблерный код стирает из памяти 2.exe (тоже винапи упр. виртуальной памятью)

6) записывает туда же(откуда стёр 2.exe) 1.exe из памяти 0x410000 и jmp на этот код но тут не знаю сработает ли

можно попробовать скомпилить как-то по особому сам файл 1.exe как длл например и подгрузить в память процесса. Вобщем стоит покопать про вирт. память. Наверняка если удалить проецируемый exe и закрыть дескриптор(ы) файла то можно будет и файл стереть(тогда 2.exe ненужен вообще). Тестить надо.

Я не пишу вирус

Хорошо назовём это тестировщик уязвимостей Windows.

ответ дан 20 янв 2018 в 10:33

Никита Самоуков's user avatar

Есть вариант еще использовать драйвер (kernel), через физическую память. Ну или отвязать модуль от списка процессов. Все, что угодно.
Просто думал есть ring3 вариант. Попробую поиграться с инжектом в системные процессы

ответ дан 20 янв 2018 в 0:31

user2173645's user avatar

user2173645user2173645

4312 серебряных знака15 бронзовых знаков

И все-таки я нашел решение. Называется process hollowing (исходники на гитхабе).
После анмапа exe образ не числится как задействованный, поэтому можно удалять

ответ дан 25 янв 2018 в 0:07

user2173645's user avatar

user2173645user2173645

4312 серебряных знака15 бронзовых знаков

Мне необходимо удалить exe файл после того, как он запустился, чтобы его невозможно было анализировать (если, конечно, пропустить возможность дампа).
Есть пару известных мне методов это сделать, но они очень костыльные:

  1. Вытащить флешку после запуска программы. Она продолжит работать, но образа уже нигде не будет (что может вызвать runtime ошибку при запросе, например, к ресурсам, но это не важно).
  2. Создавать виртуальный диск и отключать его когда программа с него будет запущена (делает практически то же самое, что и метод 1.

Так как же нормально удалить exe во время исполнения? Может быть, работа с дисками на физическом уровне?

αλεχολυτ's user avatar

αλεχολυτ

28.4k12 золотых знаков58 серебряных знаков118 бронзовых знаков

задан 18 янв 2018 в 22:18

user2173645's user avatar

13

Вообще-то Windows блокирует файлы во время исполнения или чтения\записи. Можно, конечно, попробовать обойти это методами, которые используются вирусами, но, думаю, что антивирус быстро зарубит такой беспредел. Думаю, лучшим вариантом для вас будет поставить скрипт удаления после завершения.

Viktor Tomilov's user avatar

Viktor Tomilov

8,3154 золотых знака25 серебряных знаков63 бронзовых знака

ответ дан 18 янв 2018 в 22:36

Вадим Корженко's user avatar

4

Это не отвечает на вопрос, но это максимум, чем владею.

http://web.archive.org/web/20160308234918/http://www.catch22.net/tuts/self-deleting-executables

Самое простое решение из статьи основано на том факте, что bat-файл может удалить сам себя:
del %0 или del %0.bat сохранили в блокноте, затем запустили.

Из личного опыта добавлю (не связано с вышеприведённой статьёй):
Программа WinHEX позволяет заменять любые байты на носителе, не важно, файл не файл, запущен не запущен, Вы можете использовать знания о файловой системе, чтобы в разделе устройства найти исполняемый модуль и убрать его из файловой системы путём перезаписи этих байт.
Но неизвестны способы достижения таких действий программой WinHEX.
Таким же способом, Вы также можете находясь в среде Windows, прочитать системные файлы, хранящие пароли. Это можно сделать с помощью одной из утилит восстановления удалённых файлов. Когда Вы просите восстановить файл, который существует (например, хранящий пароли и заблокированный операционной системой), она скопирует его содержимое туда, куда пожелаете.

ответ дан 19 янв 2018 в 3:03

Roman Loskutov's user avatar

Есть 1 очень сложный вариант для винды: 1. Создаём файл 2.exe он

1) создаёт область с ассемблерным кодом(VirtualAlloc на адрес 0x20000 например и ещё на 0x410000(для 1.exe))

2) считывает 1.exe в 0x410000 единым блоком

3) создаёт область с ассемблерным кодом(на адрес 0x20000 например)

4) переходит на ассемблер очищает все ассемблерные стеки и делает jmp 0x20000

5) ассемблерный код стирает из памяти 2.exe (тоже винапи упр. виртуальной памятью)

6) записывает туда же(откуда стёр 2.exe) 1.exe из памяти 0x410000 и jmp на этот код но тут не знаю сработает ли

можно попробовать скомпилить как-то по особому сам файл 1.exe как длл например и подгрузить в память процесса. Вобщем стоит покопать про вирт. память. Наверняка если удалить проецируемый exe и закрыть дескриптор(ы) файла то можно будет и файл стереть(тогда 2.exe ненужен вообще). Тестить надо.

Я не пишу вирус

Хорошо назовём это тестировщик уязвимостей Windows.

ответ дан 20 янв 2018 в 10:33

Никита Самоуков's user avatar

Есть вариант еще использовать драйвер (kernel), через физическую память. Ну или отвязать модуль от списка процессов. Все, что угодно.
Просто думал есть ring3 вариант. Попробую поиграться с инжектом в системные процессы

ответ дан 20 янв 2018 в 0:31

user2173645's user avatar

user2173645user2173645

4312 серебряных знака15 бронзовых знаков

И все-таки я нашел решение. Называется process hollowing (исходники на гитхабе).
После анмапа exe образ не числится как задействованный, поэтому можно удалять

ответ дан 25 янв 2018 в 0:07

user2173645's user avatar

user2173645user2173645

4312 серебряных знака15 бронзовых знаков

Is there any way that a running process can delete its own executable?

For example, I make a console application (single exe) and after doing some tasks it somehow deletes the exe file.

I have to send a single file to someone. And I want it deleted after it does its intended task.

Is there anyway to do it in Windows

asked Oct 22, 2009 at 9:49

ata's user avatar

ataata

8,8538 gold badges42 silver badges68 bronze badges

2

One way to do this is to use the MoveFileEx function with the MOVEFILE_DELAY_UNTIL_REBOOT flag and a NULL destination. According to the documentation, this:

registers the lpExistingFileName file to be deleted when the system restarts. If lpExistingFileName refers to a directory, the system removes the directory at restart only if the directory is empty.

answered Oct 22, 2009 at 9:58

Greg Hewgill's user avatar

Greg HewgillGreg Hewgill

955k184 gold badges1151 silver badges1286 bronze badges

5

process.start("cmd /c ping localhost -n 3 > nul & del filepath")
exit

Explanation :

ping localhost -n 3

Adds a slight delay before executing del filepath. By the time it’s triggered, your program has exited.

Replace process.start with whatever command your programming language uses to start programs with arguments.

Replace filepath with the path to your exe.

Replace exit with the command for terminating your program.

===

10yr anniverary edit, if this doesn’t work, you must find a way to perform a «process.start» that starts a separate (external) process, not one subordinate to your original calling program: Python, Bash, C, …… or search for a different language

Replace the search in the catch all with your programming language and you will likely find a suitable guide for this essential step. Please take care to ignore superfluous information as every question may come with obscure specific details that are unrelated to you.

answered Nov 3, 2013 at 0:35

Samie Bencherif's user avatar

1

answered Oct 22, 2009 at 9:55

Alex Reitbort's user avatar

Alex ReitbortAlex Reitbort

13.5k1 gold badge41 silver badges62 bronze badges

You can run another application, which would wait for parent process to terminate, and then delete its executable.

answered Oct 22, 2009 at 9:58

Pavel Alexeev's user avatar

Pavel AlexeevPavel Alexeev

6,0264 gold badges43 silver badges51 bronze badges

2

It’s possible to do this on Linux. You’ll find that it is generally not possible to delete a running executable on Windows. However, you can have Windows delete the EXE for you on the next reboot: http://www.howtodothings.com/computers/a1402-delete-a-running-exe.html

If you want the file deleted after it’s been run, you could simply ask the user to delete it. If the reason you want this is as a security measure, then what you’re doing is misguided. The user could circumvent this by simply making a copy of the file first.

answered Oct 22, 2009 at 9:59

uckelman's user avatar

uckelmanuckelman

25.3k8 gold badges65 silver badges82 bronze badges

2

While it’s not possible to self delete a file when it’s running it is possible to launch a detached cmd command from the file, then end the file operation before the command executes.
So, if you want to delete a bat file you can just add at the end of the file the line:
start cmd /c del %0
and the file would self destruct.

The start cmd will start a new cmd window (detached from your main process).
The /c tells the windows to execute whatever comes after the /c in the line.
Then the del will delete the file at the path it is given.
The parameter $0 refers to the first command line argument which is usually the name and path to the file that was executed, which is what we want.
(the $0 parameter is the path to the file, you want to pass that to the del command).

answered Oct 9, 2018 at 7:05

Gur Telem's user avatar

Gur TelemGur Telem

7061 gold badge7 silver badges14 bronze badges

Until that exe is in memory, it will not be able to delete itself. However, it can register with the system a task for deleting itself after a set time period of gap when it would be expected to be completing its execution.

answered Oct 22, 2009 at 9:58

techzen's user avatar

techzentechzen

2,8952 gold badges22 silver badges22 bronze badges

1

I solved this problem (using Visual Basic) by creating a batchfile that is executed while the process is still running, waits 1sec so the program can close itself and than deletes the program.

You might need to modify it for this will delete every thing in the same folder. After your task just call del() and it should work.

 Sub del()
    Dim file As System.IO.StreamWriter
    file = My.Computer.FileSystem.OpenTextFileWriter("del.bat", True)
    file.WriteLine("")
    file.WriteLine("timeout 1")
    file.WriteLine("echo Y | del *.*")
    file.Close()
    Process.Start("del.bat")
    Me.Close()
End Sub

Julian's user avatar

Julian

34.1k23 gold badges119 silver badges175 bronze badges

answered Oct 2, 2016 at 11:55

SomeCoffeePlz's user avatar

I couldn’t find any solutions anywhere else so I’ll post my fix here.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
    char* process_name = argv[0];
    char command[256] = "start /min cmd /c del ";
    strcat(command, process_name);

    printf("Attempting to delete self...\n");

    system(command);
    return 0;
}

Normally, trying to use system to call the command prompt to delete an executable would not work because the command prompt that is spawned is a child process that system executes and waits for a return status.

This method calls the system to start a command prompt process on its own thread.

The /min argument starts the process as «hidden».
The /c argument supplies arguments to the spawned command prompt.

I know this is an old thread, but I hopes those that come here in the future.

answered Mar 28, 2021 at 23:32

0xvpr's user avatar

0xvpr0xvpr

11 silver badge2 bronze badges

Как удалить файл который не удаляетсяЧастая проблема, с которой сталкиваются начинающие пользователи — не удаляется файл или папка (из-за какого-то файла), который нужно-таки удалить. При этом, система пишет файл занят другим процессом или действие не может быть выполнено, так как этот файл открыт в Название_программы или о том, что нужно запросить разрешение у кого-то. С этим можно столкнуться в любой версии ОС — Windows 11, Windows 10, 8.1 или 7.

На самом деле, есть сразу несколько способов удалить такие файлы, каждый из которых и будет здесь рассмотрен. Посмотрим, как удалить не удаляющийся файл, не используя сторонние средства, а затем опишу удаление занятых файлов с помощью LiveCD и бесплатной программы Unlocker. Отмечу, что удаление таких файлов не всегда безопасно. Будьте внимательны, чтобы это не оказался файл системы (особенно когда вам сообщают, что нужно разрешение от TrustedInstaller). См. также: Как удалить файл или папку, если пишет Элемент не найден (не удалось найти этот элемент).

Примечание: если файл не удаляется не потому, что используется, а с сообщением о том, что отказано в доступе и вам нужно разрешение на выполнение этой операции или нужно запросить разрешение у владельца, то используйте это руководство: Как стать владельцем файла и папки в Windows или Запросите разрешение у TrustedInstaller (подойдет и для случая когда требуется запросить разрешение у Администраторы).

Также, если не удаляются файлы pagefile.sys и swapfile.sys, hiberfil.sys то способы ниже не помогут. Вам пригодятся инструкции про Файл подкачки Windows (первые два файла) или про отключение гибернации. Аналогично, может быть полезна отдельная статья про то, как удалить папку Windows.old.

Удаление файла без дополнительных программ

Файл уже используется. Закройте файл и повторите попытку.

Как правило, если файл не удаляется, то в сообщении вы видите, каким именно процессом он занят — это может быть explorer.exe или какая-либо другая проблема. Логично предположить, что для его удаления нужно сделать так, чтобы файл был «не занят». Обновление: для Windows 11 и 10 есть простой способ узнать, каким процессом занят файл или в какой программе он открыт и разблокировать этот файл.

Это легко сделать — запустите диспетчер задач:

  • В Windows 7 и XP в него можно попасть по Ctrl + Alt + Del.
  • В Windows 8 и Windows 10 можно нажать клавиши Windows + X и выбрать диспетчер задач.

Процессы в диспетчере задач Windows

Найдите процесс, использующий файл, который нужно удалить и снимите задачу. Удалите файл. Если файл занят процессом explorer.exe, то перед тем, как снять задачу в диспетчере задач, запустите командную строку от имени администратора и, уже после того, как снимите задачу, используйте в командной строке команду del полный_путь_к_файлу, чтобы удалить его.

Чтобы после этого вернуть стандартный вид рабочего стола, нужно снова запустить explorer.exe, для этого в диспетчере задач выберите «Файл» — «Новая задача» — «explorer.exe».

Подробно про диспетчер задач Windows

Удаление заблокированного файла с помощью загрузочной флешки или диска

Еще один способ удалить подобный файл — загрузиться с любого накопителя LiveCD, с диска реанимации системы или загрузочной флешки Windows. При использовании LiveCD в любых его вариантах вы сможете воспользоваться либо стандартным графическим интерфейсом Windows (например, в Sergei Strelec WinPE или BartPE) и Linux (Ubuntu), либо же средствами командной строки. Обратите внимание, что при загрузке с подобного накопителя, жесткие диски компьютера могут оказаться под другими буквами. Чтобы убедиться, что вы удаляете файл с нужного диска, можно использовать команду dir c: (этот пример отобразит список папок на диске C).

Удаление файла с помощью Ubuntu Live CD

При использовании загрузочной флешки или установочного диска Windows 7 и Windows 8, в любой момент установки (после того, как уже загрузится окно выбора языка и на следующих этапах) нажмите Shift + F10, чтобы войти в командную строку. Также можно выбрать «Восстановление системы», ссылка на которое также присутствует в программе установки. Также, как и в предыдущем случае, обратите внимание на возможное изменение букв дисков.

Использование DeadLock для разблокирования и удаления файлов

Поскольку рассмотренная далее программа Unlocker даже с официального сайта с недавних пор (2016) стала устанавливать различные нежелательные программы и блокируется браузерами и антивирусами, предлагаю рассмотреть альтернативу — DeadLock, которая также позволяет разблокировать и удалить файлы с компьютера (обещает также и изменить владельца, но в моих тестах это не сработало).

Действия в программе DeadLock

Итак, если при удалении файла вы видите сообщение о том, что действие не может быть выполнено, так как файл открыт в какой-то программе, то с помощью DeadLock в меню File вы можете добавить этот файл в список, а затем, с помощью правого клика — разблокировать его (Unlock) и удалить (Remove). Также можно выполнить и перемещение файла. Вторая возможность — посмотреть, какие программы блокируют файл в списке в нижней части окна и снять задачи с этих процессов.

Файл разблокирован в DeadLock

В программе последней версии появился русский язык интерфейса, включить его можно в настройках программы. Недостаток (а для кого-то, возможно, и достоинство) — в отличие от Unlocker, не добавляет действие разблокировки файла в контекстное меню проводника. Скачать DeadLock можно с официального сайта https://codedead.com/software/deadlock

Бесплатная программа Unlocker для разблокировки файлов, которые не удаляются

Программа Unlocker, наверное, самый популярный способ удалить файлы, которые используются тем или иным процессом. Причины тому просты: она бесплатная, исправно справляется со своей задачей, в общем, работает. Скачать Unlocker бесплатно можно на официальном сайте разработчика http://www.emptyloop.com/unlocker/ (с недавних пор сайт стал определяться как вредоносный).

Использование программы очень простое — после установки, просто кликните правой кнопкой мыши по файлу, которые не удаляется и выберите в контекстном меню пункт «Unlocker». В случае использования portable версии программы, которая также доступна для загрузки, запустите программу, откроется окно для выбора файла или папки, которые требуется удалить.

Удаление файла в Unlocker

Суть работы программы та же самая, что и в первом описанном способе — выгрузка из памяти процессов, которыми занят файл. Основные преимущества перед первым способом — с помощью программы Unlocker файл удалить проще и, более того, она может найти и завершить процесс, который скрыт от глаз пользователей, то есть недоступен для просмотра через диспетчер задач.

Обновление 2017: Еще один способ, судя по отзывам, успешно срабатывающий, был предложен в комментариях автором Тоха Айтишник: устанавливаете и открываете архиватор 7-Zip (бесплатный, работает также как файловый менеджер) и в нем переименовываете файл, который не удаляется. После этого удаление проходит успешно.

Почему файл или папка не удаляются

Немного справочной информации с сайта Microsoft, если кому-нибудь интересно. Хотя, информация довольно скудная. Также может быть полезным: Как очистить диск от ненужных файлов.

Что может мешать удалению файла или папки

Если у вас нет необходимых прав в системе для изменения файла или папки, вы не можете удалить их. Если вы не создавали файл, то есть вероятность, что вы не можете и удалить его. Также причиной могут служить настройки, сделанные администратором компьютера.

Также файл или папку его содержащую нельзя удалить, если в настоящий момент файл открыт в программе. Можно попробовать закрыть все программы и попробовать еще раз.

Почему, когда я пробую удалить файл, Windows пишет, что файл используется

Данное сообщение об ошибке означает, что файл используется программой. Таким образом, вам необходимо найти программу, его использующую и либо закрыть файл в ней, если это, например, документ, либо закрыть саму программу. Также, если вы работаете в сети, файл может использоваться другим пользователем в настоящий момент.

После удаления всех файлов остается пустая папка

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

 
pfar
 
(2003-01-30 11:12)
[0]

Как удалить исполняемый файл???


 
DVM
 
(2003-01-30 12:06)
[1]

При запущенной программе никак.


 
pfar
 
(2003-01-30 13:42)
[2]

Логично, а как выгрузить?


 
Barmutik
 
(2003-01-30 17:31)
[3]

В качестве варианта … KillProcess а потом удалить файл.


 
Ice
 
(2003-01-30 22:53)
[4]



> При запущенной программе никак.

Можно это сделать.


 
Bober23
 
(2003-01-31 09:31)
[5]

теоритечески можно из программы сгенерировать bat файл, который можно запусить из программы перед ее завершением. В этом bat-файле удалить екзешник, а затем и сам bat-файл.


 
CAMOBAP
 
(2003-01-31 09:48)
[6]



> теоритечески можно из программы сгенерировать bat файл,

> который можно запусить из программы перед ее завершением.

> В этом bat-файле удалить екзешник, а затем и сам bat-файл.



А как bat-файл сам себя удалит?


 
CAMOBAP
 
(2003-01-31 09:51)
[7]

Извиняюсь глупый вопрос


 
Анонимный
 
(2003-01-31 11:06)
[8]

Можно переместить исполняемый файл в другую папку (под WinXP (или на файловой системе NTFS) )? например, в корзину


 
DVM
 
(2003-01-31 16:40)
[9]



> Можно это сделать.



Да ладно! Ну расскажи как?


 
a_Lan
 
(2003-01-31 16:43)
[10]

Все очень просто (в свое время для uninstall-а писал).



AssignFile(BatFile,»C:\TEMP.BAT»);

ReWrite(BatFile);

WriteLn(BatFile,»del «+
PATH_TO_EXEC+»FILE.EXE»);

WriteLn(BatFile,»rd «+
PATH_TO_EXEC);

WriteLn(BatFile,»del C:\TEMP.BAT»);

CloseFile(BatFile);

ChDir(«C:\»);

WinExec(«C:\TEMP.BAT»,
0);

end;

END.

Удачи! ;)


 
PGM
 
(2003-01-31 16:52)
[11]

Только лучше для BAT-файла использовать каталог временных файлов Windows, а то на C: могут и не разрешить писать. :-)


Другие наши интересноые статьи:

  • Как удалить драйвера видеокарты nvidia windows 10 полностью
  • Как удалить исключения из защитника windows 10 если они не удаляются
  • Как удалить защиту windows 10 навсегда
  • Как удалить из bios windows boot manager
  • Как удалить из реестра программу вручную windows 10

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии