IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Manipulation de fichier PE


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 46
    Points : 36
    Points
    36
    Par défaut Manipulation de fichier PE
    Bonjour,

    Je cherches de l'aide pour manipuler des sections de fichiers PE ( ex de code C/C++, documentation ou autre ).
    Mon but est de pouvoir inserer des données dans une section et pouvoir les recupérer après.

    Merci de votre aide.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Quelle genre de donnée ? Quelle section ?
    Pourquoi ne pas passer par les ressources ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    Je voudrais mettre un fichier compréssé dans une section data d'un .o, puis le lié à au programme de décompression.

    Ainsi je pourrais mette mon fichier compressé dans un fichier excutable qui se chargera de décompressé les données. L'idée me semble bonne et la structure du format PE me parait rendre cela possible. Le hic c'est que j'y connais rien et que je ne sais pas comment fait pour mettre mon archive dans une section data d'un .o et comment repérer cette section dans le programmation de décompression pour pouvoir récupérer mon fichier compressé.

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Je voudrais mettre un fichier compréssé dans une section data d'un .o
    Il y a quelque chose que je ne comprends pas dans la question. S'il s'agit d'un fichier ".o" c'est un fichier objet utilisé sous les différents unix et qui n'adhère pas à la certification PE (Portable Executable) mais ELF (Executable and Linking Format).

    Si tu travaille sous Windows, les différents binaires au formats PE sont notamment :.exe (Executable) ; .dll (Bibliothèque dynamique) ; .scr (Ecran de veille) ; .sys (driver NT) ; .vxd (driver windows 9x) ; .cpl (panneau de contrôle) , .ocx (active X) ; etc.

    Si tu veux seulement mettre un fichier compressé et t'en servir à l'exécution, met le en ressources (il sera inséré dans la section .rsrc de l'exécutable) et extrait le à l'exécution via les APIs LoadResource() , FindResource(), etc. qui sont là pour ça.

    En espérant que ça réponde un peu à ta question.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    cela parait répondre à mon besoin.

    Peux tu me détailler comment on ajoutes un fichier aux ressources d'un programme ( je suis assez mauvais en programmation windows ), et comment on le recupères de l'executable ?

  6. #6
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Tout dépend de ton IDE, mais on peut faire sans IDE, bien que ça soit un peu plus lourd.

    J'ai mis un exemple en pièce jointe (code source uniquement, pas de binaire).

    Il faut un fichier .rc qui donne le nom de la ressource et son type.(Avec un IDE, comme Visual, on integre la ressource en quelques clics, c'est bcp plus pratique).

    les types de ressources sont visibles ici :

    http://windowssdk.msdn.microsoft.com.../ms648009.aspx

    Quand rien ne correspond à une ressource précise, on utilise le type RT_RCDATA (format binaire) , dans l'exemple c'est ce que j'ai pris pour extraire un simple fichier texte à l'exécution.

    Voilà à quoi ça ressemble (gestion d'erreur minimale...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    int main(void)
    {
    	// On recherche la ressource
    	HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_RT_RCDATA1) , L"RT_RCDATA");
    	if (hRsrc == NULL)
    	{
    		cout << "Impossible de trouver la ressource demandee !" << endl;
    		return 0;
    	}
    
    	//On obtient la taille de la ressource, nécessaire pour l'extraire.
    	DWORD TailleRes = SizeofResource(NULL, hRsrc);
    
    	//on charge la ressource.
    	HGLOBAL hGlob = LoadResource(NULL, hRsrc);
    	if (hGlob == NULL)
    	{
    		cout << "Impossible de charger la ressource !" << endl;
    		return 0;
    	}
    
    	//on fixe la ressource pour avoir un pointeur.
    	PVOID pRessource = LockResource(hGlob);
    
    	//on créé un fichier où on écrira la ressource.
    	HANDLE hFile = CreateFile (L"FichierExtrait.txt",
    		GENERIC_WRITE,
    		FILE_SHARE_READ,
    		NULL,
    		CREATE_ALWAYS,
    		FILE_ATTRIBUTE_NORMAL,
    		NULL);
    	if (hFile == INVALID_HANDLE_VALUE)
    	{
    		cout << "Impossible de creer le fichier !" << endl;
    		return 0;
    	}
    
    	//on écrit la ressource dans le fichier.
    	DWORD NOBW = 0;
    	BOOL bRet = WriteFile(hFile, pRessource, TailleRes, &NOBW, NULL);
    	if (bRet == FALSE)
    	{
    		cout << "Imposible d'écrire le fichier !" << endl;
    		return 0;
    	}
    
    	//fermeture du handle du fichier.
    	CloseHandle (hFile);
    
    	cout << "La ressource a ete extraite et ecrite avec succes !" << endl;
    
    	return 0;
    }
    Tu trouvera les explications sur les différentes API sur la MSDN, par exemple FindResource :

    http://windowssdk.msdn.microsoft.com.../ms648042.aspx

    Voilà, si tu a des questions n'hésites pas
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Fait une petite recherche sur le forum aussi, et regarde voir sur codeproject, il y a des projets pour créer des exe auto extractibles. De mémoire, une technique très simple consiste à rajouter ses données directement à la fin du binaire...
    Regarde voir aussi UPX.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    merci bcp pour tous ces renseignements.

    Un rayon de soleil dans la brume de ma programmation windows ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo