[R] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

[R] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#1

Message 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.
Modifié en dernier par Boulanza le lun. 30 oct. 2023 09:52, modifié 3 fois.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#2

Message par walkson »

Bonjour,
C'est un peu le boulot de l'anti-virus :mrgreen:
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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#3

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#4

Message par mikell »

"C:\Windows\System32" , c'est @SystemDir, pas @ScriptDir Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#5

Message par Boulanza »

Pas de changement : pas de résultat.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#6

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#7

Message 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.
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#8

Message 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>

#NoTrayIcon
Opt("TrayAutoPause", 0)
Opt('GUIOnEventMode', 1)
Opt('GUICloseOnEsc' , 1)
FileDelete ("Uninstall.txt")

Global $i
Global $sSft
Global $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)
Next
GUICtrlSendMsg($sLvw, 0x101E, 0, 450)
Local $exp = GUICtrlCreateButton('  Uninstall  ', 0, 475)
GUICtrlSetOnEvent($exp, '_Uninstall')
GUISetOnEvent(-3, '_AllExit')
GUISetState(@SW_SHOW, $sGui)

While 1
    Sleep(1000)
WEnd

Func _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)
EndFunc

Func _AllExit()
    GUIDelete($sGui)
    FileDelete ("Uninstall.txt")
    Exit
EndFunc

Func _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")
    EndIf
EndFunc

Func _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")
        Exit
EndFunc
Merci votre aide et et de votre aimable compréhension.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#9

Message 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 !)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [ ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#10

Message 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.
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#11

Message 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.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#12

Message 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.
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#13

Message 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.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#14

Message 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.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#15

Message 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 :lol:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#16

Message par mikell »

Image

Elementaire mon cher walkson Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [ R ] Script sous Autoit, pour empêcher l’installation des logiciels exécutables non signés numériquements.

#17

Message 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
Répondre