8
votes

Comment puis-je exécuter un exécutable de la RAM en utilisant c ++?

Comment puis-je exécuter un exécutable de la RAM en utilisant c ++?

L'exécutable est en RAM et je connais l'adresse, comment puis-je appeler le programme depuis le mien?


8 commentaires

Étant donné que vous avez étiqueté cela comme c #, car cet exe généré via CodeDom?


Juste curieux - Quel est le système d'exploitation et quel problème essayez-vous de résoudre?


J'imaginerais d'essayer de craquer une certaine application (voir les commentaires de l'armée sur la réponse de Martin).


Vous accédez à une autre instance d'application. Qui devrait être fait en accédant à un processus.


À en juger par cette question et ses autres questions, on dirait qu'il tente d'écrire une sorte de logiciel malveillant en C #. Par exemple. "Bonjour, j'ai un programme C # (.exe), je vais le donner à d'autres personnes et voulons que l'EXE Fourche seulement où elle a été lancée pour la première fois", "


Armée, pourriez-vous indiquer ce que vous essayez de réaliser cela? Sinon, nous devons supposer qu'il serait préférable de ne pas vous aider en premier lieu, mais fermer cette question à la place.


@Adrian. Sa question technique est la même, que sa question soit de savoir s'il a une histoire magique de la raison pour laquelle elle est nécessaire.


@DevinB: Nous devrions donc l'aider à écrire des logiciels malveillants ou des applications de crack?


5 Réponses :


1
votes

Vous voulez dire communiquer avec une autre application qui fonctionne en même temps que la vôtre? Cela dépend du système d'exploitation que vous utilisez. Dans tous les cas, Wikipedia dispose d'un article sur Communication interprocessé , qui montre certaines techniques de base.


0 commentaires

1
votes

de la même manière que vous l'exécuteriez à partir du disque. Votre programme ne sait pas s'il est déjà chargé (c'est-à-dire en RAM) ou sur disque. Ceci est abstraité par le système d'exploitation.


0 commentaires

6
votes

Voulez-vous que vous avez chargé le contenu du fichier EXE dans la RAM et que vous souhaitez maintenant exécuter cet exécutable?

Depuis que vous parlez d'un exe, je suppose que vous courez sous Windows. À ma connaissance, Windows ne peut pas faire cela - votre seule option consiste à enregistrer l'exécutable à un fichier et à exécuter (en utilisant CreateProcess code>, par exemple). P>

edit em> voici comment vous exécuteriez le processus. p>

en C ++: p> xxx pré>

in c #: p>

using System;
using System.Diagnostics;

Process.Start("myfilename.exe");


6 commentaires

YESSSSSSSSSSSS Vous avez raison! Comment puis-je utiliser CreateProcess? MERCI


s'il vous plaît tous les problèmes, c'est que je n'ai pas cet exe dans le disque dur,


Êtes-vous l'auteur de cet autre processus? Si tel est le cas, il serait beaucoup mieux de communiquer avec elle afin qu'il écrive les ressources à un disque dur. Ou utilisez la même ressource d'origine de disque dur en premier lieu.


Pas cher Adrian, je ne suis pas auteur d'un autre processus. Comment puis-je le faire de cette façon?


Merci vous Martin, vous voyez écrire "myfilename.exe", je ne le veux pas, je veux injecter cet exe dans mon programme puis l'appeler, est-ce possible ??


"Injectez-le dans votre programme" - qu'entendez-vous par là? "MyFilename.exe" est juste un exemple - choisissez n'importe quel nom de fichier que vous aimez, puis écrivez votre exe de la mémoire à ce fichier. Si vous utilisez C ++, vous pouvez utiliser ostream :: écrire ou fwrite pour écrire le fichier. Une fois que vous avez écrit le fichier, utilisez CreateProcess pour l'exécuter.



10
votes

Ce genre de choses vient normalement hors des coins sombres du monde. ; -)

En combinaison avec des outils tels que métasploit, il serait idéal de créer un processus juste hors de la RAM. Donc, deux gars ont essayé de réilembler toutes les choses qui se produisent dans CreateProcess (). Après un certain temps, ils viennent de découvrir que c'est beaucoup trop complexe (voir Ce PDF site 12f) Pour que cela fonctionne et ils ont essayé de trouver une autre solution et voici: Ils appellent une création normale () avec un programme commun (par exemple NotePad.exe), mais ils le démarrent avec ThreadsUSPendus. Ensuite, ils ont injecté un nouveau fil dans ce processus, qui sera rempli de mémoire. Ensuite, ils ont dit à ce fil de courir et ils ont donc obtenu un nouveau processus rempli de mémoire.

C'est donc juste la grande image et c'est un désordre entier (et normalement pas la bonne façon) de faire ce genre de choses. Si vous êtes vraiment intéressé par cette partie, vous avez une idée de rechercher.

Et au fait, ne pensez pas que vous puissiez le faire en C #. Ceci est normalement fait en C / C ++ ou même assembleur ...


4 commentaires

BTW, pourriez-vous préciser ce qui est si difficile dans la première approche?


@jpalecek: Que voulez-vous dire avec première approche ? Si vous voulez dire créer un processus sur vous-même. Que je ne peux que dire que je me souviens d'un article, où certains gars intelligents viennent d'abandonner. Peut-être que certains mots-clés de mon article peuvent vous aider à le retrouver à nouveau. Si vous vouliez commencer un processus avec ThreadSuspended, que vous allez savoir comment vous injectez un nouveau fil dans un processus existant. Parce que cela n'est également pas assez facile (mais plus facile que d'essayer de créer un processus sur vous-même).


Par la première approche, je voulais créer le processus moi-même. J'ai googlé un peu et j'ai trouvé ceci: bytes.com/topic/python/ Réponses / 585637-Execute-Code binaire Pentest.Cryptocity .NET / Fichiers / Exploitation / Winasm-1.0.1.pdf Il semble que la partie Fourche () - comme une partie est difficile. Je ne sais pas si OP a besoin de forking.


@jpalecek: Votre deuxième lien est exactement le document que j'avais à l'esprit quand j'ai écrit ma réponse. Je vais le mettre à jour.



1
votes

MABYE Cela pourrait vous aider: http: //www.codeproject .Com / Articles / 13897 / CHARGE-AN-EXE-FILE-AND-RUN-IT-DU MEMOIRE

PS: écrire un logiciel malveillant n'est pas illégal (im la plupart des pays;)) L'utilisation est!


0 commentaires