Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Problème d'antivirus incompréhensible


Sujet :

VB 6 et antérieur

  1. #1
    Modérateur

    Problème d'antivirus incompréhensible
    Bonjour à tous.

    Dans notre (vieux) logiciel commercial, nous avons quelques utilitaires périphériques dont certains se font bouffer par les antivirus (bitdefender entre-autre) chez les clients, au titre qu'ils contiendraient un malware. Ci dessous, le code complet d'un de ces utilitaires concernés.

    Je n'arrive pas à comprendre ou est le malware dans ce code, et surtout comment contourner la détection.

    J'ai même réécrit complètement l'utilitaire, en le simplifiant encore plus, en C# (donc autre langage, autre techno), l'exe en résultant est aussi détecté par certains AV, même si le nombre semble moindre.


    NOTA : xxxxxxxx dans le code est à la fois le nom du logiciel, le dossier d'installation, et le site web privé d'hébergement des fichiers à récupérer, hébergé chez un prestataire français.

    Code vb :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
    Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
    Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
     
    Private Sub Form_Load()
        Me.Top = -5000
    End Sub
     
    Private Sub Form_Activate()
    Dim reponse As String
    Dim URL As String
    On Error GoTo fin
     
        Tue "c:\xxxxxxxx\divers\inseeIRL.txt"
        URL = "https://www.xxxxxxxx.eu/insee/inseeIRL.txt"
     
        reponse = URLcodeSource(URL)
        Open "c:\xxxxxxxx\divers\inseeIRL.txt" For Output Shared As #1
        Print #1, reponse
        Close #1
     
    End
    fin:
        MsgBox "Impossible de télécharger les indices IRL, veuillez vérifier votre accès à internet ou le paramétrage de votre pare-feu ou de votre anti-virus.", vbExclamation
        Tue "c:\xxxxxxxx\divers\inseeIRL.txt"
        Open "c:\xxxxxxxx\divers\inseeIRL.txt" For Output Shared As #1
        Print #1, "erreur";
        Close #1
        End
    End Sub
     
    Sub Tue(Chem As String)
    On Error Resume Next
        Kill Chem
    End Sub
     
    Function URLcodeSource(URL As String) As String
    Dim hOpen As Long, hFile As Long, sBuffer As String, Ret As Long
    On Error GoTo fin
     
        'Create a buffer for the file we're going to download
        sBuffer = Space(10000)
        'Create an internet connection
        hOpen = InternetOpen("XXXXXXXX Indices INSEE", 1, vbNullString, vbNullString, 0)
        'Open the url
        hFile = InternetOpenUrl(hOpen, URL, vbNullString, ByVal 0&, &H80000000, ByVal 0&)
        'Read the first 1000 bytes of the file
        InternetReadFile hFile, sBuffer, 10000, Ret
        'clean up
        InternetCloseHandle hFile
        InternetCloseHandle hOpen
        'Show our file
        URLcodeSource = RTrim(sBuffer)
     
    Exit Function
    fin:
        URLcodeSource = ""
    End Function
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  2. #2
    Membre éprouvé
    Les antivirus détectent quelque fois (souvent !) des virus imaginaires. Tu peux toujours leurs dire de foutre la paix aux programmes dont tu es sûr.

  3. #3
    Modérateur

    Si ça avait été si simple, je n'aurais pas posé la question.

    Dans le cas de bitdefender, par exemple, c'est la partie antimalware qui détecte quelque chose, et la partie antimalware de l'antivirus ne semble pas tenir compte des exclusions que l'on configure dans l'antivirus. Cette partie antimalware n'est d'ailleurs pas configurable.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  4. #4
    Rédacteur/Modérateur

    Salut

    As-tu essayé de faire un fichier manifeste pour exécutable, si oui, même problème ?
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  5. #5
    Modérateur

    Non, je n'ai pas essayer le fichier manifest. Mais comment le créer, avec vb6, et quoi y mettre dedans ?

    Et puis comment faire le test ensuite. Actuellement je teste avec VirusTotal, je ne pense pas qu'il prenne en compte le fichier manifest.
    Le seul autre moyen est de distribuer ça aux clients et attendre que ça pète, ou pas.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  6. #6
    Rédacteur/Modérateur

    Re

    Exemple d'un fichier manifest, a mettre dans le même dossier que exécutable tout en lui donnant le même nom que exécutable soit

    Code XML :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level='requireAdministrator' uiAccess='false' />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </assembly>
    donc l'enregistrer sous le_nom_de_mon_appli.exe.manifest

    Une discussion sur les 3 possibilités pour <requestedExecutionLevel level= ....

    Je ne prétend pas que cela va fonctionner du premier coup, mais ..... a essayer.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  7. #7
    Modérateur

    Bon petit test sur un de mes postes avec le manifest, c'est pas convaincant. L'exe n'est pas systématiquement bouffé, mais il est parfois quand même. C'était déjà le cas sur ce poste.
    J'ai pas pu tester chez un client encore.

    Là ou je ne comprend pas, c'est qu'il y a 4 utilitaires strictement identiques, seul le nom du fichier téléchargé et enregistré change. Sur la plupart des cas rencontrés, seul 1 exe est bouffé, pas les 3 autres. On a un cas, où un second est aussi bouffé.
    Chez certains c'est systématique, chez d'autres, comme sur le poste en interne, ce n'est pas systématique. On peut arriver à exécuter le logiciel, parfois. Quelques fois plusieurs fois de suite avant qu'il ne soit détecté comme malware.

    La plupart du temps, c'est à l’exécution qu'ils sont détectés, pas à la l’écriture sur le disque.

    Et on a un cas, mais je sais pas si c'est lié, ou c'est directement le package d'installation du logiciel, contenant autre ces utilitaires, qui est identifié par l'antivirus, ce coup-ci, et directement à la copie sur le disque. Mais dans ce cas là, c'est un autre antivirus, TrendMicro, qui nous fait le coup.

    Bien évidemment, j'ai scanné mon poste de développement avec plusieurs antivirus disponibles et avec Malwarebytes. Aucun ne me détecte d'autres fichiers. Il n'y a que Bitdefender et Malwarebytes qui me détecte seulement cet utilitaire. Et ce même si je le recompile.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  8. #8
    Rédacteur/Modérateur

    Salut

    A vouloir tout blinder, les systèmes de surveillances finissent par mettre une pagaille aussi importante que l'apport de sécurité quelles prétendent donner.
    Le plus ennuyeux, c'est qu'en payant, tu peux faire enregistrer ton exécutable comme non malvaillant, pour moi il y a de plus en plus de sous entendu commercial dans les systèmes de protections.

    Bon courage pour la suite.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.