[EX] Lancement d'un programme en mode administrateur

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

[EX] Lancement d'un programme en mode administrateur

#1

Message par jl56 »

Bonjour

Vous trouverez ci-joint un script que j'ai conçut pour que l'un de mes clients puisse
lancer une appli en mode administrateur ( car placé sur un serveur TSE ).
et comme les utilisateurs ne sont pas administrateur sur certain programme il y avait des problèmes

Il était gênant de mettre les infos en clair dans un bath
Je sais un script autoit n'est pas inviolable mais c'est nettement mieux que le bath
Mes clients TPME n'ont pas besoin de sécurité sévères ( certain ont le mot de passe administrateur affiché sur une étiquette placé sur l'écran du serveur c'est vous dire ).
enfin un minimum ne nuit pas
► Afficher le texte
Au lancement de ce script vous devrez taper le mot de passe jl56 pour accéder a la gui de paramétrage. Les paramètres seront stockés et cryptés dans un fichier. exemple paye.ini
Ensuite tapez "rundamin.exe paye" et le programme associé se lance

Merci à Tlem pour m'avoir trouvé l'info pour cacher /afficher le mot de passe dans la gui

A+ JL56
Modifié en dernier par Tlem le jeu. 28 mai 2009 22:01, modifié 1 fois.
Raison : Ajout balise code
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [EX] Lancement d'un programme en mode administrateur

#2

Message par Boulanza »

Bonjour,
Ce script me lance une erreur:
error: _StringEncrypt(): undefined function.
$Password =_StringEncrypt(0,$crypte,"jl56",4 )
Votre aide svp. Merci...
Cordialement.
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [EX] Lancement d'un programme en mode administrateur

#3

Message par jl56 »

Bonjour,

Hou la la c'est pas jeurne et justement _StringEncrypt() n'existe plus
vous trouverez ci-dessous le code actualisé

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <Crypt.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=pi.ico
#AutoIt3Wrapper_Outfile=runadmin.exe
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=Utilitaires pour le forum autoit par JL56
#AutoIt3Wrapper_Res_Language=1036
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****


;~ #include <String.au3>
;~ #include <ButtonConstants.au3>
;~ #include <GUIConstantsEx.au3>
;~ #include <StaticConstants.au3>
;~ #include <WindowsConstants.au3>
;~ #include <EditConstants.au3>


Local $user = @UserName
Local $Password = ""
Local $domaine = @LogonDomain
Local $fichier = "c:\windows\notepad.exe"


$aid = ""
$aid = $aid & "Runadmin permet d'exécuter des programmes dans un mode administrateur sans afficher le mot de passe en clair" & @CRLF
$aid = $aid & "" & @CRLF
$aid = $aid & "ex. runadmin.exe paye" & @CRLF
$aid = $aid & "" & @CRLF
$aid = $aid & " Si vous lancer runadmin directement" & @CRLF
$aid = $aid & "" & @CRLF
$aid = $aid & "Apres avoir renseigné le code, vous pourrez saisir les parametres" & @CRLF
$aid = $aid & "Ceux ci seront enregistrés dans un fichier ini . Donnez un nom a ce parametrage ( sans l'extention .ini)" & @CRLF
$aid = $aid & "" & @CRLF
$aid = $aid & "Il peut étre nécessaire de placer runadmin.exe et son fichier *.ini dans le dossier ou se trouve le fichier à exécuter" & @CRLF
$aid = $aid & "" & @CRLF
$aid = $aid & "" & @CRLF
$aid = $aid & "Plusieurs paramétrages sont possible. Vous pourrez les recharger par la suite" & @CRLF
$aid = $aid & "" & @CRLF
$aid = $aid & "Ensuite créez un racourci sur runadmin.exe puis rajouter dans les propiétés apres un espace le nom de" & @CRLF
$aid = $aid & "votre parametrage (sans l'extention .ini)" & @CRLF
$aid = $aid & "dans ce fichier le mot de passe et le nom de fichier sont cryptés" & @CRLF
$aid = $aid & "" & @CRLF
$aid = $aid & "Type de fichier à executer possible   EXE, BAT, COM, PIF" & @CRLF
$aid = $aid & "" & @CRLF
$aid = $aid & "JL56"


$fichierini = ""
;~ $cmdline=""
If $cmdline[0] <> "0" Then

;~ 	MsgBox(0, "avant num ", number($cmdline[0]),10)
	If $cmdline[0] > "0" Then
		$fichierini = $cmdline[1]
;~ 		MsgBox(0,"$fichierini",$fichierini,20)
		If FileExists(@ScriptDir & "\" & $fichierini & ".ini") Then
			$user = IniRead(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "user", "")
			$crypte = IniRead(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "password", "")
			$Password = BinaryToString(_Crypt_DecryptData($crypte, "jl56", $CALG_AES_256))
			$domaine = IniRead(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "domaine", "")
			$crypte = IniRead(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "fichier", "")
			$fichier = BinaryToString(_Crypt_DecryptData($crypte, "jl56", $CALG_AES_256))
			RunAsWait($user, $domaine, $Password, 0, $fichier)

		Else
			MsgBox(0, "Erreur", "Le fichier ini " & @CRLF & @ScriptDir & "\" & $fichierini & ".ini" & @CRLF & " N'est pas présent", 20)
		EndIf
	Else


	EndIf
	Exit
EndIf

$passwd = InputBox("Utilitaire de JL56 ", " Entrez votre mot de passe. ( actuellement -->   jl56   )", "", "*",  - 1, -1, 0, 0)
;~ $passwd = InputBox("Utilitaire de JL56 ", " Entrez votre mot de passe. ( actuellement -->   jl56   )", "", "*", 350, 70, -1, -1, 200
; test du mot de passe
If $passwd <> "jl56" And $passwd <> "JL56" Then Exit


#Region ### START Koda GUI section ### Form=F:\pi\forum\runadminpi.kxf
$Form1 = GUICreate("Exécution d'un programme en mode administrateur", 559, 447, 192, 124)
GUISetBkColor(0x00FFFF)
$Inp_user = GUICtrlCreateInput("Inp_user", 120, 30, 261, 21)
$inp_password = GUICtrlCreateInput("inp_password", 120, 70, 261, 21)
$inp_domaine = GUICtrlCreateInput("inp_domaine", 120, 120, 261, 21)
$Inp_fichier = GUICtrlCreateInput("Inp_fichier", 120, 165, 261, 21)
$nom_parametrage = GUICtrlCreateInput("nom_parametrage", 120, 215, 151, 21)
$Pic1 = GUICtrlCreatePic("C:\votre_logo.bmp", 235, 270, 305, 145, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$but_enregistrer = GUICtrlCreateButton("Enregistrer", 275, 215, 100, 20, $BS_FLAT)
$but_tester = GUICtrlCreateButton("Tester", 50, 270, 100, 30, $BS_FLAT)
$Label1 = GUICtrlCreateLabel("Nom de l'utilisateur", 5, 30, 92, 17)
$Label2 = GUICtrlCreateLabel("Mot de passe", 5, 75, 68, 17)
$Label3 = GUICtrlCreateLabel("Nom du domaine", 5, 125, 84, 17)
$Label4 = GUICtrlCreateLabel("Fichier à exécuter", 5, 170, 88, 17)
$Parcourir = GUICtrlCreateButton("Parcourir", 390, 165, 100, 20, $BS_FLAT)
$Afficher = GUICtrlCreateButton("Afficher", 390, 70, 70, 20, $BS_FLAT)
$Cacher = GUICtrlCreateButton("Cacher", 390, 70, 70, 20, $BS_FLAT)
$Quitter = GUICtrlCreateButton("Quitter", 50, 380, 100, 30, $BS_FLAT)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, 0xFF0000)
$parcourir_ini = GUICtrlCreateButton("Recharger un fichier *..ini", 390, 215, 150, 20, $BS_FLAT)
$Label5 = GUICtrlCreateLabel("Nom du fichier ini", 5, 220, 85, 17)
$Aide = GUICtrlCreateButton("Aide", 50, 325, 100, 30, $BS_FLAT)
GUICtrlSetBkColor(-1, 0x00FF00)
$Label6 = GUICtrlCreateLabel("Version du 26 05 2009", 410, 5, 111, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

GUICtrlSetData($inp_domaine, $domaine)
GUICtrlSetData($Inp_user, $user)
GUICtrlSetData($Inp_fichier, $fichier)
GUICtrlSetData($inp_password, $Password)
GUICtrlSetData($nom_parametrage, $fichierini)
_SetPasswordStyle($Form1, $inp_password, '=')

GUICtrlSetState($Cacher, $GUI_HIDE)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Quitter
			Exit
		Case $Afficher
			_SetPasswordStyle($Form1, $inp_password, '', 'Ms Sans Serif')
			GUICtrlSetState($Cacher, $GUI_show)
			GUICtrlSetState($Afficher, $GUI_HIDE)
		Case $Cacher
			_SetPasswordStyle($Form1, $inp_password, '=')
			GUICtrlSetState($Cacher, $GUI_HIDE)
			GUICtrlSetState($Afficher, $GUI_show)



		Case $Parcourir
			$message = "Sélectionnez le fichier à exécuter"
			$var = FileOpenDialog($message, @ScriptDir & "\", "fichier à exécuter (*.*)", 1)

			If @error Then
			Else
				$var = StringReplace($var, "|", @CRLF)

				$fichier = $var
				GUICtrlSetData($Inp_fichier, $fichier)
			EndIf


		Case $parcourir_ini
			$message = "Sélectionnez le fichier de paramétrage"
			$var = FileOpenDialog($message, @ScriptDir & "\", "fichier de paramétrage (*.ini)", 1)

			If @error Then

			Else
				$var = StringReplace($var, "|", @CRLF)

				$fichierini = StringRegExpReplace(StringRegExpReplace($var, "[[:graph:]]*\\", ""), ".ini", "")

			EndIf
			If FileExists(@ScriptDir & "\" & $fichierini & ".ini") Then
				$user = IniRead(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "user", "")
				$crypte = IniRead(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "password", "")
				$Password = BinaryToString(_Crypt_DecryptData($crypte, "jl56", $CALG_AES_256))
				$domaine = IniRead(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "domaine", "")
				$crypte = IniRead(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "fichier", "")
;~ 				$fichier = _StringEncrypt(0, $crypte, "jl56", 4)
				$fichier = BinaryToString(_Crypt_DecryptData($crypte, "jl56", $CALG_AES_256))
				GUICtrlSetData($inp_domaine, $domaine)
				GUICtrlSetData($Inp_user, $user)
				GUICtrlSetData($Inp_fichier, $fichier)
				GUICtrlSetData($inp_password, $Password)
				GUICtrlSetData($nom_parametrage, $fichierini)
			Else
				MsgBox(0, "Erreur", "Le fichier ini " & @CRLF & @ScriptDir & "\" & $fichierini & ".ini" & @CRLF & " N'est pas présent", 20)
			EndIf

		Case $but_tester
			MsgBox(0, "run", "user=" & $user & @CRLF & "domaine=" & $domaine & @CRLF & "password=" & $Password & @CRLF & "fichier=" & $fichier & @CRLF & "Dossier=" & @ScriptDir, 20)
			RunAsWait($user, $domaine, $Password, 0, $fichier)
		Case $Aide
			MsgBox(0, "AIDE", $aid)
		Case $Inp_user
			$user = GUICtrlRead($Inp_user)
		Case $inp_domaine
			$domaine = GUICtrlRead($inp_domaine)
		Case $inp_password
			$Password = GUICtrlRead($inp_password)
		Case $nom_parametrage
			$fichierini = GUICtrlRead($nom_parametrage)
		Case $but_enregistrer
			If $fichierini <> "" Then
				IniWrite(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "fichier", _Crypt_EncryptData($fichier, "jl56", $CALG_AES_256))
				IniWrite(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "user", $user)
				IniWrite(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "domaine", $domaine)
				IniWrite(@ScriptDir & "\" & $fichierini & ".ini", "execution en mode administrateur", "password", _Crypt_EncryptData($Password, "jl56", $CALG_AES_256))
			Else
				MsgBox(0, "Erreur", " Il n'y a pas de nom pour ce parametrage", 20)
			EndIf
		Case $Inp_fichier
			$fichier = GUICtrlRead($Inp_fichier)
	EndSwitch
WEnd
Exit


Func _SetPasswordStyle($hwnd_GUI, $hwnd_ControlID, $sEncode = '', $v_Font = 'Webdings', $i_FontSize = 9)
	Local $EM_SETPASSWORDCHAR = 0xCC
	If $sEncode = '' Then
		GUICtrlSendMsg($hwnd_ControlID, $EM_SETPASSWORDCHAR, 0, 0)
		ControlFocus($hwnd_GUI, '', $hwnd_ControlID)
		GUICtrlSetFont($hwnd_ControlID, $i_FontSize, '', '', $v_Font)
	Else
		GUICtrlSendMsg($hwnd_ControlID, $EM_SETPASSWORDCHAR, Asc($sEncode), 0)
		ControlFocus($hwnd_GUI, '', $hwnd_ControlID)
		GUICtrlSetFont($hwnd_ControlID, 6, '', '', $v_Font)
	EndIf
EndFunc   ;==>_SetPasswordStyle
A+

JL56
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [EX] Lancement d'un programme en mode administrateur

#4

Message par Boulanza »

Bonsoir,
Etant donné que _StringReverse() n'existe plus !?! alors serait très aimable à jl56 de revoir son script et le remet à jour afin d'assurer à nouveau l'efficacité de son œuvre.
Cordialement.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [EX] Lancement d'un programme en mode administrateur

#5

Message par jchd »

C'est vrai que supprimer l'underscore n'est pas chose facile !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [EX] Lancement d'un programme en mode administrateur

#6

Message par jl56 »

Bonjour à tous,

@Boulanza

C'est ce que j'ai fait dans le post précédent votre remarque, le script est corrigé et fourni.
vous trouverez ci-dessous le code actualisé
Le problème était de sur _StringEncryp() et non sur _Stringreverse() :wink: @jchd

Cordialement,

Jl56
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [EX] Lancement d'un programme en mode administrateur

#7

Message par Boulanza »

Bonsoir,
c'est très bien monsieur jl56... Je testerais cela demain Inchaalah.
Cordialement.
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [EX] Lancement d'un programme en mode administrateur

#8

Message par Boulanza »

Bonjour Monsieur jl56,
Oui, effectivement, votre script fonctionne correctement.
Merci pour votre intervention qui est à sa juste valeur.
Cordialement.
Répondre