Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Удалить exe во время его исполнения

#windows #файлы


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


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


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


Ответы

Ответ 1



Есть 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.

Ответ 2



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

Ответ 3



Это не отвечает на вопрос, но это максимум, чем владею. http://web.archive.org/web/20160308234918/http://www.catch22.net/tuts/self-deleting-executables Самое простое решение из статьи основано на том факте, что bat-файл может удалить сам себя: del %0 или del %0.bat сохранили в блокноте, затем запустили. Из личного опыта добавлю (не связано с вышеприведённой статьёй): Программа WinHEX позволяет заменять любые байты на носителе, не важно, файл не файл, запущен не запущен, Вы можете использовать знания о файловой системе, чтобы в разделе устройства найти исполняемый модуль и убрать его из файловой системы путём перезаписи этих байт. Но неизвестны способы достижения таких действий программой WinHEX. Таким же способом, Вы также можете находясь в среде Windows, прочитать системные файлы, хранящие пароли. Это можно сделать с помощью одной из утилит восстановления удалённых файлов. Когда Вы просите восстановить файл, который существует (например, хранящий пароли и заблокированный операционной системой), она скопирует его содержимое туда, куда пожелаете.

Ответ 4



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

Ответ 5



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

Комментариев нет:

Отправить комментарий