Понедельник, 30.12.2024, 20:42 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Anton93  
Как программе удалить саму себя
dolphinДата: Суббота, 21.02.2009, 23:22 | Сообщение # 1
Администратор
Сообщений: 906
Статус: Offline
Первый способ:

Code
uses  
   Windows, SysUtils;  

procedure DeleteMe;  
var  
   BatchFile: TextFile;  
   BatchFileName: string;  
   ProcessInfo: TProcessInformation;  
   StartUpInfo: TStartupInfo;  
begin  
   { создаём бат-файл в директории приложения }
   BatchFileName := ExtractFilePath(ParamStr(0)) + '$$336699.bat';  

   { открываем и записываем в файл }
   AssignFile(BatchFile, BatchFileName);  
   Rewrite(BatchFile);  

   Writeln(BatchFile, ':try');  
   Writeln(BatchFile, 'del "' + ParamStr(0) + '"');  
   Writeln(BatchFile,  
     'if exist "' + ParamStr(0) + '"' + ' goto try');  
   Writeln(BatchFile, 'del "' + BatchFileName + '"');  
   CloseFile(BatchFile);  

   FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);  
   StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;  
   StartUpInfo.wShowWindow := SW_HIDE;  

   if CreateProcess(nil, PChar(BatchFileName), nil, nil,  
      False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,  
      ProcessInfo) then  
   begin  
     CloseHandle(ProcessInfo.hThread);  
     CloseHandle(ProcessInfo.hProcess);  
   end;  

end;

А вот тот же способ, но немного модифицированный:

Code
program delete2;  

uses  
   SysUtils,  
   windows;  

var  
    BatchFile: TextFile;  
    BatchFileName : string;  
    TM : Cardinal;  
    TempMem : PChar;  

begin  
     BatchFileName:=ExtractFilePath(ParamStr(0))+ '$$336699.bat';  

    AssignFile(BatchFile, BatchFileName);  
    Rewrite(BatchFile);  

    Writeln(BatchFile,':try');  
    Writeln(BatchFile,'del "' + ParamStr(0) + '"');  
    Writeln(BatchFile,'if exist "' + ParamStr(0) + '" goto try');  
    Writeln(BatchFile,'del "' + BatchFileName + '"');  
    CloseFile(BatchFile);  

    TM:=70;  
    GetMem (TempMem,TM);  
    GetShortPathName (pchar(BatchFileName), TempMem, TM);  
    BatchFileName:=TempMem;  
    FreeMem(TempMem);  

    winexec(Pchar(BatchFileName),sw_hide);  

    halt;  

end.

Второй способ:

Code
procedure DeleteSelf;  
var  
   module: HModule;  
   buf: array[0..MAX_PATH - 1] of char;  
   p: ULong;  
   hKrnl32: HModule;  
   pExitProcess,  
   pDeleteFile,  
   pFreeLibrary: pointer;  
begin  
   module := GetModuleHandle(nil);  
   GetModuleFileName(module, buf, SizeOf(buf));  
   CloseHandle(THandle(4));  
   p := ULONG(module) + 1;  
   hKrnl32 := GetModuleHandle('kernel32');  
   pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');  
   pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');  
   pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');  
   asm  
     lea eax, buf  
     push 0  
     push 0  
     push eax  
     push pExitProcess  
     push p  
     push pDeleteFile  
     push pFreeLibrary  
     ret  
   end;  
end;


Система: Windows 10 x64, Kali Linux
Среды программирования: Delphi 7, Delphi 10.x

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
dolphinДата: Среда, 06.05.2009, 11:09 | Сообщение # 2
Администратор
Сообщений: 906
Статус: Offline
Усовершенствованный способ, удаляет даже из русских папок

Доступно только для пользователей


Сообщение отредактировал dolphin - Понедельник, 16.04.2012, 12:13
 
freezДата: Суббота, 09.01.2010, 04:13 | Сообщение # 3
Частый гость
Зарегистрирован: 09.01.2010
Группа: Пользователи
Сообщений: 30
Статус: Offline
эти способы будут работать на NT системах ? book
 
dolphinДата: Суббота, 09.01.2010, 15:40 | Сообщение # 4
Администратор
Сообщений: 906
Статус: Offline
Будут работать везде

Система: Windows 10 x64, Kali Linux
Среды программирования: Delphi 7, Delphi 10.x

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
opiusДата: Пятница, 02.04.2010, 11:34 | Сообщение # 5
Частый гость
Зарегистрирован: 18.03.2010
Группа: Пользователи
Сообщений: 46
Статус: Offline
Вот так еще можно

Доступно только для пользователей


Сообщение отредактировал dolphin - Понедельник, 16.04.2012, 12:08
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz