Bonjour,
Pour un système de mise à jour automatique je cherche à faire la chose suivante :
Un exécutable qui charge un autre .exe en mémoire, et qui le lance.
Pour se faire, j'ai utilisé ce code :
Sauf que maintenant je voudrais que mon element.exe ( renommé element.aze afin de faire moins "executable" de l'extérieur ) puisse être modifié afin d'empecher son lancement seul ( genre enlever le "MZ" du début de fichier EXE, ou modifier les premiers octets du code exécutable ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 void __fastcall TForm1::Button1Click(TObject *Sender) { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si,0,sizeof(si)); memset(&pi,0,sizeof(pi)); si.cb = sizeof(si); // if (CreateProcess(NULL,"element.exe",0,0,FALSE,CREATE_DEFAULT_ERROR_MODE,0,0,&siStartupInfo,&piProcessInfo) != false) if (CreateProcess(NULL,"element.aze",0,0,FALSE,CREATE_SUSPENDED,0,0,&si,&pi) != false) { HANDLE buffer; buffer = pi.hProcess; char *buff; buff =(char*) pi.hThread; // tentative de récupérer un pointeur sur le code exécutable : ça ne fonctionne pas :( // attendre la fin de l'execution de l'element.exe ResumeThread(pi.hThread); int ExitCode = WaitForSingleObject(pi.hProcess,20000); MessageBox(0,"2","mklj",0); } }
Est-il possible de récupérer un pointeur sur le code exécutable afin de remettre les premiers octets correctes avant de le lancer.
Je voudrais vraiment le faire uniquement en mémoire, sans modifier le fichier "avant lancement".
Est-ce possible ?
Partager