deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 2016
-
23 mai 2009 à 11:26
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDerniè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 .
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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é.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 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
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 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]