Интересует метод самоудаления запущеного экзкшника. Естественно методов можно много придумать, но проблема в том, что у меня очень жесткие требования к его реализции. Короче метод должен полностью удовлетворять следующим требованиям: 1) Он не должен требовать запуска другого процесса. 2) Он не должен требовать открытия другого процесса (OpenProcess). 3) Он должен срабатывать сразу же, а не после перезагрузки системы. 4) Он должен работать во всей линейке Windows NT (от NT4 до Vista) 5) Он не должен требовать каких-либо действий со стороны пользователя, и не иметь видимых внешних признаков. 6) Он не должен требовать создания на диске .dll файлов. 7) Он не должен требовать загрузки драйверов, либо других методов запуска ринг0 кода. По вышеприведенным причинам отпадают различные фокусы с .bat файлами, инжект в другой процесс, имитация перетаскивания файла в корзину и инжект dll с помощью AppInitDlls. Может у кого-нибудь есть идеи, как такое можно сделать?
http://groups.google.com/groups?hl=en&selm=91q3cn%24v8n%241%40novalfsmtp1.novsvcs.net http://groups.google.com/groups?hl=en&selm=c14f01c1a0f7%24f9b3f010%249ae62ecf%40tkmsftngxa02 А подходит ли ко всем твоим требованиям ?
То же самое, только руским язиком http://www.rsdn.ru/article/baseserv/QnADelExe.xml А вот здесь с коментариями и ссылкой на первоисточник. http://www.ezds.com/html/sde.html
Нет, см. пункт 4 Не подходит, см. пункт 1 Тоже самое. Ни один из методов не подходит. В общем, про все те методы я и сам давно знаю, поэтому написал четкие требования. Не нужно постить ссылки на методы им не удовлетворяющие.
Посмотри на эту функ. http://xdeveloper.nm.ru/delselt.txt сам ее использую, удаляет сама себя. Работает от 98 до xp.
Народ, ну кто-нибудь перед постом требования к методу хоть читает? Написано же что нельзя запускать другой процесс.
Есть безумная идея: если в момент запуска экзкшник находится на RAM-диске, то грохнув этот диск он удалит самого себя. Но я не проверял это, и поэтому не знаю, можно ли это сделать, и если да, появится ли при этом предупреждение о извлечении неостановленного устройства или нет.
Есть безумная идея: если в момент запуска экзкшник находится на RAM-диске, то грохнув этот диск он удалит самого себя Камикадзе )) . Если у кого есть желание, то вот RAM-диск: www.infobez.net.ru/files/ram.rar И еще. Скорее не подойдет, имхо. Если сымитировать бэд на месте экзешника.
Ms Rem Может быть, "напихать команд в буфер клавиатуры" (сообщений), те имитируя нажатия клавиш "от пользователя" ? Но "видимые эффекты" могут быть при этом... ps почти не знаю win api, поэтому сорри за наивный совет
Ms Rem Народ, ну кто-нибудь перед постом требования к методу хоть читает? Требования слишком уж жесткие. Да, и если такой способ найдется - это будет _огромная_ дыра в безопасности системы! А по делу - ядро пропатчить заранее, чтобы не блокировало файлы вообще и подсунуть юзеру в дистрибутив или подменить /пропатчить с загрузочного сидюка.
Проблема решена. Пришлось открывать том в RAW режиме и работая напрямую с MFT удалять запись о файле оттуда. Но метод плох тем, что он потенциально глючный, так что если у кого-нибудь возникнут мысли на эту тему, то прошу высказать их здесь.
Пришлось открывать том в RAW режиме может не быть прав на открытие... напрямую с MFT удалять запись о файле а если у меня не NTFS, а FAT? а если я по сети файл запустил (но права на запись в сетевой том есть)? а может с UDF на CD-RW? или с дискетки, защищенной от записи (а там FAT12) - что тоже файл удалится? это ж сколько всего надо проанализировать?... труба...
Я не говорю что этот метод универсален, наоборот в нем полно недостатков. Но это единственный метод который работоспособен при вышеназваных требованиях. Там где я его собираюсь примнять, права на открытие тома всегда будут, том всегда будет NTFS и файл никогда не может оказаться ни на чем кроме жесткого диска.