Page 1 sur 1
[R] Exécution d'un code externe à un script compilé
Posté : jeu. 31 janv. 2013 21:58
par jguinch
Bonjour. Je vais essayer d'être assez clair (pas toujours facile...)
L'énoncé : j'ai un script autoit compilé qui effectue sous condition des actions. (normal quoi

)
Les actions et conditions sont décrites dans un fichier ini.
Exemple :
Code : Tout sélectionner
[Firefox]
name=Firefox
file=setupFirefox.exe
params=-ms
checksum= eb574b236133e60c989c6f472f07827b
condition=NOT FileExists(@ProgramFilesDir & "\*firefox*")
L'exécutable compilé va tester si la condition définie dans le fichier INI est remplie, en utilisant Eval(). Si la condition est remplie, le programme défini dans la clé file s'exécutera.
Problème : j'aimerais pouvoir mettre plus de code dans la condition, par exemple :
► Afficher le texte
Code : Tout sélectionner
_notInstalled("firefox")
Func _notInstalled($displayName)
Local $uninstallKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
Local $i = 0
While 1
$i += 1
Local $key = RegEnumKey($uninstallKey , $i)
If @error <> 0 Then ExitLoop
If StringInStr ( RegRead($uninstallKey & "\" & $key, "DisplayName") , $displayName) Then Return False
WEnd
Return True
EndFunc
Est-ce envisageable de faire un genre de Eval() sur une expression à plusieurs lignes, ? (je suis prêt à abandonner les fichiers INI mais je n'ai pas envie d'embarquer AutoIt3.exe)
Cela m'éviterait de faire évoluer l'exécutable...
Pour info : l'exécutable tourne sur environ 3000 postes et peut se mettre à jour de lui-même. Seulement, j'aimerais limiter ses mises à jour aux maj importantes (d'où l'externalisation de code).
Merci pour votre aide ou vos idées.
Re: [...] Exécution d'un code externe à un script compilé
Posté : ven. 01 févr. 2013 13:51
par sksbir
Bonjour
Ta solution est un vrai trou de sécurité, surtout si le programme d'installation de firefox tourne sous le controle de l'administrateur du poste de travail, et que les utilisateurs ne sont pas admin de leur poste : un petit malin viendra bricoler le fichier INI pour se lancer un explorateur par exemple...
Comme il n'y a pas 36 façon de savoir si un programme est installé ou pas, et puisque tu travailles sur fichier INI, tu devrais coder des mots clés comme par exemple ceci :
FICEXIST= ( le fichier qui montre que le programme est installé )
REGEXIST= ( la clé de registre qui montre que le programme est installé.
Re: [...] Exécution d'un code externe à un script compilé
Posté : ven. 01 févr. 2013 15:54
par jguinch
Merci pour ta réponse.
Ta suggestion est très bonne, j'en prends note.
Cependant :
- le fichier INI n'est présent que pendant le temps de lire son contenu (quelques ms) et ensuite il est supprimé
- le programme comme le fichier INI ne sont pas accessibles depuis les comptes utilisateurs de base (ils sont stockés dans le profil administrateur)
- le fichier est téléchargé par l'exécutable toutes les X minutes, donc même si on arrive à le créer manuellement il sera écrasé par le prochain téléchargement
Mais il n'y a pas de sécurité parfaite...
Re: [...] Exécution d'un code externe à un script compilé
Posté : ven. 01 févr. 2013 16:47
par jchd
Tu peux faire exécuter un script sous forme source par n'importe quel script compilé.
Voir l'aide (en v.o., je n'ai pas l'installation francisée) : Using AutoIt > Running scipts > AutoIt specific command Line Switches > Form 3
C:\Mon Répertoire> monscript.exe [/ErrorStdOut] /AutoIt3ExecuteScript UnAutreScript.au3 [params ...]
Re: [...] Exécution d'un code externe à un script compilé
Posté : ven. 01 févr. 2013 17:24
par Tlem
Pour compléter ce que Jean-Christophe vous à dit, je rajouterais ceci :
Pour exécuter un script au3 ou un script a3x, vous pouvez utiliser la méthode expliquée par jchd (En VF ici :
http://www.autoitscript.fr/autoit3/docs ... unning.htm), par contre, vous n'aurez pas d'interaction au niveau des variables et comme l'à signalé sksbir, vous aurez donc un sacré trou de sécurité puisque le fichier de code externe pourrait être modifié !
Maintenant, si ce comportement ne gêne pas, alors pourquoi compiler votre script. Il vous suffit de le déployer et de prévoir l'include d'un fichier externe que vous mettrez à jour (bien que le script en lui même ne sera certainement pas très lourd et pourra être distribué après modifications).
Si vous avez peur que le code soit vu en clair alors un petit coup d'obfuscateur et le tour est joué ...
Autres possibilités pour du code externe :
- L'utilisation d'Execute comme si dessus, mais pour une seule ligne de commande.
- La création et l'utilisation d'une dll externe que vous compileriez en C. Mais pour cela il faut connaitre le C/C++ afin de faire des fonctions qui vous conviendront.
Re: [R] Exécution d'un code externe à un script compilé
Posté : ven. 01 févr. 2013 21:31
par jguinch
Merci à tous pour vos réponse.
J'utiliserai donc monprogramme.exe /AutoIt3ExecuteScript script.au3.
Effectivement pour la sécurité c'est pas le top, je vais travailler sur cet aspect de toute façon.
Je pensais également à l'utilisation d'une DLL mais là c'est plus compliqué (mais très intéressant ...).
Merci encore (il est vraiment bien ce forum quand même !

)