[ 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 : 681
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 mar. 20 sept. 2022 11:39, modifié 1 fois.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 982
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 : 681
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
Modérateur
Modérateur
Messages : 6201
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 : 681
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 : 982
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 : 681
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 : 681
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 : 982
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 : 681
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.
Répondre