民科闲扯:杀毒软件、停机问题以及集合论悖论

停机问题,简单说就是,你能不能写一个判定程序,判断其他程序会正常终止还是会陷入死循环而无法退出。

答案是不能,解法很简单,就是写一个程序,其中调用了前面的判定程序:如果判定程序说我会死循环,那我就退出;如果它说我不会死循环,那我就写一个类似 while(true); 的东西死在那。

由此想到杀毒软件,杀毒软件首先有一个功能就是判断其他程序是不是病毒,那我也可以写一个程序:如果杀毒软件说我是病毒,那我就正常退出;如果它说我不是病毒,那我就搞点破坏,做点病毒该做的事情。

这算不算是病毒防不胜防的一个理论依据呢?

又想到集合论悖论:一般的,集合的元素可以是任何东西:一个数字、一个字母、一本书、甚至一个集合,当集合里面的元素可以是集合的时候,那集合就可以分成两类:

1、集合本身是自己的元素
2、集合本身不是自己的元素

那么,把所有 2 中的集合放在一起,构成一个集合,也即:所有不是自身元素的集合构成的集合,它,是不是它自身的元素呢?

集合论的悖论来源于用自身讨论自身,这是不是和停机问题的不可解性的证明方法有点像呢……

《民科闲扯:杀毒软件、停机问题以及集合论悖论》有6个想法

  1. 病毒都是人去定义的,说白了就是一段程序,人觉得它的行为不是正常的那就可能是病毒,如果取走了用户的机密,有的是大公司干的,那就是用户数据采集,如果是无名的人干的,那就是木马。。。

  2. 挺有意思的讨论,
    前面病毒的例子有个特点就是,病毒和杀毒总是有先后,后出现的那个在现有信息下作判断。
    后面集合的悖论则没有这样的特点。
    朴素集合论的悖论,我想是源于根本没有集合的定义。这点倒是跟病毒的例子有点象—没听说过病毒可以公理化定义的。而且这一点上对待病毒没办法学公理化集合论,集合论公理化之后,只不过把那些会导致矛盾的东西扔掉,这些不叫集合了,然后得到的理论还有价值。要是把你说的那个调皮程序规定不叫病毒了,估计一般电脑不乐意

  3. 如果病毒能够像停机问题那样不可解决的话,就会产生任何杀毒软件都不能解决的病毒了。但实际上杀毒软件总是可以找到病毒,我觉得病毒和杀毒软件之间的交互更像是一个博弈过程,而且双方都不存在必胜策略。

  4. 说道病毒,恶意软件这些东西,最近看到一条新闻:CNNIC成为反恶意软件协调工作组政策与标准组组长单位。真是讽刺啊,去 Google.com 或者 baidu.com 搜一下 cnnic 看一下相关搜索都是什么
    B 公司cnnic中文上网     cnnic是什么     cnnic.adware     cnnic.adware.2105     cnnic.exe    cnnic 卸载     cnnic.adware.3038     cnnic.adware.2107     cnnic.adware.3465
    G公司
    cnnic卸载     删除cnnic     cnnic.adware     如何删除cnnic     cnnic即将吃掉3721   cnnic.adware.2113     cnnic病毒     清除cnnic     cnnic吃掉3721  
    在这个关键字上,貌似 G 公司相关搜索结果比 b 好一些。。。嗯

  5. 其实,如果杀毒软件认为你是病毒的话,你连正常退出的机会都没有……我要是杀毒软件,我就认为你是病毒,至少你有破坏的动机,嘿嘿。
     

  6. 这样说的话,俺觉得悖论有点像电铃,你说它在这边,它就会到那边,你说他在那边,他就会到那边。你说它属于这个集合,它就不属于,你说……
     

发表评论

电子邮件地址不会被公开。 必填项已用*标注