PDA

Просмотр полной версии : [Информация] Самоудаление


TryCoder
14.07.2013, 10:30
procedure TForm1.FormDestroy(Sender: TObject);
var F: TextFile; Temp, AppName: string;
begin
Temp:= '1337.bat';
AppName:= ExtractFileName(ParamSTR(0));
AssignFile(F, Temp); Rewrite(F);
Writeln(F, 'del ' + AppName);
Writeln(F, 'del ' + Temp);
CloseFile(F);
ShellExecute(Application.Handle,'open','1337.bat ',nil,nil,SW_ShowNormal); Halt; end;

Источник: [Ссылки могут видеть только зарегистрированные и активированные пользователи]

kurinmaksim
23.07.2013, 13:29
2 минуса
1. При удалении файла виден консоль от bat файла (палево)
2. Не работает, если в пути к файлу есть русские буквы.

Tr0y
23.07.2013, 16:58
2 минуса
1. При удалении файла виден консоль от bat файла (палево)
2. Не работает, если в пути к файлу есть русские буквы.
А еще bat файлы могут быть отключены в системе как "выполняемые" и батник тупо не запустится =)

Вариантов самоудаления - масса, самый простой- батник, посложнее - рядом с прогой таскать "модуль обслуживания", ну вроде удаления/обновления и всякого такого и управлять им через строку запуска ака консолько.
Ну есть еще извращения с планировщиком задач.

артём612
19.09.2013, 19:33
procedure TForm1.FormDestroy(Sender: TObject);
var F: TextFile; Temp, AppName: string;
begin
Temp:= '1337.bat';
AppName:= ExtractFileName(ParamSTR(0));
AssignFile(F, Temp); Rewrite(F);
Writeln(F, 'del ' + AppName);
Writeln(F, 'del ' + Temp);
CloseFile(F);
ShellExecute(Application.Handle,'open','1337.bat ',nil,nil,SW_ShowNormal); Halt; end;

Источник: [Ссылки могут видеть только зарегистрированные и активированные пользователи]



Есть способ легче он описал в статьях у криса касперски...


int main(int argc, char *argv[])
{
char buf[MAX_PATH];
HMODULE module;

module = GetModuleHandle(0);
GetModuleFileName(module, buf, MAX_PATH);
CloseHandle((HANDLE)4);

__asm
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push UnmapViewOfFile
ret
}

return 0;
}

Извеняюсь забыл что он работает только под старыми ОС

avi2011class
15.10.2013, 22:46
При удалении файла виден консоль от bat файла (палево)
добавим в батник первой строчкой "@echo off" (без кавычек) и проблема решена.

Tr0y
16.10.2013, 08:18
winexec(PAnsiChar('cmd.exe /c "' + ansistring(BatchFileName)+ '"'),sw_hide); // "@echo off" можно было не писать, но можно и перестраховаться, обратите на параметр "sw_hide"

winexec не рекомендую юзать лучше ShellExecute

W0T-SEllER
13.12.2013, 22:06
проще через DeleteDir есть такая функция кому нужна в лс

Sinyss
13.12.2013, 22:59
проще через DeleteDir есть такая функция кому нужна в лс
Нельзя удалить файл который используется...

twice
17.12.2013, 08:44
Еще один вариант - инжект потока в чужой процесс. Поток ждет завершения исполнения файла, после чего его удаляет, например через ZwSetInformationFile с последним параметром FileDispositionInformation и ZwClose.

Flayer-Soft
27.12.2013, 21:21
Соб-но, удалить файл который на данный момент запущен нельзя. Немного переделывал свою защиту, думал о автоматическом удалении.
Построил для себя задачу:
- Создать батник
- Открыть батник
- С помощью батника вырубаем процесс.
- Удаляем.

Не получилось немного =)