PatchMaker 2

 

  • Fonction : Générer des patchs pour updater vos applics préférées...

L'exe est dispo ici  (171Ko) : PatchMaker2.exe
La source est dispo ici sur DelphiFR.fr  ou ici (211ko) : PatchMaker2.zip

 
  • Description :
     

  • Pour ceux qui ne voient pas trop ce que PatchMaker signifie, c'est un programme qui permet de créer un programme de mise à jour d'un autre programme...
    Par exemple, dans le cas ou votre programme subit qu'une légère modification, vous pouvez utiliser ce patch maker pour fournir une mise à jour de taille correspondant qu'à votre modification...

    Les choix proposés actuellement :
    -Patch Automatique : pas d'interface graphique, et il suffit juste de l'exécuter pour patché. (mode ligne de commande)
    -Patch avec fenètre graphique :
    -Icone
    -Musique (en XM ou MOD)
    -Compression (UPX)

    Pour une petite explication rapide, le principe est le suivant :
    On va créer préalablement les 3 type de patchs ne contenant aucune ressources. (A part la boite de dialog)
    Ensuite le PatchMaker intégrera ces exe en ressources pour ensuite ressortir seulement l'exe correspondant au type de Patch voulu (avec zik, sans zik, mode ligne de commande)
    puis par l'algo de comparaison des fichiers intégrera des ressource à ce patch permettant de lui dire quelles sont les modifications qu'il devra effectuer.
    après on modifie l'icone et rajoute une zik si défini...

    Cette source n'utilise plus ResHacker, et montre comment changer l'icone d'un EXE en Delphi...
    (ainsi que la ajout, modification de ressources dans un exe)

    Cette version utilise UFMOD (pour la musique)
    StripReloc permet de réduire un brin la taille des .Exe en supprimant la table des relocations
    (expliqué sur leur site : http://www.jrsoftware.org/striprlc.php )
    pour finir UPX compresse le tout (mode --ultrabruteforce : c'est du bourrin mais du bon)


    J'ai viré l'unit Windows, j'ai réécrit les fonctions dont j'avais besoin dans Win.pas à la place (j'ai utilisé de préférences les fonctions en ASM).
    Je me suis servi de base du System.pas et de SysInit.pas de KOL pour réduire un max la taille de l'exe.
    Pour les compilés n'utilisez pas l'IDE Delphi mais lancez le fichier : build.bat qui fera tout le travail (à déplacer les .dcu etc...)
    Patch.drp à 3 options de compilations correspondant au type de patch à générer (pour avoir tjrs une taille optimale suivant le cas désiré)
    (Sert à rien d'avoir UFMOD pour un patch en ligne de commande).


    Zip:
    |
    | Readme.txt : Ce fichier
    |
    | PatchMaker21.dfm,PatchMaker21.pas,PatchMaker2.dpr : Source du PatchMaker
    |
    |-utils : placer les utilitaires ici (que UPX pour l'instant)
    | | readme.txt : dit qu'il faut placer UPX dans utils...
    |
    \-Patch : contient la source des types de patchs
    | Build.bat : Fichier permettant de compiler tous les patchs et de générer Patch2.res utilisé par le Patchmaker
    | Patch2.rc : Fichier définissant la ressource du PatchMaker
    | Patch2.res : Fichier ressource contenant les types de Patchs
    | Patch.dpr : Source des Patchs
    | PatchType.inc : Fichier généré par Build.bat servant à définir le type de Patch (inclusion définissant l'option de compilation de Patch.dpr)
    | Types.pas : fichier réécrit pour Win.pas
    | ufmod.obj, uFMOD.pas : Fichier d'UFMOD : permet de jouer la musique
    | Win.pas : Fichier réécrit remplaçant Windows.pas (permet un gain de taille)
    |
    |-KOL : Répertoire contenant les units System.pas et SysInit.pas de KOL (permet un gain de taille)
    |-StripReloc : Contient les fichiers de StripReloc 1.13 (permet un gain de taille)
    \res : contient les ressources pour les tests de Patch.dpr
    Les fichiers .rc servent à la compilation
    Les fichiers .xm et .ico sont icone et musique
    Les fichiers .txt sont le contenu des ressources (à modifier avec un éditeur Hexa en général)
    Offsets.txt / Bytes.txt : Offsets et Bytes à Modifiés (en Hexa : DWORD/BYTE)
    iOffsets.txt / iBytes.txt : Offsets et Bytes à Insérer (en Hexa : DWORD/BYTE)
    sOffsets.txt : Offsets à Supprimer (en Hexa : DWORD)
    txte.txt / titl.txt : Titre et texte du Patch
    Cible.txt : Nom du fichier Cible
    taillecible.txt : Taille de la Cible (en Hexa : DWORD)
    Ces fichiers sont normalement généré en mémoire par le PatchMaker avant d'être insérée à l'exe, mais pour les tests (et vu leur taille) je préfére les laissers.



    Pour cette source j'ai utilisé :
    KOL - Key Objects Library : http://kolmck.net/
    http://www.delphifr.com/codes/PATCHEUR-PERSONALISABLE-19-KO-NON-PACKE_12167.aspx
    http://www.delphifr.com/codes/JOUER-XM-PEU-CODE-NO-DLL_23849.aspx
    UPX : http://upx.sourceforge.net/
    StripReloc : http://www.jrsoftware.org/striprlc.php
     
    • Historique :
       
    Version 2.1
    N'utilise plus ResHacker,
    Taille de 7ko à 15,5ko non packé suivant le type de patch
    Le patch inclu la possibilitée d'Insérer, ou Supprimer des bytes dans le fichier Cible
    (donc fichier Source et Cible de taille différente)
    mais le patch maker ne permet pas encore de calculer tout sa....
    ce sera pr la prochaine promis !
    Je penses aussi faire un mode permettant au cas ou les modifications sont trop importante, de copier l'original en ressource du patch et faire juste une simple copie standard de l'exe (avec compression UPX tjrs dispo)
    Je penses aussi rajouter un mode PatchMaker en ligne de commande...


    Version 2.0
    (c'est mon 2ème PatchMaker mais l'autre est vraiment pas terrible donc sa commence à 2, en plus je préfère les chiffres pairs, enfin toute façon c'est moi qui décide :)

    Taille de 11,5ko à ~20ko
    L'algo de comparaison de Bytes sera amélioré prochainement, au lieu de passer par des strings, un buffer de base serais mieux et sauvegarder les Bytes en tant que Bytes au lieu de string serais plus correcte et prendrait moins de mémoire pour le future patch (il suffit de compressé pour l'instant pour annuler cet effet, la taille sera quazi égale)
    Juste à partir de fichiers de 5Mo, le patch deviens vraiment lent... mais c'est juste la méthode qui est pas classe (StrtoInt)
    Aussi je penses rajouter la possibilité d'avoir une différence de taille... (pk pas plus tard, une analyse comparative un peu à la Windiff)

    Attention j'ai fait cette source avec Delphi 7, je ne sais vraiment pas si c'est compatible avec une autre version...
    Au cas merci de me le signaler.