cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014
-
6 janv. 2002 à 20:16
ennixo
Messages postés224Date d'inscriptionsamedi 25 janvier 2003StatutMembreDernière intervention17 juin 2006
-
28 août 2003 à 10:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
ennixo
Messages postés224Date d'inscriptionsamedi 25 janvier 2003StatutMembreDernière intervention17 juin 2006 28 août 2003 à 10:26
(erf je vais me faire des ennemis...) voilà de quoi récupérer des infos PE :
D'ABORD le MZ
Public Const MZ_SIGNATURE As Long = &H5A4D
Public Type MZ_HEADER
Signature As Integer ' MZ
BytesOnLastPage As Integer ' le nombre d'octets de la dernière page
NumberOfPages As Integer ' le nombre de pages
Relocations As Integer ' relocations
HeaderSize As Integer ' taille du header en paragraphes
MinAlloc As Integer ' minimum de paragraphes requis
MaxAlloc As Integer ' maximum de paragraphes requis
InitSS As Integer ' valeur SS initiale
InitSP As Integer ' valeur SP initiale
CheckSum As Integer ' CheckSum (?)
InitIP As Integer ' valeur IP initiale
InitCS As Integer ' valeur CS initiale
RelocAddress As Integer ' adresse (dans le fichier) de la table de relocations
Overlay As Integer ' Overlay
Reserved1(3) As Integer ' réservé
OemID As Integer ' identificateur OEM
OemInfo As Integer ' information OEM
Reserved2(9) As Integer ' réservé
NextHeaderAddress As Long ' adresse (fichier) du nouveau header de l'exécutable
End Type
ET LE PE :
' ======================================================================================== _
CONSTANTES
' ========================================================================================
Public Const PE_SIGNATURE As Long = &H4550 ' Signature d'un fichier PE
'constantes possibles pour Machine dans PE_HEADER
Public Const PE_HEADER_MACHINE_NONE As Long = &H0& 'Toutes les machines ?
Public Const PE_HEADER_MACHINE_I860 As Long = &H14D 'Intel i860
Public Const PE_HEADER_MACHINE_I386 As Long = &H14C 'Intel i386
Public Const PE_HEADER_MACHINE_I486 As Long = &H14D 'Intel i486
Public Const PE_HEADER_MACHINE_I586 As Long = &H14E 'Intel Pentium
Public Const PE_HEADER_MACHINE_MR3000B As Long = &H160 'MIPS R3000, big endian
Public Const PE_HEADER_MACHINE_MR3000L As Long = &H162 'MIPS R3000, little endian
Public Const PE_HEADER_MACHINE_MR4000L As Long = &H166 'MIPS R4000, little endian
Public Const PE_HEADER_MACHINE_MR10000L As Long = &H166 'MIPS R4000, little endian
Public Const PE_HEADER_MACHINE_DAAXP As Long = &H183 'DEC Alpha AXP
'valeurs possibles pour Characteristics dans PE_HEADER
Public Const PE_HEADER_CHRSTCS_NORELOC As Long = &H1 ' Pas de relocation
Public Const PE_HEADER_CHRSTCS_EXECUTABLE As Long = &H2 ' le fichier est un exécutable (pas objet ni librairie)
Public Const PE_HEADER_CHRSTCS_DLL As Long = &H2000 ' le fichier est une DLL
'valeurs possibles pour Magic dans PE_OPTIONALHEADER
Public Const PE_OPTHEADER_MAGIC_PE32 As Long = &H10B ' PE32
Public Const PE_OPTHEADER_MAGIC_PE32Plus As Long = &H20B ' PE32+
Public Const PE_OPTHEADER_MAGIC_ROM As Long = &H107 ' ROM
'valeurs de SubSystem possibles dans PE_OPTIONALHEADER
Public Const PE_OPTHEADER_SUBSYS_UNKNOWN As Integer = 0 ' Inconnu
Public Const PE_OPTHEADER_SUBSYS_NATIVE As Integer = 1 ' Natif (pas besoin de sous-système)
Public Const PE_OPTHEADER_SUBSYS_WINDOWSGUI As Integer = 2 ' Interface Windows
Public Const PE_OPTHEADER_SUBSYS_WINDOWSC As Integer = 3 ' Console windows
Public Const PE_OPTHEADER_SUBSYS_OS2C As Integer = 5 ' Console OS/2
Public Const PE_OPTHEADER_SUBSYS_POSIXC As Integer = 7 ' Console Posix
Public Const PE_OPTHEADER_SUBSYS_NATIVEWINDOWS As Integer = 8 ' Driver natif Win9x
Public Const PE_OPTHEADER_SUBSYS_WINDOWSCEGUI As Integer = 9 ' Windows CE
'valeurs possibles pour DllCharacteristics dans PE_OPTIONALHEADER
Public Const PE_OPTHEADER_DLLCHRSTCS_DLLLOAD As Long = &H1 ' quand la Dll est chargée
Public Const PE_OPTHEADER_DLLCHRSTCS_THREADTERMINATE As Long = &H2 ' quand le thread est déchargé
Public Const PE_OPTHEADER_DLLCHRSTCS_THREADSTARTS As Long = &H4 ' quand le thread est chargé
Public Const PE_OPTHEADER_DLLCHRSTCS_DLLEXIT As Long = &H8 ' quand la Dll est déchargée
'valeurs AnsiName possibles dans PE_SECTIONTABLE
Public Const PE_SECTIONTABLE_ANSINAME_EXECUTABLECODE As String = ".text" ' Code exécutable du programme
Public Const PE_SECTIONTABLE_ANSINAME_CODE As String = ".code" ' Code exécutable du programme
Public Const PE_SECTIONTABLE_ANSINAME_CODE2 As String = "CODE" ' Code exécutable du programme
Public Const PE_SECTIONTABLE_ANSINAME_DATA1 As String = ".data" ' Variables globales ou de programme
Public Const PE_SECTIONTABLE_ANSINAME_DATA2 As String = ".rdata" ' Données en lecture seule (constantes)
Public Const PE_SECTIONTABLE_ANSINAME_DATA3 As String = ".bss" ' Données non initialisées (variables locales ?)
Public Const PE_SECTIONTABLE_ANSINAME_DATA4 As String = "DATA" ' Variables globales ou de programme
Public Const PE_SECTIONTABLE_ANSINAME_DATA5 As String = "BSS" ' Données non initialisées (variables locales ?)
Public Const PE_SECTIONTABLE_ANSINAME_RELOC As String = ".reloc" ' Relocations
Public Const PE_SECTIONTABLE_ANSINAME_RESOURCE As String = ".rsrc" ' Ressources
Public Const PE_SECTIONTABLE_ANSINAME_EXPORT As String = ".edata" ' Exports
Public Const PE_SECTIONTABLE_ANSINAME_IMPORT As String = ".idata" ' Imports
Public Const PE_SECTIONTABLE_ANSINAME_DEBUG As String = ".debug" ' Informations de debug
Public Const PE_SECTIONTABLE_ANSINAME_TLS As String = ".tls" ' Stockage Local De Fil
'valeurs Characteristics dans PE_SECTIONTABLE
Public Const PE_SECTIONTABLE_CHRSTCS_TYPE_NO_PAD As Long = &H8 ' Réservé
Public Const PE_SECTIONTABLE_CHRSTCS_CNT_CODE As Long = &H20 ' Contient du code
Public Const PE_SECTIONTABLE_CHRSTCS_CNT_INITIALIZED_DATA As Long = &H40 ' Contient des données initialisées
Public Const PE_SECTIONTABLE_CHRSTCS_CNT_UNINITIALIZED_DATA As Long = &H80 ' Contient des données non initialisées
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_OTHER As Long = &H100 ' Reservé
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_INFO As Long = &H200 ' Contient des commentaires
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_REMOVE As Long = &H800 ' Ne fait pas partie de l'image
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_COMDAT As Long = &H1000 ' Contient du "comdat"
Public Const PE_SECTIONTABLE_CHRSTCS_NO_DEFER_SPEC_EXC As Long = &H4000 ' ? Reset speculative exceptions handling
Public Const PE_SECTIONTABLE_CHRSTCS_GPREL As Long = &H8000 ' ? Section content can be accessed to GP
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_FARDATA As Long = &H8000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_PURGEABLE As Long = &H20000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_16BIT As Long = &H20000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_LOCKED As Long = &H40000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_PRELOAD As Long = &H80000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_1BYTES As Long = &H100000 ' Ces constantes contienent des alignements
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_2BYTES As Long = &H200000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_4BYTES As Long = &H300000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_8BYTES As Long = &H400000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_16BYTES As Long = &H500000 ' (par défaut si aucun).
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_32BYTES As Long = &H600000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_64BYTES As Long = &H700000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_128BYTES As Long = &H800000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_256BYTES As Long = &H900000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_512BYTES As Long = &HA00000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_1024BYTES As Long = &HB00000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_2048BYTES As Long = &HC00000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_4096BYTES As Long = &HD00000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_8192BYTES As Long = &HE00000
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_NRELOC_OVFL As Long = &H1000000 ' Contient des relocations étendues
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_DISCARDABLE As Long = &H2000000 ' Section peut être ignorée
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_NOT_CACHED As Long = &H4000000 ' Section non cachable
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_NOT_PAGED As Long = &H8000000 ' Section non non pageable
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_SHARED As Long = &H10000000 ' Section partageable
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_EXECUTE As Long = &H20000000 ' Section executable
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_READ As Long = &H40000000 ' Section lisible
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_WRITE As Long = &H80000000 ' Section inscriptible
' ======================================================================================== _
TYPES DE DONNEES
' ========================================================================================
'Header du fichier PE
Public Type PE_HEADER
Signature As Long ' = PE_SIGNATURE
Machine As Integer ' le CPU
NumberOfSections As Integer ' Le nombre de sections du fichier
TimeDateStamp As Long ' Nombre de secondes entre le 31 décembre 1969 à 16h00 et la création du fichier
PointerToSymbolTable As Long ' l'offset de la table des symbols COFF (seulement fichiers OBJ et fichiers avec debug)
NumberOfSymbols As Long ' Nombre de symbols dans la table COFF
SizeOfOptionalHeader As Integer ' taille du header optional (juste après ce header)
Characteristics As Integer ' Diverses informations sur le fichier
End Type
'Header optionel (pourtant toujours présent) du fichier PE
Public Type PE_OPTIONALHEADER
Magic As Integer ' toujours égal à 267
MajorLinkerVersion As Byte ' version(M) du "Linker" qui a produit le fichier
MinorLinkerVersion As Byte ' version(m) du "Linker" qui a produit le fichier
SizeOfCode As Long ' Le total de la taille arrondie des sections de code
SizeOfInitData As Long ' Taille totale de toutes les sections composées de données initialisées (?)
SizeOfUninitData As Long ' ?? : The size of the sections that the loader commits space for in the virtual address space, but that don't take up any space in the disk file
AddressOfEntryPoint As Long ' Le point d'entrée de l'exécution du programme
BaseOfCode As Long ' le RVA d'où le code du fichier commence
BaseOfData As Long ' le RVA d'où les données du fichier commencent
ImageBase As Long ' l'endroit de la mémoire ou le programme doit être mappé
SectionAlignment As Long ' quand le fichier est mappé, chaque section est dans une adresse virtuelle qui est un multiple de cette valeur
FileAlignment As Long ' dans le fichier les données Raw dans chaque section sont un multiple de cette valeur
MajorOSVersion As Integer ' la version(M) mininimum de l'OS pour cet exécutable
MinorOSVersion As Integer ' la version(m) mininimum de l'OS pour cet exécutable
MajorImageVersion As Integer ' Version(M) de l'exécutable
MinorImageVersion As Integer ' Version(m) de l'exécutable
MajorSubsystemVersion As Integer ' Version(M) minimum du sous-sytème pour lancer l'exécutable
MinorSubsystemVersion As Integer ' Version(m) minimum du sous-sytème pour lancer l'exécutable
Win32VersionValue As Long ' ?
SizeOfImage As Long ' Taille de toutes les sections combinées
SizeOfHeaders As Long ' Taille du PEHeader et de la table des sections
CheckSum As Long ' CheckSum CRC
SubSystem As Integer ' le type de sous-système que l'exécutable use pour son interface
DllCharacteristics As Integer ' Flag d'informations sur l'initialisation d'une DLL (ignoré, toujours 0)
SizeOfStackReserve As Long ' Mémoire virtuelle à réserver pour le stack du thread initial
SizeOfStackCommit As Long ' mémoire virtuelle initialiement donnée pour le stack du thread initial
SizeOfHeapReserve As Long ' Mémoire virtuelle à réserver pour le heap du processus initial
SizeOfHeapCommit As Long ' mémoire virtuelle initialiement donnée pour le heap du processus initial
LoaderFlags As Long ' en rapport avec le débug
NumberOfDataDirectories As Long ' le nombre d'entrées dans le tableau DataDirectory
End Type
Public Type PE_DATADIRECTORY
DirectoryVA As Long ' Adresse virtuelle du dossier
DirectorySize As Long ' Taille du dossier
End Type
'tableau des sections
Public Type PE_SECTIONTABLE
ANSIName As String * 8 ' Nom de la section (peut être vide)
VirtualSize As Long ' Taille de la section quand elle est mappée dans la mémoire (doit être un multiple de 4096)
VirtualAddress As Long ' le RVA ou il doit être chargée dans la mémoire
SizeOfRawData As Long ' La taille de la section dans l'exécutable (doit être un multiple de 512)
PointerToRawData As Long ' offset dans le fichier qui point vers cette section
PointerToRelocations As Long ' dans l'exécutable cette valeur n'a pas de sens
PointerToLineNumbers As Long ' Offset dans le fichier vers la table des numéros de ligne. utilisé pour le débug
NumberOfRelocations As Integer ' dans l'exécutable cette valeur n'a pas de sens
NumberOfLineNumbers As Integer ' nombre de numéros de ligne. utilisé pour le débug
Characteristics As Long ' le type de données dans cette section (code, data, import, reloc...)
End Type
'dossier de relocation
Public Type PE_DIRECTORY_RELOCATION
VAAndSize As Long 'contient l'adresse virtuelle et la taille (4 | 12)
End Type
'dossier d'export
Public Type PE_DIRECTORY_EXPORT
RVAFunctionNameList As Long ' RVA vers une liste de pointeur. chacun point vers un nom de fonction.
TimeDateStamp As Long ' le TimeStamp qui indique quand le fichier a été créé
MajorVersion As Integer ' Version(M) de la fonction
MinorVersion As Integer ' Version(m) de la fonction
ExportName As Long ' RVA vers le nom du dossier
ExportBase As Long ' ??
NumberOfFunctions As Long ' nombre de fonctions
NumberOfNames As Long ' nombre de noms
AddressOfFunctions As Long ' pointeur vers liste des fonctions
AddressOfNames As Long ' pointeur vers liste des noms
AddressOfNameOrdinals As Long ' pointeur vers liste des noms ordinaux
End Type
'dossier d'import
Public Type PE_DIRECTORY_IMPORT
RVAFunctionNameList As Long ' RVA vers une liste de pointeur. chacun point vers un nom de fonction.
TimeDateStamp As Long ' le TimeStamp qui indique quand le fichier a été créé
ForwarderChain As Long ' indique une référece de la dll vers une autre dll
PointerToName As Long ' RVA vers la chaine terminée par un NULL qui contient le nom de la DLL importée
FirstThunk As Long ' RVA vers une liste de pointeurs qui pointent vers des noms de fonctions
End Type
'dossier de ressource
Public Type PE_DIRECTORY_RESOURCE
Characteristics As Long ' Flag
TimeDateStamp As Long ' le TimeStamp
MajorVersion As Integer ' version(M) de la ressource
MinorVersion As Integer ' version(m) de la ressource
NumberOfNamedEntries As Integer ' nombre d'entrées nommées
NumberOfIdEntries As Integer ' nombre d'identificateurs d'entrées
End Type
'entrée de ressource
Public Type PE_DIRECTORY_RESOURCEENTRY
PointerToName As Long ' pointeur vers le nom
PointerToResData As Long ' pointeur vers une serction RESOURCEDATA
End Type
'données de ressource
Public Type PE_DIRECTORY_RESOURCEDATA
PointerToData As Long ' pointeur vers les données
DataSize As Long ' taille des données
CodePage As Long ' ?
Reserved As Long ' réservé
End Type
'dossier de débug
Public Type PE_DIRECTORY_DEBUG
Characteristics As Long ' Flag
TimeDateStamp As Long ' le TimeStamp
MajorVersion As Integer ' version(M) du debug
MinorVersion As Integer ' version(m) du debug
DebugType As Long ' ?
DataSize As Long ' taille du debug
AddressOfRawData As Long ' ?
PointerToRawData As Long ' ?
End Type
ennixo
Messages postés224Date d'inscriptionsamedi 25 janvier 2003StatutMembreDernière intervention17 juin 2006 28 août 2003 à 10:24
c'est un peu codé comme un porcasse..... c dla récup de données vraiment à l'arrache ça ! pourtant je peux vous dire que les infos VB sont placées a un endroit bien précis du fichier EXE... renseignez-vous sur les fichiers PE et commencez par là...
hex_man
Messages postés28Date d'inscriptionmercredi 21 novembre 2001StatutMembreDernière intervention12 décembre 2007 28 févr. 2003 à 00:18
je vosi ke ça bosse dure eet k'il y a des adeptes, c bin tout ça ça va faire rager les coincer du cul de vbfrance avec leurs sources ki valent de l'or ;)
pour ceux ke ça intéresse je v bientot poster une ocx de decompilation objet, donc en gros le moteur de recherche objet sera tout fait , plus k'a l'insérer dans vois projet et amusez vous les mecs ;)
au fait merci nixou pour le sponsoring de message ;)
HEXMAN
cs_FredT
Messages postés65Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention11 avril 2009 23 févr. 2003 à 15:55
Excellent Mémère, j'adore tes commentaires, surtout quand y sont terriblement adaptés à la question comme ici. ;-)
cs_shivan
Messages postés363Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention25 août 2003 7 janv. 2002 à 12:37
mouarf !!! ok memere !!!! fo arreter la fumette grand !!! ;-p
A++ et bonne prog !
cs_cyrilp
Messages postés140Date d'inscriptionmercredi 4 octobre 2000StatutMembreDernière intervention12 août 2009 7 janv. 2002 à 10:21
Sympa, vivement qu'on puisse carrement récuperer la liste des contrôles !!!
cs_Mémère
Messages postés222Date d'inscriptionsamedi 24 mars 2001StatutMembreDernière intervention24 juin 2007 7 janv. 2002 à 10:06
gosney > nan tu peux aussi décompiler des programmes linux si ton kernel est en 2.4 [ USB oblige ] ou si ta carte graphique est connectée parallèlement à ton disque dur sur la FIFO primaire.
cs_zappy
Messages postés161Date d'inscriptionmardi 19 juin 2001StatutMembreDernière intervention10 avril 20072 7 janv. 2002 à 09:53
Salut, ton code fonctionne uniquement avec du code généré par VB ?
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 6 janv. 2002 à 20:25
Ya des souce + 1 .exe
- Le .exe sert à tester tout simplement parce qu'il contient beaucoups de forme et de control (IL servira au control Lister)
Donner vos commentaire :))))))))!!!!!!!!!!
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 6 janv. 2002 à 20:16
28 août 2003 à 10:26
D'ABORD le MZ
Public Const MZ_SIGNATURE As Long = &H5A4D
Public Type MZ_HEADER
Signature As Integer ' MZ
BytesOnLastPage As Integer ' le nombre d'octets de la dernière page
NumberOfPages As Integer ' le nombre de pages
Relocations As Integer ' relocations
HeaderSize As Integer ' taille du header en paragraphes
MinAlloc As Integer ' minimum de paragraphes requis
MaxAlloc As Integer ' maximum de paragraphes requis
InitSS As Integer ' valeur SS initiale
InitSP As Integer ' valeur SP initiale
CheckSum As Integer ' CheckSum (?)
InitIP As Integer ' valeur IP initiale
InitCS As Integer ' valeur CS initiale
RelocAddress As Integer ' adresse (dans le fichier) de la table de relocations
Overlay As Integer ' Overlay
Reserved1(3) As Integer ' réservé
OemID As Integer ' identificateur OEM
OemInfo As Integer ' information OEM
Reserved2(9) As Integer ' réservé
NextHeaderAddress As Long ' adresse (fichier) du nouveau header de l'exécutable
End Type
ET LE PE :
' ======================================================================================== _
CONSTANTES
' ========================================================================================
Public Const PE_SIGNATURE As Long = &H4550 ' Signature d'un fichier PE
'constantes possibles pour Machine dans PE_HEADER
Public Const PE_HEADER_MACHINE_NONE As Long = &H0& 'Toutes les machines ?
Public Const PE_HEADER_MACHINE_I860 As Long = &H14D 'Intel i860
Public Const PE_HEADER_MACHINE_I386 As Long = &H14C 'Intel i386
Public Const PE_HEADER_MACHINE_I486 As Long = &H14D 'Intel i486
Public Const PE_HEADER_MACHINE_I586 As Long = &H14E 'Intel Pentium
Public Const PE_HEADER_MACHINE_MR3000B As Long = &H160 'MIPS R3000, big endian
Public Const PE_HEADER_MACHINE_MR3000L As Long = &H162 'MIPS R3000, little endian
Public Const PE_HEADER_MACHINE_MR4000L As Long = &H166 'MIPS R4000, little endian
Public Const PE_HEADER_MACHINE_MR10000L As Long = &H166 'MIPS R4000, little endian
Public Const PE_HEADER_MACHINE_DAAXP As Long = &H183 'DEC Alpha AXP
'valeurs possibles pour Characteristics dans PE_HEADER
Public Const PE_HEADER_CHRSTCS_NORELOC As Long = &H1 ' Pas de relocation
Public Const PE_HEADER_CHRSTCS_EXECUTABLE As Long = &H2 ' le fichier est un exécutable (pas objet ni librairie)
Public Const PE_HEADER_CHRSTCS_DLL As Long = &H2000 ' le fichier est une DLL
'valeurs possibles pour Magic dans PE_OPTIONALHEADER
Public Const PE_OPTHEADER_MAGIC_PE32 As Long = &H10B ' PE32
Public Const PE_OPTHEADER_MAGIC_PE32Plus As Long = &H20B ' PE32+
Public Const PE_OPTHEADER_MAGIC_ROM As Long = &H107 ' ROM
'valeurs de SubSystem possibles dans PE_OPTIONALHEADER
Public Const PE_OPTHEADER_SUBSYS_UNKNOWN As Integer = 0 ' Inconnu
Public Const PE_OPTHEADER_SUBSYS_NATIVE As Integer = 1 ' Natif (pas besoin de sous-système)
Public Const PE_OPTHEADER_SUBSYS_WINDOWSGUI As Integer = 2 ' Interface Windows
Public Const PE_OPTHEADER_SUBSYS_WINDOWSC As Integer = 3 ' Console windows
Public Const PE_OPTHEADER_SUBSYS_OS2C As Integer = 5 ' Console OS/2
Public Const PE_OPTHEADER_SUBSYS_POSIXC As Integer = 7 ' Console Posix
Public Const PE_OPTHEADER_SUBSYS_NATIVEWINDOWS As Integer = 8 ' Driver natif Win9x
Public Const PE_OPTHEADER_SUBSYS_WINDOWSCEGUI As Integer = 9 ' Windows CE
'valeurs possibles pour DllCharacteristics dans PE_OPTIONALHEADER
Public Const PE_OPTHEADER_DLLCHRSTCS_DLLLOAD As Long = &H1 ' quand la Dll est chargée
Public Const PE_OPTHEADER_DLLCHRSTCS_THREADTERMINATE As Long = &H2 ' quand le thread est déchargé
Public Const PE_OPTHEADER_DLLCHRSTCS_THREADSTARTS As Long = &H4 ' quand le thread est chargé
Public Const PE_OPTHEADER_DLLCHRSTCS_DLLEXIT As Long = &H8 ' quand la Dll est déchargée
'valeurs AnsiName possibles dans PE_SECTIONTABLE
Public Const PE_SECTIONTABLE_ANSINAME_EXECUTABLECODE As String = ".text" ' Code exécutable du programme
Public Const PE_SECTIONTABLE_ANSINAME_CODE As String = ".code" ' Code exécutable du programme
Public Const PE_SECTIONTABLE_ANSINAME_CODE2 As String = "CODE" ' Code exécutable du programme
Public Const PE_SECTIONTABLE_ANSINAME_DATA1 As String = ".data" ' Variables globales ou de programme
Public Const PE_SECTIONTABLE_ANSINAME_DATA2 As String = ".rdata" ' Données en lecture seule (constantes)
Public Const PE_SECTIONTABLE_ANSINAME_DATA3 As String = ".bss" ' Données non initialisées (variables locales ?)
Public Const PE_SECTIONTABLE_ANSINAME_DATA4 As String = "DATA" ' Variables globales ou de programme
Public Const PE_SECTIONTABLE_ANSINAME_DATA5 As String = "BSS" ' Données non initialisées (variables locales ?)
Public Const PE_SECTIONTABLE_ANSINAME_RELOC As String = ".reloc" ' Relocations
Public Const PE_SECTIONTABLE_ANSINAME_RESOURCE As String = ".rsrc" ' Ressources
Public Const PE_SECTIONTABLE_ANSINAME_EXPORT As String = ".edata" ' Exports
Public Const PE_SECTIONTABLE_ANSINAME_IMPORT As String = ".idata" ' Imports
Public Const PE_SECTIONTABLE_ANSINAME_DEBUG As String = ".debug" ' Informations de debug
Public Const PE_SECTIONTABLE_ANSINAME_TLS As String = ".tls" ' Stockage Local De Fil
'valeurs Characteristics dans PE_SECTIONTABLE
Public Const PE_SECTIONTABLE_CHRSTCS_TYPE_NO_PAD As Long = &H8 ' Réservé
Public Const PE_SECTIONTABLE_CHRSTCS_CNT_CODE As Long = &H20 ' Contient du code
Public Const PE_SECTIONTABLE_CHRSTCS_CNT_INITIALIZED_DATA As Long = &H40 ' Contient des données initialisées
Public Const PE_SECTIONTABLE_CHRSTCS_CNT_UNINITIALIZED_DATA As Long = &H80 ' Contient des données non initialisées
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_OTHER As Long = &H100 ' Reservé
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_INFO As Long = &H200 ' Contient des commentaires
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_REMOVE As Long = &H800 ' Ne fait pas partie de l'image
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_COMDAT As Long = &H1000 ' Contient du "comdat"
Public Const PE_SECTIONTABLE_CHRSTCS_NO_DEFER_SPEC_EXC As Long = &H4000 ' ? Reset speculative exceptions handling
Public Const PE_SECTIONTABLE_CHRSTCS_GPREL As Long = &H8000 ' ? Section content can be accessed to GP
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_FARDATA As Long = &H8000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_PURGEABLE As Long = &H20000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_16BIT As Long = &H20000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_LOCKED As Long = &H40000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_PRELOAD As Long = &H80000 ' ?
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_1BYTES As Long = &H100000 ' Ces constantes contienent des alignements
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_2BYTES As Long = &H200000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_4BYTES As Long = &H300000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_8BYTES As Long = &H400000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_16BYTES As Long = &H500000 ' (par défaut si aucun).
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_32BYTES As Long = &H600000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_64BYTES As Long = &H700000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_128BYTES As Long = &H800000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_256BYTES As Long = &H900000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_512BYTES As Long = &HA00000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_1024BYTES As Long = &HB00000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_2048BYTES As Long = &HC00000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_4096BYTES As Long = &HD00000
Public Const PE_SECTIONTABLE_CHRSTCS_ALIGN_8192BYTES As Long = &HE00000
Public Const PE_SECTIONTABLE_CHRSTCS_LNK_NRELOC_OVFL As Long = &H1000000 ' Contient des relocations étendues
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_DISCARDABLE As Long = &H2000000 ' Section peut être ignorée
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_NOT_CACHED As Long = &H4000000 ' Section non cachable
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_NOT_PAGED As Long = &H8000000 ' Section non non pageable
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_SHARED As Long = &H10000000 ' Section partageable
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_EXECUTE As Long = &H20000000 ' Section executable
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_READ As Long = &H40000000 ' Section lisible
Public Const PE_SECTIONTABLE_CHRSTCS_MEM_WRITE As Long = &H80000000 ' Section inscriptible
' ======================================================================================== _
TYPES DE DONNEES
' ========================================================================================
'Header du fichier PE
Public Type PE_HEADER
Signature As Long ' = PE_SIGNATURE
Machine As Integer ' le CPU
NumberOfSections As Integer ' Le nombre de sections du fichier
TimeDateStamp As Long ' Nombre de secondes entre le 31 décembre 1969 à 16h00 et la création du fichier
PointerToSymbolTable As Long ' l'offset de la table des symbols COFF (seulement fichiers OBJ et fichiers avec debug)
NumberOfSymbols As Long ' Nombre de symbols dans la table COFF
SizeOfOptionalHeader As Integer ' taille du header optional (juste après ce header)
Characteristics As Integer ' Diverses informations sur le fichier
End Type
'Header optionel (pourtant toujours présent) du fichier PE
Public Type PE_OPTIONALHEADER
Magic As Integer ' toujours égal à 267
MajorLinkerVersion As Byte ' version(M) du "Linker" qui a produit le fichier
MinorLinkerVersion As Byte ' version(m) du "Linker" qui a produit le fichier
SizeOfCode As Long ' Le total de la taille arrondie des sections de code
SizeOfInitData As Long ' Taille totale de toutes les sections composées de données initialisées (?)
SizeOfUninitData As Long ' ?? : The size of the sections that the loader commits space for in the virtual address space, but that don't take up any space in the disk file
AddressOfEntryPoint As Long ' Le point d'entrée de l'exécution du programme
BaseOfCode As Long ' le RVA d'où le code du fichier commence
BaseOfData As Long ' le RVA d'où les données du fichier commencent
ImageBase As Long ' l'endroit de la mémoire ou le programme doit être mappé
SectionAlignment As Long ' quand le fichier est mappé, chaque section est dans une adresse virtuelle qui est un multiple de cette valeur
FileAlignment As Long ' dans le fichier les données Raw dans chaque section sont un multiple de cette valeur
MajorOSVersion As Integer ' la version(M) mininimum de l'OS pour cet exécutable
MinorOSVersion As Integer ' la version(m) mininimum de l'OS pour cet exécutable
MajorImageVersion As Integer ' Version(M) de l'exécutable
MinorImageVersion As Integer ' Version(m) de l'exécutable
MajorSubsystemVersion As Integer ' Version(M) minimum du sous-sytème pour lancer l'exécutable
MinorSubsystemVersion As Integer ' Version(m) minimum du sous-sytème pour lancer l'exécutable
Win32VersionValue As Long ' ?
SizeOfImage As Long ' Taille de toutes les sections combinées
SizeOfHeaders As Long ' Taille du PEHeader et de la table des sections
CheckSum As Long ' CheckSum CRC
SubSystem As Integer ' le type de sous-système que l'exécutable use pour son interface
DllCharacteristics As Integer ' Flag d'informations sur l'initialisation d'une DLL (ignoré, toujours 0)
SizeOfStackReserve As Long ' Mémoire virtuelle à réserver pour le stack du thread initial
SizeOfStackCommit As Long ' mémoire virtuelle initialiement donnée pour le stack du thread initial
SizeOfHeapReserve As Long ' Mémoire virtuelle à réserver pour le heap du processus initial
SizeOfHeapCommit As Long ' mémoire virtuelle initialiement donnée pour le heap du processus initial
LoaderFlags As Long ' en rapport avec le débug
NumberOfDataDirectories As Long ' le nombre d'entrées dans le tableau DataDirectory
End Type
Public Type PE_DATADIRECTORY
DirectoryVA As Long ' Adresse virtuelle du dossier
DirectorySize As Long ' Taille du dossier
End Type
'tableau des sections
Public Type PE_SECTIONTABLE
ANSIName As String * 8 ' Nom de la section (peut être vide)
VirtualSize As Long ' Taille de la section quand elle est mappée dans la mémoire (doit être un multiple de 4096)
VirtualAddress As Long ' le RVA ou il doit être chargée dans la mémoire
SizeOfRawData As Long ' La taille de la section dans l'exécutable (doit être un multiple de 512)
PointerToRawData As Long ' offset dans le fichier qui point vers cette section
PointerToRelocations As Long ' dans l'exécutable cette valeur n'a pas de sens
PointerToLineNumbers As Long ' Offset dans le fichier vers la table des numéros de ligne. utilisé pour le débug
NumberOfRelocations As Integer ' dans l'exécutable cette valeur n'a pas de sens
NumberOfLineNumbers As Integer ' nombre de numéros de ligne. utilisé pour le débug
Characteristics As Long ' le type de données dans cette section (code, data, import, reloc...)
End Type
'dossier de relocation
Public Type PE_DIRECTORY_RELOCATION
VAAndSize As Long 'contient l'adresse virtuelle et la taille (4 | 12)
End Type
'dossier d'export
Public Type PE_DIRECTORY_EXPORT
RVAFunctionNameList As Long ' RVA vers une liste de pointeur. chacun point vers un nom de fonction.
TimeDateStamp As Long ' le TimeStamp qui indique quand le fichier a été créé
MajorVersion As Integer ' Version(M) de la fonction
MinorVersion As Integer ' Version(m) de la fonction
ExportName As Long ' RVA vers le nom du dossier
ExportBase As Long ' ??
NumberOfFunctions As Long ' nombre de fonctions
NumberOfNames As Long ' nombre de noms
AddressOfFunctions As Long ' pointeur vers liste des fonctions
AddressOfNames As Long ' pointeur vers liste des noms
AddressOfNameOrdinals As Long ' pointeur vers liste des noms ordinaux
End Type
'dossier d'import
Public Type PE_DIRECTORY_IMPORT
RVAFunctionNameList As Long ' RVA vers une liste de pointeur. chacun point vers un nom de fonction.
TimeDateStamp As Long ' le TimeStamp qui indique quand le fichier a été créé
ForwarderChain As Long ' indique une référece de la dll vers une autre dll
PointerToName As Long ' RVA vers la chaine terminée par un NULL qui contient le nom de la DLL importée
FirstThunk As Long ' RVA vers une liste de pointeurs qui pointent vers des noms de fonctions
End Type
'dossier de ressource
Public Type PE_DIRECTORY_RESOURCE
Characteristics As Long ' Flag
TimeDateStamp As Long ' le TimeStamp
MajorVersion As Integer ' version(M) de la ressource
MinorVersion As Integer ' version(m) de la ressource
NumberOfNamedEntries As Integer ' nombre d'entrées nommées
NumberOfIdEntries As Integer ' nombre d'identificateurs d'entrées
End Type
'entrée de ressource
Public Type PE_DIRECTORY_RESOURCEENTRY
PointerToName As Long ' pointeur vers le nom
PointerToResData As Long ' pointeur vers une serction RESOURCEDATA
End Type
'données de ressource
Public Type PE_DIRECTORY_RESOURCEDATA
PointerToData As Long ' pointeur vers les données
DataSize As Long ' taille des données
CodePage As Long ' ?
Reserved As Long ' réservé
End Type
'dossier de débug
Public Type PE_DIRECTORY_DEBUG
Characteristics As Long ' Flag
TimeDateStamp As Long ' le TimeStamp
MajorVersion As Integer ' version(M) du debug
MinorVersion As Integer ' version(m) du debug
DebugType As Long ' ?
DataSize As Long ' taille du debug
AddressOfRawData As Long ' ?
PointerToRawData As Long ' ?
End Type
28 août 2003 à 10:24
28 févr. 2003 à 00:18
pour ceux ke ça intéresse je v bientot poster une ocx de decompilation objet, donc en gros le moteur de recherche objet sera tout fait , plus k'a l'insérer dans vois projet et amusez vous les mecs ;)
au fait merci nixou pour le sponsoring de message ;)
HEXMAN
23 févr. 2003 à 15:55
7 janv. 2002 à 12:37
A++ et bonne prog !
7 janv. 2002 à 10:21
7 janv. 2002 à 10:06
7 janv. 2002 à 09:53
6 janv. 2002 à 20:25
- Le .exe sert à tester tout simplement parce qu'il contient beaucoups de forme et de control (IL servira au control Lister)
Donner vos commentaire :))))))))!!!!!!!!!!
6 janv. 2002 à 20:16