非恶意 vb.net 控制台应用被检测为病毒? (FTP 上传者)

Non Malicious vb.net Console app detected as virus? (FTP uploader)

所以我为我的一些朋友的计算机制作了一个 "dropbox" 类型的程序。您将文件放在特定文件夹中,当我的控制台应用程序看到创建的文件时,它会通过 ftp 将其上传到我的服务器。然后该文件将从他们的计算机中删除。在我的电脑上,我有另一个程序 运行ning 检查 ftp 服务器上的新文件,并将它们下载到我的电脑上。

总之,我做这个主要是为了学习,但也有一定的用途。问题是如果他们安装了 avg,它会将其检测为普通病毒。我的代码中有什么我可以更改的,所以它看起来不像是病毒吗?

控制台应用程序在启动时有一个 运行 注册表项。我还在项目设置中将应用程序类型设置为 windows 表单应用程序,因此控制台应用程序基本上是 运行 隐藏的。

代码:

Imports System.IO

Module Module1

Sub Main()
    Dim watcher As New FileSystemWatcher()
    watcher.Path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
    watcher.EnableRaisingEvents = True
    watcher.Filter = ""
    AddHandler watcher.Created, AddressOf OnChanged
    While True
    End While
End Sub
Private Sub OnChanged(source As Object, e As FileSystemEventArgs)
    'when a file is created
    Dim FilePath As String = e.FullPath
    Try
        Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("Ftp server" & System.IO.Path.GetFileName(FilePath)), System.Net.FtpWebRequest)
        request.Credentials = New System.Net.NetworkCredential("user", "pass")
        request.Method = System.Net.WebRequestMethods.Ftp.UploadFile

        Dim file() As Byte = System.IO.File.ReadAllBytes(FilePath)

        Dim strz As System.IO.Stream = request.GetRequestStream()
        strz.Write(file, 0, file.Length)
        strz.Close()
        strz.Dispose()
        System.IO.File.Delete(FilePath)
    Catch ex As Exception
        Exit Try
    End Try
End Sub
End Module

出于安全目的,我删除了 ftp 信息:)

The console app has a registry entry to run it at startup.

so the console app basically runs hidden.

[watches directory and without user interaction..] it uploads it via ftp to my server

经典的恶意软件检测是通过签名完成的,但这种方式主要可以检测到已知的恶意软件。因此,当前的 AV 引擎使用行为分析来检测可疑行为。不幸的是,您所做的一些事情也是恶意软件窃取用户数据的典型行为,因此这可能会触发行为分析。

您不是唯一遇到此问题的人,即使是大公司也面临此问题,并且还有一些案例是 AV 产品将 windows 的关键组件检测为恶意软件。因为你可能无法让所有的 AV 供应商将你的程序添加到他们的白名单中,所以最好的方法可能是,如果你的程序在你朋友的机器上有一个明确的例外。如何做到这一点取决于所使用的 AV,但我相信有办法做到这一点。