Page 1 sur 1

Extraire un fichier binaire de la datasection

Publié : mar. 28/nov./2017 12:06
par jmg49
bonjour,

J'essaie d'extraire un fichier de la datasection et mettre le contenu du fichier dans un buffer tout simplement,

readdata , readbyte s'appliquent à un fichier ouvert en lecture,

Code : Tout sélectionner

Structure file_info
      
length.i       

EndStructure


Procedure DataSectionLoad(fId, fStart, fEnd)   
  Protected Fileinfo.file_info
 
  Fileinfo\Length = fEnd - fStart 
  
EndProcedure


*MemoryID = AllocateMemory(@Length)
*MemoryID = DataSectionLoad(0, ?file, ?endfile)



Debug *MemoryID ;  => rien

DataSection
  file:
  IncludeBinary "request.exe"
  endfile:
EndDataSection

je ne sais pas en clair comment claquer le contenu de request.exe dans *MemoryID ... il faut du pokel() ?

Re: Extraire un fichier binaire de la datasection

Publié : mar. 28/nov./2017 13:36
par Ar-S
CatchSound ?

Re: Extraire un fichier binaire de la datasection

Publié : mar. 28/nov./2017 14:42
par jmg49
bien tenté !

mais non ....

Code : Tout sélectionner


*MemoryID= CatchSound(1, ?file)


Debug *MemoryID ; rien 

merci quand même , j'avais pensé à détourner catchimage mais non plus

Re: Extraire un fichier binaire de la datasection

Publié : mar. 28/nov./2017 16:53
par falsam
:!: Il est question de son et je vois un exe dans la datasection. Tu souhaites exécuter un exe se trouvant en datasection ?

Re: Extraire un fichier binaire de la datasection

Publié : mar. 28/nov./2017 17:01
par jmg49
Le but est de récupérer quelque soit son format le fichier en data section dans un buffer pour après effectuer d'autres actions, (dans le cas d'un exe l'exécuter depuis la mémoire va nécessiter un RunPE) , appliquer un chiffrement, l'écrire sur le disque ...etc

Re: Extraire un fichier binaire de la datasection

Publié : mar. 28/nov./2017 18:47
par falsam
■ Copier le fichier se trouvant en data section en mémoire

Exemple avec une image

Code : Tout sélectionner

EnableExplicit

Define Size = ?image_end - ?image
Define *Buffer = AllocateMemory(Size)
Define *Pointer = ?image, n

For n = 0 To Size  
  PokeB(*Buffer + n, PeekB(*Pointer + n)) 
Next

;Verification de l'image mémorisé dans *Buffer
UsePNGImageDecoder()
CatchImage(0, *Buffer)
ShowLibraryViewer("Image", 0)
CallDebugger

End

DataSection
  image:
  IncludeBinary #PB_Compiler_Home + "Examples\3D\Data\Textures\caisse.png"
  image_end:  
EndDataSection
A partir de la tu peux copier le contenu de ce buffer dans un fichier avec la fonction WriteData()
Result = WriteData(#File, *MemoryBuffer, Length)


■ On peut aussi copier directement le contenu du fichier se trouvant en datasection dans un fichier.

Code : Tout sélectionner

EnableExplicit

Define FF

FF = CreateFile(#PB_Any, "caisse.png")
If FF
  WriteData(FF, ?image, ?image_end - ?image)
  CloseFile(FF)
EndIf

End

DataSection
  image:
  IncludeBinary #PB_Compiler_Home + "Examples\3D\Data\Textures\caisse.png"
  image_end:  
EndDataSection
■ Le sujet RunPE a déja été abordé sur ce lien que tu connais http://www.purebasic.fr/french/viewtopi ... 39#p165839

Re: Extraire un fichier binaire de la datasection

Publié : mer. 29/nov./2017 8:47
par jmg49
Merci falsam , c'est exactement ça,

je me doutais qu'il y avait du poke là dedans mais je ne savais pas comment l'implémenter ,

je te remercie encore