Autodestruction d'un programme

Résolu
Signaler
Messages postés
118
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
2 novembre 2007
-
Messages postés
118
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
2 novembre 2007
-
Je voudrais savoir comment faire pour qu'un programme s'autosupprimer et s'automodifier sachant qu'il est en cour d'utilisation.

Merci.
A voir également:

6 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
15
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.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
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++
Messages postés
118
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
2 novembre 2007

Merci pour ta réponse, je vais regarder de ce côté la.
Si il y a d'autre solution je suis preneur.
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015

1) un programme ne peut pas s'automodifier

2) pour l'autosuppression :
http://www.catch22.net/tuts/selfdel.asp
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
15
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
Messages postés
118
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
2 novembre 2007

Merci j'ai pu réaliser ce que je desirais :)