Je viens à vous pour vous présenter un exemple de procédure qui peut être améliorée et j'ai envie de dire qui DOIT être améliorée, c'est pour ça que j'aimerai vos avis, critiques et alternatives possibles !
L'OBJECTIF :
Enregistrer une valeur dans une variable au moment de la compilation, et pas avant ! Ca peut concerner des IDs de connexion, un mot de passe, un token, etc... qu'on ne souhaite pas mettre en dur dans le code, mais passer comme une donnée volatile qui serait figée ensuite dans l'EXE.
LA METHODE DE BASE :
Mettre la valeur sensible dans un fichier INI, et utiliser FileInstall pour incorporer le fichier INI dans l'EXE... Problème, le fichier INI doit être extrait pour que la donnée puisse être récupérée, et donc le mot de passe est lisible par d'autres moyens.
► Afficher le texteMéthode de base
MA METHODE EN UTILISANT AU3WRAPPER:
Le Wrapper utilise une commande Run_Before pour génèrer un AU3 à inclure dans le code d'origine, à partir d'un template ; lors de cette phase il demande la valeur secrète à incorporer. Puis la compilation s'effectue, et efface ensuite le fichier sensible avec une commande Run_After :
- Fichier "Script.au3", contient le code d'exemple qui utilise la valeur secrète
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Run_Before=""%autoitdir%\AutoIt3.exe" ".\Compile.au3" "START""
#AutoIt3Wrapper_Run_After=""%autoitdir%\AutoIt3.exe" ".\Compile.au3" "END""
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include ".\Data.au3"
MsgBox(0, "", "Valeur secrète : '"&$__SECRET_VALUE&"'") - Fichier "Template.au3", fichier de référence destiné à être dupliqué après modification des champs entre {{ }}
- Fichier "Compile.au3" :, script faisant la préparation à la compilation et la finalisation après compilation
If $cmdLine[0] = 0 Then
Local $mode = InputBox("", "Mode ? (START, END, NONE)", "", " M")
proceed($mode)
Else
For $i = 1 To $cmdLine[0]
proceed($cmdLine[$i])
Next
EndIf
Exit 0
Func proceed($mode)
Local $fileIn = @ScriptDir&"\Template.au3", $fileOut = @ScriptDir&"\Data.au3"
Switch $mode
Case "START"
Local $value = InputBox("", "Secret value?", "", " M")
Local $fluxIn = FileOpen($fileIn)
If $fluxIn = -1 Then
MsgBox(0, "", "Error on input file '"&$fileIn&"'")
Exit 1
EndIf
Local $fluxOut = FileOpen($fileOut, 8+2)
If $fluxOut = -1 Then
MsgBox(0, "", "Error on output file '"&$fileOut&"'")
Exit 1
EndIf
Local $contentIn = FileRead($fluxIn)
Local $contentOut = StringReplace($contentIn, "{{secret_value}}", $value)
FileWrite($fluxOut, $contentOut)
FileClose($fluxIn)
FileClose($fluxOut)
Case "END"
If FileExists($fileOut) Then
Local $fluxOut = FileOpen($fileOut, 8+2)
If $fluxOut <> -1 Then
FileWrite($fluxOut, "")
EndIf
FileClose($fluxOut)
If FileDelete($fileOut) = 0 Then
MsgBox(0, "", "Cannot delete output file '"&$fileOut&"'")
Exit 1
EndIf
EndIf
Case "NONE"
; Nothing
Case Else
MsgBox(0, "", "Unknown mode '"&$mode&"'")
Exit 1
EndSwitch
EndFunc
Ce genre de méthode ne casse pas trois pattes à un connard, mais au moins ça donne une méthode (même si je la trouve crade personnellement). J'attends donc vos avis, vos critiques, et surtout vos alternatives !
![Smile :)](./images/smilies/icon_smile.gif)
A bientôt !