UPX - Compressez vos exécutables

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

UPX - Compressez vos exécutables

Message par falsam »

UPX (sigle de l'anglais Ultimate Packer for eXecutables) est un logiciel libre en mode console permettant de compresser des fichiers exécutables.

Ce programme est téléchargeable sur ce site

Le code ci-dessous permet de choisir votre fichier exécutable de le décompresser et de voir le résultat.
Bien entendu le code ainsi que le programme upx.exe doivent se trouver dans le même dossier.

Code : Tout sélectionner

Enumeration
  #MainForm
  #File
  #SelectFile
  #Compress
  #Stdout
EndEnumeration

Global File$

Procedure MainFormOpen()
  OpenWindow(#MainForm,0,0,500,200,"UPX - Compression d'un fichier executable",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
  TextGadget(#PB_Any,20,20,150,20,"Exécutable à compresser")
  StringGadget(#File,150,20,240,20,"")
  ButtonGadget(#SelectFile,400,20,20,20,".?.")
  ButtonGadget(#Compress,425,20,60,20,"Compress")
  DisableGadget(#Compress, #True)
  TextGadget(#Stdout,20,60,465,120,"")
  SetGadgetColor(#Stdout, #PB_Gadget_BackColor,RGB(247, 250, 167))
EndProcedure

Procedure ControlData()
  If LTrim(RTrim(GetGadgetText(#File)))=""
    DisableGadget(#Compress, #True)
  Else
    DisableGadget(#Compress, #False)
  EndIf  
EndProcedure

Procedure SelectFile()
  File$ = OpenFileRequester("Choisissez un fichier à charger", "", "Executable (*.exe)|*.exe", 0)
  If File$<>"" 
    SetGadgetText(#File,File$)
  EndIf
EndProcedure

Procedure UPXCompress()
  Protected Buffer.s, Stdout.s, Compress.i
  Buffer="" : Stdout=""
  
  ;Taux de compression 9 (Echelle de 1 à 9)
  Compress=RunProgram("upx","-9 "+Chr(34)+File$+Chr(34),"", #PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Hide)
  Repeat
    buffer=ReadProgramString(Compress)  
    If RTrim(LTrim(Buffer))<>""
      Stdout=Stdout+Buffer+Chr(13)
      EndIf
    Until ProgramRunning(compress)=0
    SetGadgetText(#Stdout, Stdout)
EndProcedure

MainFormOpen()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #SelectFile
          SelectFile()
          ControlData()
          
        Case #File
          ControlData()
          
        Case #Compress
          UPXCompress()
          
      EndSelect
     
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: UPX - Compressez vos exécutables

Message par Backup »

Merci pour le code :)

a savoir ça fait super longtemps qu'il existe une Librairie qui gere UPX ;)

ps : heu il s'agit d'un Shell en fait (ma mémoire me joue des tours):
site de Gnozal

http://forums.purebasic.com/english/vie ... 8720a38d45
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: UPX - Compressez vos exécutables

Message par Ar-S »

Il y a des années que je n'ai pas utilisé UPX, le soucis de ce dernier est que, si je me souviens bien", l'exe compressé sera détecté comme malsain par quelques antivirus.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre