6
votes

Comment puis-je extraire des images du fichier .Resources créé par un décompilement d'un assembly .NET?

Je travaille sur la récupération de la source d'une demande de mine. J'ai réussi à récupérer le code d'application à l'aide de réflecteur .NET . Mais maintenant, je veux noué le code et recréer les formulaires individuels afin que je dispose des fichiers de codebehind, de concepteur et de résex pour chaque formulaire. Le problème est que toutes les images sont situées dans des fichiers "resources ". Comment extraire les images de ces fichiers "resources "générés par le réflecteur?

Je préférerais utiliser un outil, plutôt que d'avoir à extraire les images par programmation, mais je vais recourir au code si je ne trouve pas de demande appropriée. Nous espérons donc que quelqu'un l'a fait avant ou connaît un spectateur (de préférence gratuit!) Pour ces fichiers de ressources qui me permettraient d'extraire les images. Sinon, le code est aussi bon; Comme je pouvais alors écrire ma propre petite application pour extraire les images.


2 commentaires

Le réflecteur peut aussi faire cela, ouvrez le nœud de ressources d'un assemblage. Cliquez avec le bouton droit sur la ressource et sélectionnez Enregistrer sous.


J'ai essayé d'extraire les images avec un réflecteur, mais aussi loin que je peux le voir, le réflecteur ne fait que sauver le fichier .resources, il ne vous permet pas d'enregistrer les bitmaps contenus dans ces fichiers au format BMP ... à moins que je ne manque quelque chose? Il donne une liste des bitmaps lorsque vous sélectionnez un fichier .resources, mais lorsque j'ai le droit de cliquer sur le bitmap, une option "Enregistrer sous" est malheureusement grisée. Ceci est peut-être une fonctionnalité dans une version payante qui manque dans la version d'essai que j'utilise?


4 Réponses :


6
votes

iLspy devrait faire ce travail - voir fonctionnalités à http: // wiki. sharpdevelop.net/ilspy.ashx et la capture d'écran ci-dessous.

capture d'écran


3 commentaires

Cela vous permet seulement d'enregistrer les ressources en tant que fichier .resources. Pour autant que je sache, cela ne vous permet pas d'extraire les images bitmap du fichier de ressources.


Bizarre, la capture d'écran a un bouton de sauvegarde pour chaque bitmap


Salut poupou. Merci d'avoir essayé d'aider. Ouais, cette capture d'écran est trompeuse et la fait ressembler à cela, mais cela ne vous permet pas de sauvegarder des images contenues dans un fichier .Resources . Dans mon cas, si je sélectionne le dossier ressources dans la capture d'écran, je reçois une liste de fichiers de ressources, comme la première entrée de l'image. Donc, dans mon cas, aucune des entrées énumérées n'est réelle des fichiers BMP, mais des fichiers de ressources contenant les bitmaps. Si j'appuie les fichiers de ressources dans le réflecteur, je peux voir une liste des bitmaps que chaque fichier contient, mais ne peut pas enregistrer ces fichiers bitmaps individuels sur le disque.



10
votes

3 commentaires

Merci, sépulka. J'ai testé le programme que vous avez lié ici et cela fonctionne bien. :) J'ai aussi trouvé ce programme que j'ai aussi utilisé, Jasonhaley.com/blog/post/2005/10/09/... . Merci pour votre aide.


Malheureusement, la solution de codeProject ne reconnaît pas mon projet bâti comme assemblage. La réponse de Clive Tong a travaillé pour moi.


+1 - Le projet CodeProject.com est ancien (.NET 2.0 VS2008 PRK) - Assurez-vous donc de mettre à jour et de recompiler la version de .NET que vous utilisez maintenant. Fonctionne parfaite pour moi dans VS2017 .NET 4.5.



27
votes

Vous pouvez enregistrer le fichier .resources puis utiliser l'outil ResGen (partie des outils VS2010) pour le convertir dans un fichier .resx , à l'aide d'une commande Ligne comme: xxx

Le .resx peut ensuite être ajouté à un projet C #. Une fois que vous avez fait cela, si vous essayez d'ouvrir les images individuelles, VS2010 proposera de les extraire dans un fichier image autonome.


1 commentaires

+1! Le libre VS2013 Community Edition est aussi capable ouvrir des fichiers .resx et extraire des trucs de celui-ci.



-1
votes

JustDecompile peut le faire. Vous pouvez cliquer avec le bouton droit sur une ressource et sélectionner Enregistrer dans le menu contextuel.


1 commentaires

Essayé, ça ne le fait pas. Il s'agit simplement d'une chaîne system.byte [] .