IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

.EXE qui lance un autre exe contenu en lui


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut .EXE qui lance un autre exe contenu en lui
    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 :


    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);
    	}
     
    }
    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 ).

    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 ?
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Le problème c'est que CreateProcess va échouer si ce n'est pas un executable !

    Si "element.aze" est un exe fait en C++Builder, tu peux dans le WinMain gérer un système pour autoriser le lancement, un échange de message entre les deux Exe par exemple, via Pipe, FileMapping, WM_COPYDATA ...

    Pourquoi ne pas faire une DLL au lieu d'un Exe ?

    Si tu n'es pas l'auteur alors

    Un sujet à lire Comment exécuter du code présent uniquement en mémoire ?
    Ecrire dans la partie segment code au runtime

    Tu peux jouer avec CreateProcess en CREATE_SUSPENDED et WriteProcessMemory comme dans ce source C++
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Bonjour Shaï,

    Oui effectivement le code n'est pas de moi.
    J'avais déjà vu les posts sur les DLL sur ce forum mais cela ne correspond malheureusement pas à mon besoin.

    J'essaye d'utiliser la solution "CreateProcess en CREATE_SUSPENDED", modification du contenu de la mémoire, puis lancement du thread.
    J'avais pas mal cherché sur google, je suis tombé sur une personne qui avait réussi à faire ça, mais il n'a pas précisé malheureusement comment il avait écrit en mémoire, je pense que tu as donné une solution avec le "WriteProcessMemory" (et "ReadProcessMemory" j'ai vu aussi).

    Je pense que ce sont les 2 commandes qui peuvent m'aider, cependant je n'ai pas encore compris quels paramètres leur mettre, mais je vais chercher.

    Par contre ce qui m'inquiète le plus, c'est que j'ai reproduis/adapté en C++ builder le code source C++ , en mettant en ressource un .EXE non modifié, il trouve bien la ressource mais au ResumeThread du thread, rien ne se produit ( j'ai pris "notepad.exe" pour tester )

    Bref, j'avance, merci pour le tuyau, je te tiens au courant
    Désolé, on savait pas que c'était impossible, alors on l'a fait

Discussions similaires

  1. Setup qui lance d'autres exe
    Par cjacquel dans le forum VC++ .NET
    Réponses: 0
    Dernier message: 06/07/2015, 18h35
  2. Réponses: 7
    Dernier message: 11/05/2010, 16h54
  3. procedure stockée qui lance d'autre
    Par Soulkeum dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/03/2008, 19h44
  4. Lancer un exe à partir d'un autre exe.
    Par kanea_iza dans le forum Windows
    Réponses: 2
    Dernier message: 15/03/2007, 09h34
  5. Fermer des .exe VB via un autre .exe VB
    Par Gézabel dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 24/10/2005, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo