Suite aux derniers "posts" au sujet de la manipulation d'un .exe :
http://www.delphifr.com/codes/ALLEZ-HOP-INI-DAT-BIN-ETC-TOUS-DANS_51662.aspx
http://www.delphifr.com/codes/MEMORISER-DONNEES-DANS-EXE_51685.aspx
il est apparu que l'utilisation d'un petit utilitaire destiné à 'faire le ménage' s'avère indispensable dans presque tous les cas.
Ce petit utilitaire devant être 'autodestructible', je me suis logiquement orienté vers un fichier .bat dans un premier temps.
Mais une incompatibilité d'humeur avec ces c... d'applications batch assombrit bientôt le ciel de cette idylle.
Je demandais alors conseil à mon ami Cirec, bien connu pour ses talents à résoudre les problèmes conjugaux.
Et il me proposa LA solution !
Il me donna en effet le secret pour "suicider" l'utilitaire sans laisser de trace : Le crime parfait !
Un grand merci à Cirec ! ;)
Voici donc un petit exemple d'application qui réunit tous ces charmes pour nous séduire :
- menue (15Ko)
- svelte (exécution brève)
- sans fard (pas d'attribut inutile)
- génétiquement suicidaire (grâce à la potion cirécienne)
et elle ne demande qu'à faire, en catimini, ce que vous lui demanderez de faire... avant de s'esquiver. A vous de l'éduquer.
Fait sous XP et D7
avec l'aide précieuse de Cirec et rt15
Source / Exemple :
PROGRAM Project1;
uses
Windows,
ShellAPI;
BEGIN
{ Votre code: }
ShellAbout (0,
'cette petite application de 15Ko',
'Elle ne sert strictement à rien ( pffff... )' + #13#10 +
'Donc, judicieusement, elle disparaîtra ! ;) Caribensila',
0);
{ La ligne qui tue les p'tites et les grosses: }
ShellExecute(0,
nil, // By Cirec & rt15. Thanks to both boss ! ;) //
'CMD',
PChar('/K "for /L %I IN (1 1 10000) DO ping -n 2 127.0.0.1 > NUL' +
'&& if EXIST '+GetCommandLine+' (del '+GetCommandLine+') ELSE exit"'),
nil,
0);
END.
Conclusion :
Pour pouvoir contempler l'.exe de ce joli p'tit bout d'application, faire dans l'IDE de Delphi :
Projet/Compiler Project1
L'.exe sera construit et je vous conseille, pour tester, de le copier/coller sur le bureau, par exemple.
En effet, l'exe est autodestructible et il disparaît après chaque lancement (comme vous l'aviez compris).
14 mai 2010 à 17:11
14 mai 2010 à 17:09
14 mai 2010 à 16:12
Testé sous XP :
l:=TStringList.Create;
try
l.Add('@echo off');
l.Add(':loop');
l.Add('del "%cd%\' + ExtractFileName(Application.Exename) + '"');
l.Add('if exist "%cd%\' + ExtractFileName(Application.Exename) + '" goto :loop');
l.Add('del "%cd%\MrPropre.bat"');
l.SaveToFile('MrPropre.bat');
ShellExecute(0,nil,'MrPropre.bat',0,nil,0);
finally
l.Destroy;
---------------------------------------------------------
Pour ce qui est de la temporisation avec le PING, je me demande si ce ne serait pas une fausse bonne idée, finalement.
Car, sauf erreur, un PING crée un process. Et on ne fait que remplacer une suite de messages système par une suite de création de process.
Et je ne suis pas sûr que le Scheduler Windows apprécie tant que ça.
La meilleure solution, je crois, c'est de créer le .bat au tout dernier moment.
14 mai 2010 à 14:36
14 mai 2010 à 14:27
{$EXTERNALSYM SW_HIDE}
SW_HIDE = 0;
{$EXTERNALSYM SW_SHOWNORMAL}
SW_SHOWNORMAL = 1;
;)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.