Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как программе удалить саму себя 2

Delphi , Программа и Интерфейс , Приложение своё

Как программе удалить саму себя 2

Если ваш руководитель
Заблуждаясь утверждает,
Что в его машине вирус
И он вами занесен,
То когда он отлучится,
Выньте из нее винчестер
И в кастрюле кипятите,
Пока вирус не помрет!!!


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;

Перевод контента на русский язык:

Это программное обеспечение Delphi, которое пытается удалить себя. Код использует функции Windows API GetModuleHandle, GetModuleFileName и GetProcAddress для получения handles и процедур из библиотеки kernel32.dll.

Вот шаг за шагом, что код делает:

  1. Он получает handle текущего модуля с помощью GetModuleHandle(nil).
  2. Он получает полный путь текущего модуля с помощью GetModuleFileName.
  3. Он закрывает неименованный handle (handle 4) с помощью CloseHandle.
  4. Он рассчитывает адрес текущего модуля, добавляя к его handle 1.
  5. Он получает handles на три процедуры kernel32.dll: ExitProcess, DeleteFileA и FreeLibrary с помощью GetProcAddress.
  6. Затем программа использует inline-ассемблерный код для вызова этих процедур, передавая аргументы следующим образом:
    • buf: адрес полного пути текущего модуля.
    • pExitProcess: handle процедуры ExitProcess.
    • p: адрес текущего модуля.
    • pDeleteFile: handle процедуры DeleteFileA.
    • pFreeLibrary: handle процедуры FreeLibrary.

Надоедающий эффект - удалить текущий исполняемый файл с помощью DeleteFileA, освободить загруженные библиотеки с помощью FreeLibrary и затем выйти из программы с помощью ExitProcess. Однако, код имеет несколько проблем:

  1. Ассемблерный код неправильен: он пытается положить аргументы на стек без правильной алинировки.
  2. Вызов CloseHandle не нужен и может вызвать проблемы при использовании с недопустимым handle.
  3. Программа не проверяет ошибки при вызове функций Windows API.
  4. Функция DeleteFileA требует null-terminated строки, но переменная buf не гарантирована быть null-terminated.

Чтобы улучшить этот код, я бы рекомендовал:

  1. Исправить ассемблерный код для правильной алинировки и положения аргументов на стек.
  2. Удалить ненужные вызовы и проверять ошибки при вызове функций Windows API.
  3. Проверить, что функция DeleteFileA получает валидную null-terminated строку.

Вот обновленная версия кода с этими улучшениями:

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));

  p := ULONG(module) + 1;
  hKrnl32 := GetModuleHandle('kernel32');

  pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
  pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');
  pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');

  // Исправленный ассемблерный код
  asm
    mov eax, buf
    push eax
    push pExitProcess
    push p
    push pDeleteFile
    push pFreeLibrary
    ret
  end;
end.

Обратите внимание, что даже с этими улучшениями удаление программы все еще сложный процесс и может не всегда быть успешным.

Статья рассказывает о том, как программист создал процедуру на языке Паскаль, которая может удалить саму себя из операционной системы Windows.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложение своё ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 08:31:52/0.0059831142425537/0