Virus détecté dans code VB.Net

Résolu
Miniblock Messages postés 10 Date d'inscription samedi 11 septembre 2010 Statut Membre Dernière intervention 9 mai 2012 - 8 mai 2012 à 11:19
Miniblock Messages postés 10 Date d'inscription samedi 11 septembre 2010 Statut Membre Dernière intervention 9 mai 2012 - 9 mai 2012 à 13:20
Bonjour , j'ai codé un petit programme en VB.net qui récupère des données sur un forum et les affiche.
Le problème , je me suis fait bannir du forum parce que un antivirus affichait un faux-positif.
Voici le scan :
https://www.virustotal.com/file/7be223eb09009a080b89a17cd6af892e3d724f81eded432e1a2686a093c6d2ba/analysis/1336468445/

Et voici le code source :
Imports System.IO

Public Class Form1
    'Déclaration des variables
    Dim WB As New WebBrowser
    Dim chaine As String
    Dim pseudo As String
    Dim Quota As Integer = 1000000
    Dim msgquota As Boolean = False
    Dim rang As String
    Dim prochrang As Integer
    Dim ovX As Integer
    Dim ovY As Integer
    'Fin des déclarations

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'au lancement
        Try
            'Lecture dans le fichier des options
            Dim sr As New StreamReader("options.cfg") 'Définition et Ouverture du flux de lecture
            pseudo = sr.ReadLine() 'Stocke le pseudo dans une variable
            rang = sr.ReadLine() 'Stocke la rang dans une variable
            If sr.ReadLine() = "True" Then 'Définit si l'overlay est activé par défaut
                CBO.Checked = True
                Overlay.Show()
                ovX = sr.ReadLine() 'Stocke la coordonnée horizontale de l'overlay
                ovY = sr.ReadLine() 'Stocke la coordonnée verticale de l'overlay
                Overlay.Location = New Point(ovX, ovY) 'Définit la position de l'overlay
            End If
            sr.Close() 'Fermeture du flux de lecture
            'fin de la lecture
            CBR.SelectedItem = rang 'Met la liste sur le bon rang dans l'onglet "pseudo"
            TB.Text = pseudo 'Affiche le pseudo dans la case dans l'onglet "pseudo"
            Me.Text = "JVStats - " & pseudo 'Ajoute le pseudo dans le titre de la feêtre
            WB.Navigate("http://m.jeuxvideo.com/profil/" & pseudo & ".html") 'Ordonne au navigateur (invisible , c'est peût être ça qui est détecté comme trojan) d'aller sur l'URL de a CDV
            If rang = "Carton" Then 'Définit lenombre de point pour aller au rang suivant
                prochrang = 50
            ElseIf rang = "Bronze" Then
                prochrang = 200
            ElseIf rang = "Argent" Then
                prochrang = 1000
            ElseIf rang = "Or" Then
                prochrang = 10000
            ElseIf rang = "Rubis" Then
                prochrang = 150000
            ElseIf rang = "Diamant" Then
                prochrang = 1000000
            End If
            PB.Maximum = prochrang 'définit le nombre de point comme la fin de la barre de chargement
        Catch
            MsgBox("Erreur ! Impossible d'obtenir les données du fichier options.cfg , verifiez qu'il est bien présent !") 'Message d'erreur si opération impossible
            Me.Close()
        End Try
    End Sub

    Private Sub TIM_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TIM.Tick 'quand le timer à fait un tour
        Try
            WB.Refresh() 'Rafraichit la navigateur invisible
            chaine = WB.Document.GetElementById("nbpost").InnerHtml 'Stocke une partie de code de la page de la cdv dans une variable
            chaine = chaine.Replace("", "") 'enlève les balives Html dans le code récupéré
            chaine = chaine.Replace("
", "      ") 'Idem
            chaine = Strings.Left(chaine, 54) ' Ne conserve que les 54 premier caractères de la chaine (pour virer une autre partie du code source)
            chaine = chaine.Replace("Nombre de messages postés sur les forums :", "") 'Elève tous les mots pour ne garder que le nombre de posts
            chaine = chaine.Replace(" ", "") 'supprime les espaces
            LBL.Text = "Nombre de messages postés sur les forums : " & chaine 'Affiche les données dans l'onglet "Stats"
            PB.Value = chaine 'met les données dans la barre de progression
            Overlay.LBO.Text = chaine 'affiche dans l'overlay le nombre de posts
            Overlay.LBR.Text = prochrang - chaine 'affiche le nombre de messages avant le prochain rang
            If CB.Checked = True Then 'Si la case de l'objectif est cochée
                If chaine > Quota Then 'et si le nombre de posts est supérieur au quota
                    If msgquota = False Then 'et si un adjectif est défini
                        MsgBox("Quota atteint avec succès , veillez en entrer un autre ou désactiver l'option !") 'afficher ce message
                    End If
                End If
            End If
        Catch
            TIM.Enabled = False 'si il y a une erreur , couper le timer (ceux qui permet d'actualiser toutes les 7,5 secondes)
            MsgBox("Erreur ! Impossible d'obtenir le nombre de posts , vérifiez que le pseudo n'est pas banni et qu'il est juste. S'il est faux, corrigez le et relancez le logiciel !") 'affiche ce message d'erreur
        End Try
    End Sub

    Private Sub CB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB.CheckedChanged 'quand l'état de la case change (objectif)
        If CB.Checked = True Then 'Si la checkbox de l'objectif est cochée
            CB.Text = "Quota de messages à atteindre :" 'change le texte de la checkbox
            TBO.Visible = True 'la zone de texte ok devient visible
            BTO.Visible = True 'le bouton devient visible
        Else 'sinon (pas cohé)
            CB.Text = "Activer l'objectif" 'change le texte
            TBO.Visible = False 'devient invisible
            BTO.Visible = False 'devient invisible
            msgquota = True 'Le quota de message est activé
        End If
    End Sub

    Private Sub BTO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTO.Click 'quand on clique sur OK (objectif)
        Try
            Quota = TBO.Text 'le cota prend le nombre dans la case
        Catch
            MsgBox("Erreur ! Vérifiez que vous n'avez pas entrés de lettres ou d'espaces !") 'Erreur si autre chose que des chiffres sont entrés !
        End Try
        msgquota = True 'active l'objectif
        MsgBox("Objectif activé avec succès ! (" & Quota & " messages)") 'message pour dire que c'est ok
    End Sub

    Private Sub CBOV_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBO.CheckedChanged 'quand l'état de la case change
        If CBO.Checked = True Then 'si cochée
            Overlay.Show() 'afficer l'overlay
        Else 'sinon
            Overlay.Close() 'le cacher
        End If
    End Sub

    'Partie sauvegardes
    Private Sub BTS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTS.Click
        Sauvegarde() 'invoquation de la sous-procédure "sauvegarde"
    End Sub

    Private Sub BTA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTA.Click
        Sauvegarde() 'idem
    End Sub

    Public Sub Sauvegarde() 'déclaration de la sous-procédure
        Try
            'Ouverture flux d'écriture
            Dim sw As New StreamWriter("options.cfg", False) 'déclaration du flux
            sw.WriteLine(TB.Text) 'ecrire la pseudo
            sw.WriteLine(CBR.SelectedItem) 'ecrire le rang
            sw.WriteLine(CBO.Checked.ToString) 'ecris si l'overlay est activé ou non
            sw.WriteLine(Overlay.Location.X) 'ecris position horizontale overlay
            sw.WriteLine(Overlay.Location.Y) 'ecris position verticale overlay
            sw.Close()
            'Fermeture flux
            MsgBox("Options sauvegardés avec succès ! Vous devez relancer le programme pour que les changements soit pris en comptes") 'Message ok
        Catch
            MsgBox("Erreur ! Impossible d'accéder au fichier Options.cfg !") 'message erreur
        End Try
    End Sub
End Class



Je ne comprends pas où ça cloche... Quelle est la partie de mon code qui est détectée comme "trojan" ?

Merci d'avance de vos réponse :)

6 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 mai 2012 à 18:17
Bonjour
L'antivirus dénonciateur est un antivirus chinois (Jiangmin)
Il ne dénonce pas des lignes de code (ce n'est pas le rôle d'un antivirus), mais l'exe lui-même (ou l'un de ses composants).

Un code peut-être écrit proprement (voire compilé proprement), puis l'exécutable être ensuite pollué.
Une appli qui utilise un composant non "sur" , donne par ailleurs, une fois compilée, un exécutable qui "trimbale" avec lui les "saletés" que contiendrait éventuellement ce composant.

Tu es seul à pouvoir analyser à l'aide d'un antivirus sérieux si ton exe (pas son code) est sain et si les composants qu'il utilise éventuellement sont également sains.

Si tu trouves également un "malware" quelconque, tu ferais alors aussi bien de procéder à l'analyse de la totalité de ta machine.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
1
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 mai 2012 à 13:10
j'ai nettoyé une grande partie du code

Laquelle ?
Probablement des appels de dll ou activex


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
1
Utilisateur anonyme
8 mai 2012 à 17:37
Bonjour,

Comment veux-tu que l'on devine ? Demande au responsable du forum en question ? On ne fait même pas comment lui est arrivé à cette conclusion.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 mai 2012 à 20:16
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Miniblock Messages postés 10 Date d'inscription samedi 11 septembre 2010 Statut Membre Dernière intervention 9 mai 2012
9 mai 2012 à 12:26
Bonjour , bizarrement , j'ai nettoyé une grande partie du code et plus rien n'est détecté :)

Merci quand même de votre aide !
0
Miniblock Messages postés 10 Date d'inscription samedi 11 septembre 2010 Statut Membre Dernière intervention 9 mai 2012
9 mai 2012 à 13:20
Je sais pas trop en fait , voilà le nouveau code source :

Imports System.IO

Public Class Form1
    Dim WB As New WebBrowser
    Dim chaine As String
    Dim pseudo As String
    Dim Quota As Integer = 1000000
    Dim msgquota As Boolean = False
    Dim rang As String
    Dim prochrang As Integer
    Dim ovX As Integer
    Dim ovY As Integer
    Dim verifrang As Boolean = True
    'Fin des déclarations

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'au lancement
        Try
            'Lecture dans le fichier des options
            Dim sr As New StreamReader("options.cfg") 'Définition et Ouverture du flux de lecture
            pseudo = sr.ReadLine() 'Stocke le pseudo dans une variable
            rang = sr.ReadLine() 'Stocke le rang dans une variable
            If sr.ReadLine() = "True" Then 'Définit si l'overlay est activé par défaut
                CBO.Checked = True
                Overlay.Show()
                ovX = sr.ReadLine() 'Stocke la coordonnée horizontale de l'overlay
                ovY = sr.ReadLine() 'Stocke la coordonnée verticale de l'overlay
                Overlay.Location = New Point(ovX, ovY) 'Définit la position de l'overlay
            End If
            sr.Close() 'Fermeture du flux de lecture
            'fin de la lecture
            Overlay.Text = rang 'Le titre de l'overlay correspond au rang
            LBR.Text = "Rang :" & rang 'Affiche le rang dans l'onglet "pseudo"
            TB.Text = pseudo 'Affiche le pseudo dans la case dans l'onglet "pseudo"
            Me.Text = "JVStats - " & pseudo 'Ajoute le pseudo dans le titre de la fenêtre
            If rang = "Null" Then
                verifrang = False
            Else
                verifrang = True
                PostsRang()
            End If
            WB.Navigate("http://www.jeuxvideo.com/profil/" & pseudo & ".html") 'Ordonne au navigateur (invisible , c'est peût être ça qui est détecté comme trojan) d'aller sur l'URL de a CDV
        Catch
            Config_Rapide.Show()
            Me.Close()
        End Try
    End Sub

    Private Sub TIM_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TIM.Tick 'quand le timer à fait un tour
        Try
            If verifrang = False Then
                rang = WB.Document.GetElementById("prang").InnerHtml
                rang = rang.Replace("", "") 'enlève les balives Html dans le code récupéré
                rang = rang.Replace("", "") 'Idem
                rang = rang.Replace("""", "      ")
                rang = Strings.Right(rang, 10)
                rang = rang.Replace(" ", "")
                Sauvegarde()
                PostsRang()
                verifrang = True
            End If
            chaine = WB.Document.GetElementById("td_pts").InnerHtml 'Stocke une partie de code de la page de la cdv dans une variable
            chaine = chaine.Replace("", "") 'enlève les balives Html dans le code récupéré
            chaine = chaine.Replace("", "") 'Idem
            chaine = chaine.Replace("", "") 'Idem
            chaine = chaine.Replace("", "") 'Idem
            chaine = chaine.Replace("points", "") 'Supprime le mot "points"
            chaine = chaine.Replace(" ", "") 'Supprime les espaces
            LBL.Text = "Nombre de points : " & chaine 'Affiche les données dans l'onglet "Stats"
            PB.Value = chaine 'met les données dans la barre de progression
            If verifrang = True Then
                Overlay.LBO.Text = chaine 'affiche dans l'overlay le nombre de posts
                Overlay.LBR.Text = prochrang - chaine 'affiche le nombre de messages avant le prochain rang
            End If
            If CB.Checked = True Then 'Si la case de l'objectif est cochée
                If chaine > Quota Then 'et si le nombre de posts est supérieur au quota
                    If msgquota = False Then 'et si un adjectif est défini
                        MsgBox("Quota atteint avec succès , veillez en entrer un autre ou désactiver l'option !") 'afficher ce message
                    End If
                End If
            End If
            WB.Refresh() 'Rafraichit la navigateur invisible
        Catch
            TIM.Enabled = False 'si il y a une erreur , couper le timer (ceux qui permet d'actualiser toutes les 7,5 secondes)
            MsgBox("Erreur ! Impossible d'obtenir le nombre de posts , vérifiez que le pseudo n'est pas banni et qu'il est juste. S'il est faux, corrigez le et relancez le logiciel !") 'affiche ce message d'erreur
        End Try
    End Sub

    Private Sub CB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB.CheckedChanged 'quand l'état de la case change (objectif)
        If CB.Checked = True Then 'Si la checkbox de l'objectif est cochée
            CB.Text = "Quota de messages à atteindre :" 'change le texte de la checkbox
            TBO.Visible = True 'la zone de texte ok devient visible
            BTO.Visible = True 'le bouton devient visible
        Else 'sinon (pas cohé)
            CB.Text = "Activer l'objectif" 'change le texte
            TBO.Visible = False 'devient invisible
            BTO.Visible = False 'devient invisible
            msgquota = True 'Le quota de message est activé
        End If
    End Sub

    Private Sub BTO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTO.Click 'quand on clique sur OK (objectif)
        Try
            Quota = TBO.Text 'le cota prend le nombre dans la case
        Catch
            MsgBox("Erreur ! Vérifiez que vous n'avez pas entrés de lettres ou d'espaces !") 'Erreur si autre chose que des chiffres sont entrés !
        End Try
        msgquota = True 'active l'objectif
        MsgBox("Objectif activé avec succès ! (" & Quota & " messages)") 'message pour dire que c'est ok
    End Sub

    Private Sub CBOV_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBO.CheckedChanged 'quand l'état de la case change
        If CBO.Checked = True Then 'si cochée
            Overlay.Show() 'afficer l'overlay
        Else 'sinon
            Overlay.Close() 'le cacher
        End If
    End Sub

    'Partie sauvegardes
    Private Sub BTS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTS.Click
        Sauvegarde() 'invoquation de la sous-procédure "sauvegarde"
    End Sub

    Private Sub BTA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTA.Click
        Sauvegarde() 'idem
    End Sub

    Public Sub Sauvegarde() 'déclaration de la sous-procédure
        Try
            'Ouverture flux d'écriture
            Dim sw As New StreamWriter("options.cfg", False) 'déclaration du flux
            sw.WriteLine(TB.Text) 'ecrire la pseudo
            sw.WriteLine(rang) 'ecrire le rang
            sw.WriteLine(CBO.Checked.ToString) 'ecris si l'overlay est activé ou non
            sw.WriteLine(Overlay.Location.X) 'ecris position horizontale overlay
            sw.WriteLine(Overlay.Location.Y) 'ecris position verticale overlay
            sw.Close()
            'Fermeture flux
            MsgBox("Options sauvegardés avec succès ! Vous devez relancer le programme pour que les changements soit pris en comptes") 'Message ok
        Catch
            MsgBox("Erreur ! Impossible d'accéder au fichier Options.cfg !") 'message erreur
        End Try
    End Sub

    Public Sub PostsRang()
        If rang = "BRONZE" Then
            prochrang = 50
        ElseIf rang = "ARGENT" Then
            prochrang = 200
        ElseIf rang = "OR" Then
            prochrang = 1000
        ElseIf rang = "RUBIS" Then
            prochrang = 10000
        ElseIf rang = "DIAMANT" Then
            prochrang = 150000
        End If
        PB.Maximum = prochrang 'définit le nombre de point du prochain rang comme la fin de la barre de chargement
        LBR.Text = "Rang : " & rang
    End Sub
End Class
0
Rejoignez-nous