Autodestruction d'un programme

Résolu
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007 - 21 juin 2007 à 12:31
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007 - 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.

6 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
21 juin 2007 à 13:27
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.
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 juin 2007 à 13:57
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++
3
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007
21 juin 2007 à 13:51
Merci pour ta réponse, je vais regarder de ce côté la.
Si il y a d'autre solution je suis preneur.
0
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
21 juin 2007 à 17:05
1) un programme ne peut pas s'automodifier

2) pour l'autosuppression :
http://www.catch22.net/tuts/selfdel.asp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
21 juin 2007 à 18:14
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
0
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007
22 juin 2007 à 00:36
Merci j'ai pu réaliser ce que je desirais :)
0
Rejoignez-nous