Autodestruction d'un programme [Résolu]

cs_Mr.X 119 Messages postés mercredi 22 octobre 2003Date d'inscription 2 novembre 2007 Dernière intervention - 21 juin 2007 à 12:31 - Dernière réponse : cs_Mr.X 119 Messages postés mercredi 22 octobre 2003Date d'inscription 2 novembre 2007 Dernière intervention
- 22 juin 2007 à 00:36
Je voudrais savoir comment faire pour qu'un programme s'autosupprimer et s'automodifier sachant qu'il est en cour d'utilisation.

Merci.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 21 juin 2007 à 13:27
3
Merci
Salut,


Je commence avec une solution fort simple et pas propre : utiliser le
répertoire temporaire de windows
pour y faire travailler une copie de
ton exe (en lui passant des argument pour lui spécifier son
comportement), ou pour executer des batchs.

Merci cs_rt15 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_rt15
Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 21 juin 2007 à 13:57
3
Merci
Passe par un bat (ton exe le fera avec chemin dynamique).
ShellExecute sur le bat juste avant de quitter exe, le bat doit aussi contenir la ligne d'autosuppression (lui il peut).

Compile ceci et lance exe, il devrait disparaitre:
#include <windows.h>


void SupprimeMoi()
{
  HANDLE hfl;
  DWORD len, d, v;
  char buff[268], szexe[272], szbat[272];
  len = GetTempPath(264, buff);
  if(buff[len-1] != '\\') buff[len++] = '\\';
  buff[len] = 't'; buff[len+1] = '.'; buff[len+2] = 'b';
  buff[len+3] = 'a'; buff[len+4] = 't'; buff[len+5] = 0;
  hfl = CreateFile(buff, GENERIC_WRITE, 0, 0,
                      CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  if(hfl == INVALID_HANDLE_VALUE) return;
  *((DWORD*) szbat) = 0x206C6564;
  len = GetShortPathName(buff, szbat+4, 264) + 4;
  *((DWORD*) szexe) = 0x6F686365;
  *((DWORD*) (szexe+4)) = 0x66666F20;
  *((WORD*) (szexe+8)) = 0x0A0D;
  WriteFile(hfl, szexe, 10, &v, 0);
  GetModuleFileName(0, buff, 264);
  *((DWORD*) szexe) = 0x206C6564;
  d = GetShortPathName(buff, szexe+4, 264) + 4;
  szexe[d] = 13; szexe[d+1] = 10;
  WriteFile(hfl, szexe, d+2, &v, 0);
  WriteFile(hfl, szbat, len, &v, 0);
  CloseHandle(hfl);
  *((DWORD*) szexe) = 0x6E65706F;
  szexe[4] = 0; szbat[len+4] = 0;
  ShellExecute(0, szexe, szbat+4, 0, 0, SW_HIDE);
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
  SupprimeMoi();  // APPELER EN DERNIER
  return 0;
}

ciao...
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de BruNews
cs_Mr.X 119 Messages postés mercredi 22 octobre 2003Date d'inscription 2 novembre 2007 Dernière intervention - 21 juin 2007 à 13:51
0
Merci
Merci pour ta réponse, je vais regarder de ce côté la.
Si il y a d'autre solution je suis preneur.
Commenter la réponse de cs_Mr.X
mogwai93 361 Messages postés mardi 31 décembre 2002Date d'inscription 19 mars 2015 Dernière intervention - 21 juin 2007 à 17:05
0
Merci
1) un programme ne peut pas s'automodifier

2) pour l'autosuppression :
http://www.catch22.net/tuts/selfdel.asp
Commenter la réponse de mogwai93
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 21 juin 2007 à 18:14
0
Merci
Sympa ton lien mogwai93.

Pour l'auto modification, même si s'en ai pas vraiment une, il y a moyen de le faire avec la dernière méthode fournie. Mais bon, les modifs à la je te retouche le code machine dans le fichier, c'est pas franchement évident...

Je soupconne BruNews de s'entrainer pour l' International Obfuscated C Code Contest
Commenter la réponse de cs_rt15
cs_Mr.X 119 Messages postés mercredi 22 octobre 2003Date d'inscription 2 novembre 2007 Dernière intervention - 22 juin 2007 à 00:36
0
Merci
Merci j'ai pu réaliser ce que je desirais :)
Commenter la réponse de cs_Mr.X

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.