C# 程序(Winform 和 WPF)在启动文件夹中创建快捷方式时被视为病毒?

Posted

技术标签:

【中文标题】C# 程序(Winform 和 WPF)在启动文件夹中创建快捷方式时被视为病毒?【英文标题】:C# program (Winform and WPF) be treated as virus when create shortcut in startup folder? 【发布时间】:2021-08-08 14:43:27 【问题描述】:

Windows Defender 通常将我的程序作为病毒隔离,现在我发现了其中一种情况:在启动文件夹中创建快捷方式。

我希望程序可以在电脑启动时自动启动,所以我在里面创建了一个快捷方式

 %APPDATA%\Microsoft\Windows\Start Menu\Programs\StartUp

然后由于Behavior Win32/Persistence.A!ml,Windows Defender 迅速隔离了该程序。

我不知道如何防止这种情况发生,我尝试编辑 AssemblyInfo.cs,似乎没有效果,并且 WPF 在此脚本中没有 GUID 代码。

我现在只能将程序文件夹加入白名单,但显然不能让用户放心,操作也很麻烦。


2021/5/21 更新

麻烦在于Windows Defender报告的不确定性:

Windows Defender 有时会处理它,有时不会。运行的时候可能会被查杀,之后再编译就什么都没有了。这使得它难以复制。

我在之前的应用程序中导入user32.dll引用了一些系统级的方法,但是新建一个Demo进行测试后,就可以正常工作了。 我也试过签名申请,两天后又被隔离了,现在举报变成***:Script/Wacatac.B!ml

不管怎样,我现在很困惑。也许我需要删除代码进行故障排除,但是很难调试,因为它被标记为病毒的时间不确定。

【问题讨论】:

一般来说,autoLaunch 配置是专门用于安装程序(而不是应用程序本身)的任务。已签名的应用程序(带有受信任的证书)可能会被防病毒软件列入白名单,也不会被阻止。 我怀疑启动文件夹中的快捷方式可以单独引起警报。 “这个脚本”到底在做什么?你能为我们准备minimal reproducible example吗?没有它,就没什么好谈的了:你的软件正在做一些破坏性的事情,而防御者会阻止它。 Related 关于超级用户的话题。 来自@invictusWarrior:尝试使用 RegistryKey 吗?快捷方式是以编程方式制作的,还是您用鼠标将其放在启动文件夹中? 【参考方案1】:

在“解决方案资源管理器”中右键单击您的项目并选择“添加>新建项目>常规>清单”,然后您将在“app.manifest”的前几行中看到以下代码:

<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
             If you want to change the Windows User Account Control level replace the 
             requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            Specifying requestedExecutionLevel element will disable file and registry virtualization. 
            Remove this element if your application requires this virtualization for backwards
            compatibility.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

在这一行:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

level="asInvoker" 更改为level="requireAdministrator"

【讨论】:

以上是关于C# 程序(Winform 和 WPF)在启动文件夹中创建快捷方式时被视为病毒?的主要内容,如果未能解决你的问题,请参考以下文章

求教:C#中winform 并未使用任何图片,但报错”GDI+ 中发生一般性错误“

编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型

c# winform 打包问题

C# winform 缩小到托盘 无法关机?

急!!visualstadio 2010 wpf,用C#开发一个小程序,背景音乐问题

c# winform httpWebResponse post出错