Je travaille actuellement sur un outil pour l'éditeur PureBasic qui permet d'inclure le source sous forme d'archive à la création de l'exécutable.
Compatibilité window seulement, x86 et x64, ascii et unicode.
Fonctionnement:
Lorsque que vous cliquez sur le menu compilateur->créer un exécutable , cela lance mon outil une fois votre exécutable créé, qui va inclure le fichier source et tout ce qui s'y trouve à la racine, dossiers et sous dossiers ainsi que tous les types de fichiers à l’exception des fichiers portant l'extension .exe, .zip, .7z, .lnk sous la forme d'une archive au format 7z dans votre exécutable juste créé.
Dépendance:
L'outil fonctionne avec le prog 7z.exe fournit avec qui permet la création de l'archive.
Sécurité:
L'archive est compressée avec un encodeur AES256, la clé utilisée sera le mot de passe qu'il vous sera demandé pour la création de l'archive à inclure dans l'exe.
En utilisant les minuscules, majuscules, les chiffres ainsi que les caractères spéciaux avec un mot de passe de 20 caractères, il faudrait plusieurs centaines d'années pour avoir une chance d'arriver à cracker l'archive même avec une dizaines d'ordi.
Extraire le code source:
L'extraction peut se réaliser de différentes façons:
- A partir de l'exécutable lui même en ligne de commande avec pour paramètre "extractsource" (nécessite d'inclure une portion de code dans votre source, voir plus loin).
- En créant un raccourci de l'exécutable et en modifiant la cible, en rajoutant après un espace "extractsource" , ne pas omettre les guillemets (nécessite d'inclure une portion de code dans votre source, voir plus loin).
- En utilisant un prog (pas encore disponible) qui va le faire pour vous.
Quel intérêt?:
Qui n'a jamais perdu des données par sa faute ou un problème lié au fonctionnement de son ordinateur ou écrasé un source avec des nouvelles modifications sans sauvegarde de celui-ci, mais ce prog n'a pas été conçu que pour cela, il peut être intéressant de fournir le source avec un projet open source, un Freeware, etc...
Problème rencontré:
L'outil est systématiquement lancé (l'éditeur des outils ne permet pas de faire autrement) lors de la création d'un exécutable et même s'il est possible d'annuler l'opération, cela peut être très agaçant si l'on ne souhaite pas inclure le code source; c'est pour cela que j'ai ajouté une astuce:
il suffit d'ajouter au début de votre code source, le commentaire "; NoSaveSourceCodeToExecutable et bien que l'outil sera lancé, celui-ci se terminera en silence.
Paramétrage de l'outil:
Ligne de commande : le chemin de l'exécutable Include_Source.exe
Arguments : %EXECUTABLE %FILE
Evènement : après avoir créé un exécutable
Téléchargement de l'outil:
Téléchargement
Portion de code à inclure dans votre source pour l'extraction du source à partir de l'exe en ligne de commande ou avec un raccourci:
Code : Tout sélectionner
;******************************************************************************
;****** Auteur : Nico ******
;****** Compatibilité : ASCII et Unicode, x86 et x64 ******
;****** Créé avec la version PureBasic 5.31 ******
;******************************************************************************
;****** Description : permet d'extraire le code source de l'exécutable ******
;****** fonctionne avec l'outil PureBasic associé Include_Source.exe ******
;******************************************************************************
#ExtractSourceCodeFromExecutable = 1
CompilerIf #ExtractSourceCodeFromExecutable = 1
; Compatible ASCII et Unicode, x86 et x64
Procedure ExtractSourceCodeFromExecutable()
; Extraction du fichier contenu dans l'Exe
Protected LongueurFichier.q, LongueurZip1.q, LongueurZip2.q
Protected ProgramFilename.s, Directory.s, Filename.s
Protected *Buffer, Etape.l
ProgramFilename = ProgramFilename()
Filename = GetFilePart(ProgramFilename)
Filename = RemoveString(Filename, ".exe", #PB_String_NoCase)
Directory = GetPathPart(ProgramFilename)
; l'exe s'ouvre lui même
If ReadFile(0, ProgramFilename)
LongueurFichier = Lof(0)
; Retrouve la la taille du fichier Zip
FileSeek(0, LongueurFichier - 8)
LongueurZip1 = ReadQuad(0)
; Retrouve la la taille du fichier Zip,
; une seconde fois par sécurité
FileSeek(0, LongueurFichier - 16)
LongueurZip2 = ReadQuad(0)
If LongueurZip1 > 0 And LongueurZip1 < (LongueurFichier - 16) And LongueurZip1 = LongueurZip2
FileSeek(0, LongueurFichier - LongueurZip1 - 16)
*Buffer = AllocateMemory(LongueurZip1)
If *Buffer <> 0
If ReadData(0, *Buffer, LongueurZip1) = LongueurZip1
; extrait le fichier à la racine
If CreateFile(0, Filename + ".7z")
WriteData(0, *Buffer, LongueurZip1)
CloseFile(0)
Etape = 1
MessageRequester("Info", "Extraction du code source sous la forme d'une archive réussie!")
EndIf
EndIf
FreeMemory(*Buffer)
EndIf
EndIf
CloseFile(0)
EndIf
If Etape = 0
MessageRequester("Erreur", "Echec de l'extraction du code source sous la forme d'une archive!")
EndIf
End
EndProcedure
Procedure ExtractSourceCodeFromExecutableMain()
Protected Count.l, Parametre.s
Count = CountProgramParameters()
If Count = 1
Parametre.s = LCase(Trim(ProgramParameter(0)))
If Parametre = "extractsource" Or Parametre = "-extractsource"
ExtractSourceCodeFromExecutable()
EndIf
EndIf
EndProcedure
ExtractSourceCodeFromExecutableMain()
CompilerEndIf