Resource d'un executable [Résolu]

Signaler
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
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.
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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]
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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]