Доброго времени суток! Задача следующая: нужно после запуска файла его самоликвидировать. Знаю что это можно сделать черз запуск другого файла, например батника, но данный способ не подходит. Подскажите, плиз, в какую сторону копать?
Aspire я знаю 4 способа 1. Удаленный поток. Т.е. создаешь удаленный поток в другом процессе и удаляешь свой файл. функции: OpenProcess ;открываешь процесс VirtualAllocEx ;выделяешь память в контексте открытого процесса WriteProcessMemory ;записываешь код, который будет исполняться внутри процесса CreateRemoteThread ;запускаешь поток на выполнение 2. Батник. Почему не подходит? все очень даже идеально. Батник удалит твой файл, а потом себя. Если не подходит по причине того, что ты бат-файл с асма запустить не можешь - то бат-файлы запускаются так: cmd.exe C:\...\some.bat 3. Пометить файл на удаление. После перезагрузки файл удалится. 4. Из драйвера. Открыть физическую память и потереть файл.
Ну да. Тогда, действительно получается, что 2-й способ самый легкий. Файл создает батник, потом его запускает и батник удаляет оба файла... А для запуска файлов, обычно использую ShellExecute.
Aspire если цель - скрытность, то фаеры тебя попалят имхо, поток в другом процессе рулит! ах да, чуть не забыл, можно еще сделать MoveFileEx, правда это скорее просто для скрытия, но тоже чем не вариант?
я реализовал в своей программе способ номер 2. До тех пор пока в пути к файлу не встречаются русские буквы, все нормально. Но дело в том, что функции GetHandleName и GetCurrentDirectory возвращают русские буквы в формате win utf8. а вот bat файл работает с DOS кодировкой. поэтому он неможет уничтожить эти файлы. можно конечно перекодировать, но нельзя ли сделать проще и изящнее?
Мне было бы интересно КАКИМ параметром это можно указать? ЗЫ. Попробовал, действительно не работает с русским алфавитом.. pris0ner Да, кстати, если воспользуешься ф-цией ShellExecute при запуске батника, то получать и задавать текущую директорию будет совсем не нужно. В ней же передается указатель на строку с параметрами запуска.
наиболее изящным решением для меня показалось, как посоветовал IceStudent использовать первой командой своего батника cpcp 1251. Все заработало.
Господа, про самый изящбный способ забыли - Затолкать в стек код который удалит файл, и адрес возврата из функции чтоб указывал на этот код. затем вызываем ExitProcess джампом. После отработки ExitProcess выполнится ваш код.
assorted В вин nt/2000 вроде работал трюк с UnmapViewOfFile, в 9x/me - FreeLibrary. Насчет ХР и выше хз
assorted ExitProcess управление не возвращает. Тут надо геморроиться с ZwTerminateProcess в паре с CsrClientCallServer и DeleteFileA. Мб както получиться стереть файл после уведомления csrss
Great Видимо, вся фишка в этом : "затем вызываем ExitProcess джампом", потому как в ф-ии ExitProcess, как и везде стоят push EBP; mov EBP,ESP...