如何让我们的软件跳过360和金山毒霸的“随意拦截”?

目录

1、案例说明

2、使用Process Monitor定位启动报0xC0000022错误时哪个文件被360拦截了

3、从根本上解决360等安全软件随意拦截我们软件的问题

4、最后


       在我们的软件安装到客户装有360或金山毒霸的电脑上后,时常会出现被360或金山毒霸拦截的情况,甚至导致软件无法启动,无法正常使用。你们的软件是否也存在同样的问题和困扰呢?

       有人可能会说,解决这个问题还不简单,直接将360这些安全软件都卸载了不就行了嘛,搞这么麻烦做什么?我们的软件是发布给客户使用的商用产品,是不能强制让用户去卸载360等安全软件的,这会严重影响用户体验,所以还是要从产品研发的源头来解决问题。

       下面以360拦截为例,带着大家一起看看如何知道我们的软件是被360拦截的,怎么做才能让它们不再随意拦截我们的软件。 

1、案例说明

       在软件启动或者运行的过程中,时常在桌面右下角会弹出如下的360拦截提示框:

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第1张图片

 提示某某文件可能是病毒文件,如果用户不点击信任此文件,则360会自动将该被拦截的库给隔离住,用户将无法再使用该文件。如果点击信任此文件,则360不会拦截。但有时可能是在我们离开电脑的那段时间弹出来,这个弹框会定时显示几十秒,如果用户没有点击,超时了就会自动隔离文件,这样就会“神不知鬼不觉”地把我们软件用到的库给隔离了

       一旦软件依赖的库被拦截隔离,再启动软件就会报错了,比如如下的报错:

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第2张图片

 对于有经验的人来说,大概能猜到可能是要启动的软件依赖的文件被360拦截了,然后打开360安全卫士的主页面:

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第3张图片

找到恢复区图标按钮,点击进入对应的窗口:

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第4张图片

再打开的窗口中点击可恢复区,将拦截的库添加到信任列表恢复一下就可以正常运行软件了。但有时我们再360上述页面中解除了360对某个文件的拦截,软件再次启动,可能还会报同样的错误,这时我们需要重启一下电脑,重启电脑后就好了。这是360的一个bug,即使你设置解除对被拦截文件的隔离,但360依旧将文件锁住了,只能等到电脑重启后才会真正的解除锁定。

2、使用Process Monitor定位启动报0xC0000022错误时哪个文件被360拦截了

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第5张图片

       我们启动软件时报这样的错误,我们有没有技术手段去查出到底时什么操作引发了这种错误呢?答案时肯定的,我们前面讲过Process Monitor工具,该工具可以监控目标进程的文件活动,下面就来讲讲怎么通过该工具去定位问题是怎么触发的。

       首先我们来看看0xC000022错误码是什么含义。到网上以“0xc0000022 msdn”为关键字,进行搜索,在微软官方msdn的页面中找到对该错误码的说明:
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/ab2b6ac6-161e-4826-885a-45b4d4834f18?redirectedfrom=MSDN

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第6张图片

即0xC000022错误码对应的标记STATUS_ACCESS_DENIED,意思为无效的打开模式。

       从这字面意思上看,我们可能不太清除是啥意思,我们将STATUS_ACCESS_DENIED拷贝到VS中,然后go到所在的头文件中,在头文件中看到了0xC0000022的详细含义:

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第7张图片

 从注释中可以知道,其含义是:当一个进程访问一个对象,没有访问该对象的权限,被拒绝了。

        接下来,我们就用Process Monitor来定位启动软件时访问哪个文件被拒绝了。启动Process Monitor,在工具栏中找到漏斗一样的图标,这是用来设置监测过滤条件的,我们将我们的软件对应的xxxxx.exe设置为进程过滤对象(设置Process name项为xxxxx.exe):

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第8张图片

然后在Process Monitor的工具栏取消对注册表等项的监控,只保留对文件活动的监控。然后双击启动xxxxxx.exe程序,Process Monitor中立即监测到pcmtwnd.exe进程所有的文件活动记录。以Denied关键字在已检测到的文件活动中搜索:

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第9张图片

 然后就能搜索到对应的那条记录,右键点击该行,在弹出的右键菜单中点击属性,就可以看到是访问哪个文件被Access Denied了:

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第10张图片

 知道哪个文件,我们就可以到360等软件中取消对该文件的拦截了。

        以上是我们技术人员进行的专业的排查,但对于小白用户来说,他们是无法做到的。启动软件时弹出启动报错的提示,他们不知道这可能是360拦截文件导致的,再就是360提示被拦截的文件可能是病毒文件,他们默认可能会选择让360拦截的。那我们有没有办法从根本上解决被360拦截呢?即让360不再拦截我们的软件?答案同样也是肯定的,我们是有办法的。

3、从根本上解决360等安全软件随意拦截我们软件的问题

       解决办法是,在每次发布软件版本之前,将要发布的软件安装包上传到360软件认证平台上:

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第11张图片

 然后进入开放平台的审核流程:

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第12张图片

 360软件认证平台会检查软件包中的文件是否存在存在病毒,如果经过检测后没有问题,会将程序中的文件信息记录到360的云管家数据库中,后面就不会再拦截当前上传版本的软件了。

       金山毒霸也有类似的开放平台(金山软件认证平台):

如何让我们的软件跳过360和金山毒霸的“随意拦截”?_第13张图片

可以在发布之前,将软件的安装包提交到该平台上审核,以解决金山毒霸对我们的拦截。

4、最后

      我们的软件在每次发布版本之前,都会先提交到360和金山毒霸的开放平台上审核,已解决上述两个软件随意拦截我们的问题。希望能对大家有所帮助,有任何问题都可以在评论区和我讨论。

你可能感兴趣的:(360,金山毒霸,随意拦截)