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

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 Image

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>

#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.

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 :lol:

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
Image

Elementaire mon cher walkson Image

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