|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() |
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 :
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
|
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Développeur C++\Delphi Inscription : juillet 2006 Messages : 9 202 ![]() |
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 Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié ! |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() |
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
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com