Resource d'un executable

Résolu
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 23 mai 2009 à 11:26
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 24 mai 2009 à 11:31
Yop à tous,

Voila , je voudrait savoir si il est possible d'extraire des resource d'un executable. Attention ici je parle d'un fichier .exe qui n'est pas éxécuté. Car j'ai trouvé qu'il était possible d'en ajouter avec BeginUpdateResource & UpdateResource sans pour autant devoir executer le programme. Alors est-il possible de les extraire pareilment ? j'ai cherché mais je n'ai rien trouvé, avec LoadResource il faut un hmodule, mais je n'ai pas trouvé de fonction qui permet de récupérer ce handle d'un fichier dont le programme n'est pas éxécuté en mémoire.

J'espère avoir été claire pour énoncer mon problème :s .

Merci d'avance pour vos réponse.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]

4 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 mai 2009 à 18:54
Salut,

A mon avis tu as bien raison de rester au C :) d'autant qu'ici c'est bien suffisant.
Pour l'avoir fait, je te dis qu'il n'y a aucun problème pour extraire toutes les ressources d'un executable.
Pour obtenir ton HMODULE, utilise LoadLibraryEx avec le flag DONT_RESOLVE_DLL_REFERENCES.
Ensuite tu peux parcourir les ressources avec les fonction EnumXXX, puis FindResource, LoadResource, LockResource et c'est gagné.

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
23 mai 2009 à 14:20
Salut,

Ta question m'a fait penser à la démo "ResXplor" fournit avec Delphi 6. C'est juste une démo, donc elle va pas chercher bien loin, mais quand même :

[troll]
Ma fois si tu veux te mettre au Delphi, c'est l'occasion. Delphi 6.Serial.
/troll

Je viens de jeter un coup d'oeil au code.
Globalement, c'est basé sur le format PE. Référence ici.

Il ouvre le fichier en le mappant CreateFile/CreateFileMapping/MapViewOfFile.
Puis il lit l'entête pour trouver les ressources.
C'est un petit jeu avec des pointeurs, et en utilisant quelques structures style IMAGE_NT_HEADERS.
Rien de compliqué, tout est détaillé dans la doc.

Pour charger les bitamps, il utilise une fonction Delphi (LoadFromStream).
Pour les icônes il a l'air d'utiliser CreateIconFromResource qui prend un pointeur en argument.

Concernant la récupération d'un HMODULE sans exécuter le .exe... MapViewofFile prend en argument FILE_MAP_EXECUTE, et il me semble qu'il y a une autre méthode pour charger un fichier de la même manière que le loader de windows, mais je n'ai plus le nom de la fonction en tête.
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
23 mai 2009 à 15:31
Merci pour ta réponse,

Oui effectivement les headers est la piste que je m'apprete à suivre si aucune fonctions n'existe, mais je me dit que si il y à moyen via les API d'insérer des resource dans un exe, pourquoi n'y aurait-il pas moyen d'en extraire de la même manière.

PS : Non j'aime trop le C que pour passer au Delphi ^^

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
24 mai 2009 à 11:31
LoadLibraryEx c'était ma fonction manquante , enfin plutot le DONT_RESOLVE_DLL_REFERENCE ^^ Merci beaucoup Vecchio :) Effectivement avec le hModule ça va tout seul après .

Par contre je vien de lire


<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" /><title></title><meta name="GENERATOR" content="OpenOffice.org 2.4 (Linux)" /><style type="text/css"><!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0cm }
--></style>Microsoft
Portable Executable and Common Object File Format
Specification

et je pense que dans un proche avenir , je vais faire un petit programme qui permetra de lire les headers des .exe :p Car cela ma paru fort intéressant. Au moin avec ça on sait ce que représente toute ces valeur hexa quand on ouvre un exe avec ce genre d'éditeur :)
++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
Rejoignez-nous