近期频繁有用户联系我说杀软报毒的问题。我也抽时间研究了一下。
先说结论:不管,无视。爱咋咋地。我自己承诺不是病毒。
简单讲就是读取文件的很小的一部分内容,计算内容的hash,然后把这个值上传到杀软数据库中去查找,找到了说明是病毒(杀软数据库中只保存病毒的特征码)
为什么会误报?
因为文件内容是一大堆101010这种排列组合,不同的文件,很容易出现相同的一段101010。所以即使是不同的文件也有可能有一小段相同的101010,最终碰巧就计算出和病毒一样的hash,最终误报。因为病毒有非常多,日积月累下来导致杀软数据库非常庞大,也就是有太多太多的hash了,很容易发生碰撞误报
误报怎么解决?
传统的病毒都是通过加花指令(改变101010为10111011101110),或者加各种壳(改变整个文件的101010)。因为PDown是我自己写的,有源码,所以直接改改重新编译一下,就可以不误报了,,,都是暂时的,因为每个版本刚发布时,杀软都不报毒
简单讲就是杀软会监控所有运行的软件,它什么时候启动的,启动后创建了或访问什么文件,调用了什么api,等等。一直监视着,看这个软件的行为(是否正常合理,或者是否和一些病毒类似),如果类似,那就很可能是病毒。
为什么会误报?
比如说,杀软看到PDown,启动后先联网下载一个exe,然后保存到系统目录,然后运行这个exe。这段操作就是典型的下载者病毒的操作(也叫特洛伊木马),,,到现在并不是说PDown就是病毒了,而是说PDown的行为和病毒一样(联网,下载,运行 3要素)。
但是所有的软件升级都是这个操作。怪我咯?
另外,用户如果是通过PDown下载一个分享链接,恰好链接里面是 网游辅助.exe,下载完他又在PDown里点击打开文件按钮,导致PDown调用打开网游辅助.exe(打开exe文件就是运行exe),你看,又满足了(联网,下载,运行 3要素)
这还没到头,更进一步,假如xx网游辅助.exe本身是被杀软报毒的。好吗,石锤了,PDown联网下载运行了一个病毒.exe,杀软百分百肯定PDown是病毒了
综上所述,根据软件行为查毒,PDown非常容易被误杀的。
误报怎么解决?
百度网盘本身也是这样的操作,怎么不会误报呢?这就涉及到一个软件证书签名的问题,简单讲一年5千块,买个证书,然后用这个证书对PDown.exe进行签名。
签名后的exe文件就不会被报毒,因为杀软会读取到证书信息,然后自动加入白名单,不管你有什么行为(包括上面的文件特征码是否命中),哪怕你就是病毒,也不会报毒。因为你在白名单里。
当然了,证书和证书也是不一样的,,,要看你是从哪个公司(微软、赛门、等等等)买的证书,公司不一样,信誉、价格都不一样。不同的杀毒软件对各个公司的证书的信任程度最终还是跟价格成正比的,但也不完全一致。
我是没钱买证书的。所以没法解决
这个跟杀软的版本有关系,有的版本就不报毒。有的版本是因为软件行为,导致的误报,但是他一但误报,就会把文件的特征码保存到杀软数据库,之后其他人一更新杀软(都是自动更新的)也会很快都报毒的
我经过认真的研究后就放弃了。
第一:文件特征码查毒,跟这个关系不大,是先软件行为报毒,后有的特征码。
第二:软件行为查毒,这个绕不开。就举个例子:用户用PDown下载分享链接,链接里面有病毒文件。杀软监控中,只能看到PDown下载运行病毒文件,必然会把PDown报毒的。谁叫PDown没有签名&&行为这么符合标准呢
其实是可以联系微软上报说是误报,要求解封的。但是流程很长,另外我说是误报微软也不一定信,要派人去核实,总之是来回的折腾。
所以真的没办法。就算这个版本解决了,下个版本一更新,又是从头开始(文件内容变了,对杀软来说就是从新开始了,重新回到误报--申请解封的轮回里)。