Page 1 sur 1
[R] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : sam. 17 sept. 2022 11:13
par Boulanza
Bonjour tout le monde,
Votre aide svp :
Quelqu'un connaît-il un script ou une idée sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements, ceci est dans le but de confirmer l’identité de l’auteur du logiciel et de garantir que le code n’a pas été modifié ou corrompu depuis qu’il a été signé.
Merci pour votre aide.
Cordialement.
Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : sam. 17 sept. 2022 14:49
par walkson
Bonjour,
C'est un peu le boulot de l'anti-virus
Sinon il y a
https://www.autoitscript.fr/wiki/Signer ... ériquement mais cela date de plus de 10 ans et je ne sais pas si c'est encore fonctionnel. (voir à la fin "Vérifier si un code est signé")
Enfin il y a
https://www.virustotal.com/gui/home/upload
Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : sam. 17 sept. 2022 20:25
par Boulanza
Merci pour votre réponse très enrichissante.
J'ai consulté les suggetions de Monsieur walkson :
https://www.autoitscript.com/forum/topi ... file-path/
Sous dos (CMD) ça marche parfettement avec le code:
C:\Windows\System32>sigcheck.exe -q "C:\Program Files (x86)\AutoIt3\AutoIt3.exe"
Mais pas avec le code:
$FolderPath = '"' & "C:\Program Files (x86)\AutoIt3\AutoIt3.exe" & '"'Run(@ComSpec & " /c " & '"' & @ScriptDir & "" & "sigcheck.exe" & '"' & " -a -s -q -v " & $FolderPath & " >> " & '"' & @ScriptDir & "Precheck" & "sigcheck.txt" & '"', "", @SW_HIDE)
Je ne trouve pas l'erreur du code.
Votre aide svp.
Cordialement.
Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : sam. 17 sept. 2022 21:40
par mikell
"C:\Windows\System32" , c'est
@SystemDir, pas
@ScriptDir
Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : sam. 17 sept. 2022 22:33
par Boulanza
Pas de changement : pas de résultat.
Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : dim. 18 sept. 2022 00:36
par walkson
Bonjour,
Le code est dans le dossier sigcheck au coté de sigcheck.exe
Code : Tout sélectionner
$sFile = FileOpenDialog("executable", @DesktopDir, "exe(*.exe)")
If @error Then Exit
RunWait(@ComSpec & ' /c ' & '"' & @ScriptDir & '\sigcheck.exe" -q ' & $sFile & '>' & @ScriptDir & '\infoB.txt')
Sleep(1000)
ShellExecute(@ScriptDir & '\infoB.txt')
avec
RunWait(@ComSpec & ' /k '
la fenêtre cmd reste ouverte
Il y a aussi ce code qui vérifie si un programme est signé. S'il ne l'est pas, cela renvoie 0
Code : Tout sélectionner
$sFile = FileOpenDialog("executable", @DesktopDir, "exe(*.exe)")
If @error Then Exit
;https://www.autoitscript.com/forum/topic/124467-verifying-signed-files/?do=findComment&comment=866254 trancexx On KaFu's...
$message = _PrintSignerInfo($sFile)
MsgBox(32,"Message",$message)
Func _PrintSignerInfo($sFile)
If Not FileExists($sFile) Then Return SetError(1)
Local Const $CERT_QUERY_OBJECT_FILE = 0x1
Local Const $CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED = 10
Local Const $CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = 2 ^ $CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED
Local Const $CERT_QUERY_FORMAT_BINARY = 0x1
Local Const $CERT_QUERY_FORMAT_FLAG_BINARY = 2 ^ $CERT_QUERY_FORMAT_BINARY
Local Const $CMSG_SIGNER_INFO_PARAM = 0x6
Local Const $X509_ASN_ENCODING = 0x00000001
Local Const $PKCS_7_ASN_ENCODING = 0x00010000
Local Const $CERT_FIND_SUBJECT_CERT = 720896
Local $aCall = DllCall("Crypt32.dll", "bool", "CryptQueryObject", _
"dword", $CERT_QUERY_OBJECT_FILE, _
"wstr", $sFile, _
"dword", $CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED, _
"dword", $CERT_QUERY_FORMAT_FLAG_BINARY, _
"dword", 0, _
"dword*", 0, _
"dword*", 0, _
"dword*", 0, _
"handle*", 0, _
"handle*", 0, _
"ptr", 0)
Local $iMsgAndCertEncodingType = $aCall[6]
Local $iContentType = $aCall[7]
Local $iFormatType = $aCall[8]
Local $hCertStore = $aCall[9]
Local $hMsg = $aCall[10]
Local $message
$message ="MsgAndCertEncodingType = " & $iMsgAndCertEncodingType & @CRLF
$message &= "ContentType = " & $iContentType & @CRLF
$message &= "FormatType = " & $iFormatType & @CRLF
$message &= "CertStore = " & $hCertStore & @CRLF
$message &= "Msg = " & $hMsg & @CRLF & @CRLF
; Simple check
If Not $hMsg Then Return
$aCall = DllCall("Crypt32.dll", "bool", "CryptMsgGetParam", _
"handle", $hMsg, _
"dword", $CMSG_SIGNER_INFO_PARAM, _
"dword", 0, _
"ptr", 0, _
"dword*", 0)
Local $iSize = $aCall[5]
Local $tBuffer = DllStructCreate("byte[" & $iSize & "]")
$aCall = DllCall("Crypt32.dll", "bool", "CryptMsgGetParam", _
"handle", $hMsg, _
"dword", $CMSG_SIGNER_INFO_PARAM, _
"dword", 0, _
"ptr", DllStructGetPtr($tBuffer), _
"dword*", DllStructGetSize($tBuffer))
; Shorter CMSG_SIGNER_INFO structure (I want Issuer only)
Local $tCMSG_SIGNER_INFO_MOD = DllStructCreate("dword Version;" & _
"dword_ptr IssuerSize;" & _
"ptr Issuer;", _
DllStructGetPtr($tBuffer))
$aCall = DllCall("Crypt32.dll", "dword", "CertNameToStrW", _
"dword", 1, _ ; X509_ASN_ENCODING
"ptr", DllStructGetPtr($tCMSG_SIGNER_INFO_MOD, "IssuerSize"), _
"dword", 0x08000003, _ ; CERT_X500_NAME_STR|CERT_NAME_STR_CRLF_FLAG
"wstr", "", _
"dword", 65536)
$message &= $aCall[4] & @CRLF
Return $message
EndFunc
Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : dim. 18 sept. 2022 10:07
par Boulanza
Bonjour,
Merci infiniment walkson.
Les deux scripts marchent parfaitement. Ceci est dans le but de verifier tous les logiciels (*exécutables.exe) qui sont installés sur le PC s'ils sont signés numiriquement ou pas. Cette initiative va nous permettre d'éviter beaucoup de dégâts causés volontairement par les intrus.
Cordialement.
Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : dim. 18 sept. 2022 10:46
par Boulanza
La suite, est de verifier tous les programme installés sur le PC qui se trouve dans le dossier "Program Files (x86) " et qui ne sont pas signés (retour 0) pour les désinstallés du PC avec l'aide du code suivant que je cherche à optimiser avec le 2° code suggéré par wilkson.
; www.autoitscript.com/forum/topic/142042-add-checkboxs-in-a-gui-list/; www.autoitscript.com/forum/topic/142722-generate-program-list/#include <GuiListView.au3>#NoTrayIconOpt("TrayAutoPause", 0)Opt('GUIOnEventMode', 1)Opt('GUICloseOnEsc' , 1)FileDelete ("Uninstall.txt")Global $iGlobal $sSftGlobal $sGui = GUICreate('Select Programs You want to Uninstall:', 471, 500, -1, -1)Global $sLvw = GUICtrlCreateListView('Program Name', 2, 2, 467, 470, -1, $LVS_EX_CHECKBOXES)Global $SelectAll = GUICtrlCreateListViewItem("Check All", $sLvw)GUICtrlSetOnEvent($SelectAll, '_AllSelect')_ComputerGetSoftware
($sSft)For $i = 1 To ubound($sSft) - 1 GUICtrlCreateListViewItem($sSft[$i], $sLvw)NextGUICtrlSendMsg($sLvw, 0x101E, 0, 450)Local $exp = GUICtrlCreateButton(' Uninstall ', 0, 475)GUICtrlSetOnEvent($exp, '_Uninstall')GUISetOnEvent(-3, '_AllExit')GUISetState(@SW_SHOW, $sGui)While 1 Sleep(1000)WEndFunc _ComputerGetSoftware
(ByRef $aSoftwareInfo) Local Const $UnInstKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" Local $i = 1 Dim $aSoftwareInfo[1] For $j = 1 To 500 $AppKey = RegEnumKey($UnInstKey, $j) If @error <> 0 Then Exitloop If RegRead($UnInstKey & "\" & $AppKey, "DisplayName") = '' Then ContinueLoop ReDim $aSoftwareInfo[UBound($aSoftwareInfo) + 1] $aSoftwareInfo[$i] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "DisplayName"), 1) $i = $i + 1 Next $aSoftwareInfo[0] = UBound($aSoftwareInfo, 1) - 1 Return _ArraySort($aSoftwareInfo)EndFuncFunc _AllExit
() GUIDelete($sGui) FileDelete ("Uninstall.txt") ExitEndFuncFunc _AllSelect
() Local Const $iCount = _GUICtrlListView_GetItemCount($sLvw) If Not _GUICtrlListView_GetItemChecked($sLvw, $SelectAll) Then For $i = 0 To $iCount _GUICtrlListView_SetItemChecked($sLvw, $i, 2) Next GUICtrlSetData($SelectAll, "Uncheck All") Else For $i = 0 To $iCount _GUICtrlListView_SetItemChecked($sLvw, $i, 0) Next GUICtrlSetData($SelectAll, "Check All") EndIfEndFuncFunc _Uninstall
() Local Const $iCount = _GUICtrlListView_GetItemCount($sLvw) FileOpen("Uninstall.txt", 2) For $i = 1 To $iCount If _GUICtrlListView_GetItemChecked($sLvw, $i - 1) Then FileWrite("Uninstall.txt", _GUICtrlListView_GetItemText($sLvw, $i - 1) & @CRLF) EndIf Next FileClose ("Uninstall.txt") ShellExecute("Uninstall.bat") ExitEndFunc
Merci votre aide et et de votre aimable compréhension.
Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : dim. 18 sept. 2022 11:44
par walkson
Bonjour,
Vous risquez d'avoir de mauvaises surprises car des exécutables non signés existent sans être des virus. Je pense par exemple à sqlite3.exe très utile pour les bases de données et qui n'est pas signé ! Sans parler des EXE produits par Autoit qui ne sont pas signés etc....
Laissez faire l'antivirus qui produit suffisamment de faux positifs pour ne pas en rajouter ! Une bonne analyse régulière des disques et l'usage d'un bon pare-feu devrait suffire. C'est un avis personnel qui n'engage que moi.... (et éviter de télécharger sur certains sites douteux ou des pièces jointes de mail. Sandboxé des fichiers louches peut être très utile !)
Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : dim. 18 sept. 2022 12:04
par Boulanza
Bonjour,
Vous avez complétement raison lorsque on dispose d'un bon antivirus! Les intrus (pirates informatiques) ont leur propre outils et astuces pour contrer les antivirus. Le moyen le plus sûr est de créer une solution fait maison.
Cordialement.
Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : mer. 05 oct. 2022 19:34
par jpascal
Bonjour Boulanza,
On ne badine pas avec la sécurité.
Si vous voulez prendre le moins de risque, il vous faudra utiliser des solutions professionnelles, ce qui impliquera de devoir signer les exécutables créés avec AutoIt.
Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : ven. 07 oct. 2022 13:25
par Boulanza
Bonjour jpascal,
Merci pour votre suggetion.
Connaisez-vous des solutions professionnelles, pour signer les exécutables créés avec AutoIt à la portée du public.
Cprdialement.
Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : mer. 12 oct. 2022 10:45
par jpascal
Le plus simple est d'utiliser signtool.exe
Mais il faut quand même acquérir un certificat et ce n'est pas gratuit (pour une utilisation professionnelle).
Pour signer automatiquement à chaque compilation, ajouter dans le fichier .au3 :
#AutoIt3Wrapper_Run_After=signtool.exe sign /v /t
http://timestamp.digicert.com /n "NOM_de_la_SOCIETE" "%outx64%"
il me semble que cette question a déjà été traitée dans un tuto sur le forum mais avec des certificats auto signés.
Je vous laisse chercher pour plus de détails.
Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : lun. 17 oct. 2022 21:35
par Boulanza
Merci jpascal pour votre très aimable aide.
Consultez ce lien pour signer votre exe avec une signature numérique / Signtool.exe:
https://www.autoitscript.com/forum/topi ... gntoolexe/
Cordialement.
Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : lun. 17 oct. 2022 22:57
par walkson
QU'EST-CE QUE LA SIGNATURE DE CODE ?
La signature de code augmente la confiance des utilisateurs
Les certificats de signature de code sont utilisés par les développeurs de logiciels pour signer numériquement des applications, des pilotes, des exécutables et des programmes logiciels afin que les utilisateurs finaux puissent vérifier que le code qu'ils reçoivent n'a pas été modifié ou compromis par un tiers. Ils comprennent votre signature, le nom de votre entreprise et, si vous le souhaitez, un horodatage.
Si le gentil développeur signe un méchant virus, votre PC sera infecté. Cela revient à dire que sans anti-virus et pare feu vous êtes possiblement une victime potentiel. Je vous renvoie à mon commentaire ci-dessus
Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : mar. 18 oct. 2022 18:06
par mikell
Elementaire mon cher walkson
Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.
Posté : dim. 29 oct. 2023 08:56
par Boulanza
Bonjour tout le mode,
j'ai un problème avec ce script sous Windows 11.
Avec CMD ça marche parfaitement, mais pas sous
@SystemDir&"\WindowsPowerShell\v1.0\powershell.exe"
Pouvez vous me donner la solution à ce problème.
Cordialement.
Code : Tout sélectionner
test()
Func test()
$sCommand = @ScriptDir&"\sigcheck.exe -q"&" "&@ScriptDir&"\test.exe"
Local $nResult = RunWait(@ComSpec & " /C " & $sCommand, "", @SW_HIDE)
MsgBox(32,"test",$nResult)
Return SetError(@error, @extended, $nResult)
EndFunc ;==>_RunDOS