Comment extraire une section RT_RCDATA d'un exécutable Win32 (de préférence en C #)?
Question
La seule façon pour moi de procéder consiste à ouvrir le fichier EXE dans Visual Studio. J'aimerais pouvoir le faire entièrement en C # si possible. Les autres options incluent:
- P / Invocation de LoadResource () à partir de l'API Win32
- Utiliser un outil existant (quelqu'un en connaît un?)
- D'autres idées?
Merci!
La solution
P / Invoke LoadResource sera votre pari le plus sûr.
Sinon, vous devrez écrire votre propre processeur P / E , par exemple. Exemple de processeur PE . Le processeur n'est pas la fin du monde, mais comme vous pouvez le constater, cela est beaucoup plus complexe qu'un P / Invoke.
Presque oublié, en ce qui concerne les outils, la plupart des navigateurs P / E le feront pour vous. Par exemple. P / E Explorer, qui est disponible mais pas vraiment en cours de développement. J'ai aussi utilisé IDA Pro pour des choses comme celle-là. Un plugin IDA rapide suffirait facilement.
Autres conseils
Je suppose que vous essayez de lire une ressource de type RCDATA à partir d'un exécutable (sachez que "section de l'exécutable" signifie autre chose - il fait référence aux parties .text, .data, .rdata, etc. Fichier PE). Si vous souhaitez le lire à partir de l'assembly en cours, voici un tutoriel montrant comment: Accès aux ressources incorporées à l’aide de GetManifestResourceStream , à l’aide de GetManifestResourceNames et GetManifestResourceStream méthodes.
Si vous ne voulez pas le lire depuis l'exécutable courant, vous pouvez utiliser une méthode similaire à celle présentée ici .
Ces méthodes ont l’avantage sur PInvoke d’être 100% .NET et vous n'avez pas besoin de manipuler les arguments pour / de types de données de plate-forme et de vous assurer que vous avez validé toutes les valeurs de retour.
Il existe une bibliothèque très utile pour de nombreuses tâches-ressources à l'adresse http: //resourcelib.codeplex. .com
De nombreuses classes et fonctions encapsulent ces appels window-api autour de UpdateResource (...)
, etc.