Une solution à tester, c'est de rajouter les quelques octets à la fin du script compilé ou de tout autre EXE.
Voici une ébauche pour modifier le script lui-même :
► Afficher le texte
Code : Tout sélectionner
_ScriptAddTxt("Ceci est la chaine à rajouter")
_SelfReplace()
Func _ScriptAddTxt($sString)
$hFile = FileOpen(@ScriptName, 16)
$File = FileRead($hFile)
FileClose($hFile)
$hFile = FileOpen(@TempDir & "\" & @ScriptName, 18 )
FileWrite($hFile, $File & StringToBinary($sString))
FileClose($hFile)
EndFunc
Func _SelfReplace()
Local $sCmdFile
FileDelete(@TempDir & "\selfdel.bat")
$sCmdFile = 'ping -n 1 127.0.0.1 > nul' & @CRLF _
& ':loop' & @CRLF _
& 'del "' & @ScriptFullPath & '"' & @CRLF _
& 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
& 'Copy /Y "' & @TempDir & "\" & @ScriptName &'" "' & @ScriptDir & '\' & @ScriptName & '"' & @CRLF _
& 'del "' & @TempDir & '\' & @ScriptName & '"' & @CRLF _
& 'del "' & @TempDir & '\selfdel.bat"' & @CRLF _
& '"' & @ScriptFullPath & '"'
FileWrite(@TempDir & "\selfdel.bat", $sCmdFile)
Run(@TempDir & "\selfdel.bat", @TempDir, @SW_HIDE)
Exit
EndFunc
Ensuite il vous faudra lire les derniers octets pour avoir votre chaine.
Évidement puisque le script est en cours de fonctionnement, on ne peut le modifier comme ça. D'où l'astuce de le copier dans le dossier temporaire, puis de le modifier, puis de fermer le script après avoir lancer un Batch qui remettra le script modifié à la place de l'original.
C'est tordu, mais je vois pas comment faire autrement.
La solution du fichier complémentaire reste selon moi une bien meilleure solution (Il existe des tas de softs accompagné de DLL, de fichier .bin ou apparentés).