Programme de suppression automatique Delphi

Comment supprimer automatiquement mon programme Delphi? J’ai essayé ce 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; 

Mais cela ne fonctionne pas, ne supprimez pas le fichier. Mon programme est la console. Merci!

Votre code ne fonctionnera que sous Windows NT et 2000. Dans ces systèmes d’exploitation, le système conserve une référence de descripteur de fichier utilisateur au fichier mappé en mémoire qui sauvegarde l’image exécutable sur le disque. Ce handle a toujours une valeur 0x4 dans ces versions de Windows.

Le moyen le plus efficace pour supprimer votre propre exe est de créer un processus enfant en suspens, d’injecter le code pour attendre le processus parent (l’exe à supprimer), puis de détecter le processus parent et de supprimer le processus parent. le processus enfant.

Vous pouvez en savoir plus sur ce sujet dans ces ressources recommandées.

  • Executables auto-supprimables (Techniques permettant à un fichier exécutable de se supprimer pendant son exécution)
  • Self deleting executables Ranju. V.