熊猫烧香技术含量高吗?高在哪里?
如果你一定要让他赢一次的话,是的,熊猫烧香技术含量很高。高在哪里?
高在他蠢,惊天动地的蠢。
打个比方的话,题主班主任有洁癖,因此每天都要检查全班同学——洗脸了没?衣服脏不脏?耳朵后面有没有油垢?桌子擦干净了吗?
但是呢,看着窗明几净一尘不染的教师,你们几个坏渣满心不自在;想捣乱呢,却又怕老师……
于是你们就拉拉扯扯、偷偷摸摸,净干些彼此抹鼻涕啦、吐唾沫啦之类蠢事。
终于有一天,你的同桌李俊向你们宣布,他要办一件震惊你们的大事。
在你们的翘首期盼下,你看到……他偷偷把鼻涕抹到了你们班主任的椅子上。
然而班主任并没有发现。
于是,被轻视了的李俊同学大怒。他啪的一声把满裤裆都是屎的裤子甩到你脸上;然后跳上课桌,光着屁股跳了一段“抹屎舞”,把大便抹的黑板、讲桌、到处都是。
你一边舔着他甩你脸上那条裤子裤裆里那点黄色粘稠物,一边目瞪口呆:哇!太酷了!太有技术性了!这都怎么做到的!
后来他因此出了名,你就更难以理解了:哇!这是神吧?
——才不会是“蠢的惊天动地”,一定有别的原因!
熊猫烧香是一模一样的案例。
当然,为了让你理解,我还是不得不从头说起。
简单说,病毒和杀毒技术是相互促进、纠缠发展的。
最初的病毒是一种相互开玩笑的蠕虫类病毒。它可用简单到类似这样:
$0 &
$0 &
其中$0提取自己的文件名(含路径),放到脚本里就能执行它;然后加个&意思是把它放到后台执行。
于是,别人可以给它起个名字,比如“小H文.sh”——只要你启动了它,它就会在你的系统里指数倍增,把你的电脑卡死。
当然,这个“病毒”还不能感染;于是你加了两行代码:
for filename in find(*.sh):
cat $0 >> $filename
现在它就能搜索出所有的脚本文件、把病毒内容附加到它的末尾了。
——当然,我这个示例代码没法运行,我也不会告诉你它要怎么才能运行。
——如果你有能耐让它运行了,那么运行后的效果是,它会吃尽你的CPU、让你磁盘上所有的.sh文件大小疯狂增加。
——然后,你的整个系统就完蛋了。甚至可以说,不重装就无法恢复正常——所以在虚拟机里玩,千万别在自己物理/生产系统里玩。
当然,如果你想要让它像熊猫烧香一样能删除所有.gho文件:
for filename in find(*.gho):
rm $filename
就这么简单。
——这是脚本;但只要你懂,改写成exe是一模一样的思路,没有任何技术难度。
病毒耿直,“杀毒软件”自然也耿直:读取所有可执行文件,查看里面有没有对应的、干坏事的“特征字符串”就行了。
杀毒软件再耿直,但只要有人管,病毒就没法躺平了。
怎么办呢?
不要再照原来的方式写了!得绕个弯子:
myname = $0
$myname
哈哈,你现在抓不到直接执行$0的耿直boy了,嘿嘿哈哈!
杀毒软件:哦?好吧……但迄今为止,微软一共就发布了x个版本的DOS;其中当前流行版本的DOS系统的http://command.com的大小是xxxx字节——好,你感染它?你把特征字符串藏起来?但是,你寄生的http://command.com文件的长度变长了!
那段时间,耿直的病毒们就被起了一系列极具侮辱性的名字,比如8888、1357等等,就是以它感染exe/com文件后、文件增加的字节数命名的。
病毒作者:啊?那我先执行个压缩……
于是,病毒先把可执行文件压缩一下、附加到自己之后。如此一来,运行受感染程序时就会先执行病毒,病毒执行完了才把可执行文件内容解压缩、再执行真正的程序逻辑……
如此一来,有时候某些可执行文件被某种病毒感染后,文件总大小甚至会变小!
不仅如此,这样玩起来多好玩啊。于是病毒作者们越玩越高兴……
1、文件在磁盘上的空间是按512字节(一个扇区)为单位分配的,但可执行文件的大小却并不是512字节的整数倍,于是后部就总是有一些多余的、再也不会被人使用空间——有的病毒就把自己写在这个空间里、然后把程序文件最开始的几条指令拷贝出来、放在自己捡垃圾捡来的空间里,再用“跳转到病毒执行病毒指令”的几条跳转指令替换程序文件最开始的几条指令……
于是,被这种病毒感染之后,可执行文件大小不会变化。
2、杀毒软件仍然会寻找病毒里面的、在其他文件见不到的特征数据,比如极具特色的传染代码、搞破坏的代码……
于是就有病毒作者把病毒内容加密,key可以是某个随机数;执行时才解密——这叫变形病毒。
注意杀毒软件是没法在运行时一条指令一条指令跟踪应用程序都做了什么的,性能损耗太严重了;它只能读取、分析磁盘上的exe/com文件,这叫静态分析。
静态分析显然没法对付变形病毒……等等,它总的解密吧?解密那段代码总不能也加密吧?就抓它这个!
3、没法静态分析,那我就附加个调试器调试(debug)它!
于是病毒作者开始和反病毒软件作者斗智斗勇:你要debug,你就得用CPU的int3中断;我把这个中断给你改了你怎么办?
改回来?
那我再改回去!
还改?
有个病毒,每三个字节加密一次,下次解密的密钥是上次解密的结果——嘿嘿,你下断点?下断点就是修改exe文件中、断点位置的指令,把它改成int3:但它现在是密钥,你下了断点就没法解出有用的指令了,哈哈哈哈!
哦对了,int3被我改了,它现在不是调试中断服务,而是解密服务!
你下断点?现在是从数据到密钥再到程序,全部被破坏!
群魔乱舞。
那么,杀毒软件该怎么办?
凉拌。
哈哈,真就俩字,凉拌。
因为DOS下面没有任何权限概念;一旦群魔乱舞起来,那真是一点办法没有。不凉拌还能咋地?
但是Windows 95/97/98出现了。
这个OS虽然仍然没有像样的权限控制,但它毕竟启用了保护模式,从而把OS内核置于CPU保护之下、和应用程序的执行空间彻底隔离。
这个改变釜底抽薪的毁坏了病毒们的武器库,使得它们只能在用户进程空间、在虚拟内存搭建的“信息茧房”里徒劳的挣扎。
期间也有突围成功的,最著名的就是cih——它成功的“离开”了虚拟空间、触摸到了真实的硬件,并刷写了固件(它本意似乎是想在固件里寄生的,但由于技艺不精,寄生失败,只破坏了固件、使得主板无法启动,除非重新烧写固件)。
除此之外,病毒军团可谓“全军覆没”“乏善可陈”——哦,当然,值得注意的方向还是有的。
那就是,既然路子都被Windows堵死了、只能在用户空间玩了,那么自然就不会再有什么脑洞大开的病毒设计思路了……但,这也意味着病毒技术可以“标准化”了。
于是,199x年,有人把病毒感染、寄生、变形、破坏这一套整理、整合,又写了个图形化的界面,允许任何人用鼠标“点点戳戳”,就能“个性化”定制一个新病毒出来。
至今我都记得当时的报道——病毒已经“家族化”“定制化”!
然后,Windows xp上市了。
xp使用了为服务器设计的NT内核,这个内核从一开始就有极佳的安全性和完善的权限机制。这就进一步压缩了病毒的存在空间。
不过,为了兼容过去的文件系统、也为了不改变过去的用户习惯,它默认仍然使用没有权限控制的fat32文件系统。这就为病毒提供了存在空间。
总之,这段时间的病毒技术乏善可陈;原有的病毒玩家们要么改邪归正,要么转入地下、编写木马或者流氓软件赚钱。
比如,现在的程序发行前往往要“压缩”、“混淆”,前者可以降低程序体积,后者可以避免被人逆向——这些又可以称为“加壳”。
而无论是“压缩”“混淆”还是“加壳”技术,说白了就是病毒感染使用的技术:它把原始程序压缩、加密甚至直接替换内置的符号、修改容易“反编译”的代码,把它替换成功能相同但晦涩难懂的实现——比如,cmp然后jnz可以直接和高级语言的if语句对应,那就把cmp提前到“相关变量最后一次修改后”,而把jnz放到下一次修改变量之前……如此一番改造,程序就难以分析、难以读懂了。
这就是“病毒技术从良”的案例。
怎么证明呢?
我记得十多年前吧,在某黑客论坛见过一位网友做过实验:他不用任何代码混淆工具,仅仅是普通的加壳工具给著名木马“灰鸽子”加壳——前面说过,加壳实际上就是病毒感染使用的技术;而灰鸽子的特征码早就在各大杀毒软件里面挂名多时了。
所以,加壳后实验的结果是,各种杀毒软件都能识破并阻止它运行。
不过,别急。他用加壳软件为之前加过壳的灰鸽子继续加壳,然后再继续,继续……如此反复套了十几层壳——于是,所有杀毒软件就都无法识别它了(黑话叫“过”某款杀毒软件);甚至还有一款杀毒软件在脱壳检测时崩溃退出……
至于木马、流氓软件嘛……咳咳。
前面提到过,Windows出现后,病毒技术就停滞不前、乏善可陈了;而乏善可陈的另一面,就是相关功能早就被研究透了——于是网上泛滥着各种“例程”,感染、变形、隐藏、传播、破坏……乃至完全集成了以上“开发步骤”的、傻瓜化的病毒生成器……
不用病毒生成器也可以。只要你想抄,就好像现在问chatgpt一样,你只要打开google,敲“病毒感染”“示例代码”,那么你马上就能得到一大堆。
类似的,发现了Windows系统的什么新漏洞,接下来也会立即出现相应的、可以直接运行的“攻击示例”;只要你粗通编程,你就可以拿来用——哪怕你不知道原理,但拷贝下来、丢IDE里面点运行,这总会吧?
不过,也正因为病毒技术“乏善可陈”,杀毒软件们在干嘛呢?基本就是在集体摆烂——我都不知道杀毒软件除了拖慢我的系统、干扰我玩游戏之外,还能有什么用。
自2000年起、直到2010年前后,这十年里我没用过任何杀毒软件——因为我知道病毒在Windows系统里面藏身、启动的一切必经路径;我熟知系统中运行的一切应用、知道注册表里面哪些键值可以被病毒利用……
我自己就有能力手工杀病毒,再加上可以自己写脚本记录系统所有应用位置、大小、md5——然后利用这个“快照”,就可以轻易确保系统干净、安全。
熊猫烧香就是这时候出现的;但自始至终我都没关注过——俺的系统坚如磐石,理它作甚。
根据各路大神的分析,李俊这个熊猫烧香明显是从现成的例程拼凑来的。拿行内人的黑话说,这就是典型的“脚本小子”。
DBinary:计算机病毒感染PE文件的几种常见套路他使用的技术全都是黑客论坛上泛滥的大路货,没有任何创新;比如 @DBinary 大神提到的“修改应用资源节”——这个其实在黑客论坛的例程里面会提一句,但发布者往往懒得写出来——如果他真的醉心于技术,如果他真的能看懂例程,那么他当然就会自己补充一段代码、弥补这个缺憾。
藏起图标,不要太张扬;仅仅感染、潜伏、监控,不要搞破坏……这是当时乃至如今写病毒/木马牟利者的共同选择。
但你知道李俊干了什么吗?
他把这个病毒放在自己的个人网站上,公开叫卖!
哈哈,没错。一边连隐藏图标都不会、使得任何人想忽视都没法忽视他;一边大肆破坏,一边在据说是熊猫烧香的源代码(但删除了破坏和感染部分代码)里面还写了一些逻辑来“减缓破坏速度”以免“用户发觉不正常”——与之同时,他居然还敢在网上公开出售这个病毒!
太抽象了,对吧?
——他如果想要把病毒隐藏起来、不把自己送进大牢,是不是就一定要保留应用程序的原始图标、不要被人轻易发现?
——如果他有能耐把应用程序的原始图标保留下来、仅仅是故意张扬,那又何必挖空心思的写代码隐藏自己?
这对大牢的无限向往的拳拳之心真是日月可鉴啊!
——题主,你觉得这位和你最崇拜的那位“一边抹你一嘴屎、一边光着屁股在讲桌上一边扭一边发粪涂墙”的同桌,是不是简直就是同一个人啊?
那么,为什么当年的熊猫烧香所向披靡、连杀毒软件都被它干了一圈呢?
很简单,我前面已经说了很多很多次了:杀毒软件厂商们在摆烂!
DOS中后期,摆烂的原因是病毒出现的太快太多、而且花样翻新……这就搞的杀毒软件目不暇接、无所适从。
同时,当时的杀毒软件靠软盘发行,新版本就是写出来了……你又怎么把它送到用户手里?
怎么办?
被动运行——用户中毒了,急了,把中毒的文件提交给杀毒公司;杀毒公司分析病毒,更新特征库(没法提取特征就写个专杀工具)……
反正谁中毒谁急,对吧?
那时互联网刚刚起步,病毒传播全靠软盘。所以这样搞完全没问题——不然能怎么办?
然后,Windows时代,互联网渐渐普及……此时病毒传播/扩散更快更容易了;但Windows又直接封住了病毒技术的上限,弄的技术精湛的人不玩了,只剩黑产从业者——这些人都静悄悄的,偷偷用户账号密码什么的就满足了……
于是,中病毒的小白压根不知道自己中毒了,只知道自己的游戏账号QQ账号动不动就没了……
而杀毒软件厂商呢?
中高级用户,他们不需要杀毒软件都不会中毒;低级用户,中毒了他们也不知道中毒了……
于是:
1、用户要么会用Windows,压根不中毒
2、要么是小白,中毒了也不知道
3、病毒作者悄悄的进村,偷了密码就走,绝对不惊扰用户——甚至还有“贴心”的帮用户关闭自动更新、免得打扰用户的“好心木马”!
4、另一些干脆大张旗鼓做起了“流氓软件”——实质上就是木马。但谁愿意出头得罪人?
5、流氓软件的肆虐,也把杀毒软件厂商弄的极难办:识别为病毒吧,人家告你损害人家名誉;不识别吧,使用类似手段的病毒就漏过去了……
你看,高手,小白,病毒/木马作者,流氓软件,杀毒厂商……是不是还是统统闭嘴、大家你好我好他也好的好?
反正,害怕病毒但又不懂技术的还是会掏钱,俺这样自己能杀毒的怎么都不会掏钱;病毒木马流氓软件们也自觉不吱声——大家统统闷声发大财,多好多和谐!
——结果,有个傻冒冒了个泡,把这层粉红色的窗户纸给捅破了……
不过,即便如此,杀毒软件公司也没打算起来。它们继续躺平了很多很多年……
这是因为,之后Windows 7发布了。Windows 7的安全性是真的拉满了:默认的NTFS支持,UAC,默认就比较安全的策略……
当时甚至有个江湖传言,说其实Windows 7已经完全不需要杀毒软件、最初也没有给杀毒软件留干涉接口,一切软件都在低权限级运行……于是杀毒软件厂商不干了,给微软很大压力。于是微软不得不给他们留出一个开口,而这个开口反而给了病毒机会……
总之,到了Windows 7时代,病毒是彻彻底底玩不起来了……
等等,我似乎还没给你解释“为什么Windows系统绝了病毒的门路”……
简单说,当年DOS时代(以及Windows 3.1/3.2时代),OS和普通应用完全无隔离,OS能做的,任何一款应用都可以做——当时的CPU有保护模式,但DOS压根不用!
打个比方的话,DOS时代警察没执照,任何人戴个袖章都可以自称警察——甚至把警局烧了自己原地建立个斧头帮总部、然后煞有介事的出来维持秩序都是完全合法的!
这能不乱吗?
而到了Windows 95时代,微软终于把intel cpu的保护模式利用起来了:
此时,操作系统在ring 0工作;用户应用被统统放进了ring3……
有什么区别呢?
ring0是可以直接访问内存和硬件的;而ring3……你访问内存,CPU不给你执行,而是通过ring0设置的“页表”给你映射到一个“虚拟内存地址”去;你访问硬件,CPU还是不给你执行,而是转发给操作系统,让操作系统斟酌后再决定给不给你提供的服务,而且这个服务也是映射过的“假设备”……
最终,你在ring3时,看起来任何地方你都能访问……但任何地方都是假的,是操作系统给你“虚拟”出来的环境;哪块内存/哪个硬件操作系统不想让你碰,那么只要它不给你映射过去,你就永远不能碰!
更“可怕”的是,操作系统还可以给你制造一个假象,让你觉得你的所有访问请求都被满足了;然而事实上,自始至终你都在“幻觉”里打转转。
你看,如果你无法打破这层幻觉,是不是就再也无法像dos那样胡搞了?
甚至,哪怕你拿到了管理员权限……对不起,你仍然在“幻觉”里!
因此,哪怕Windows 95那样漏洞百出、文件系统甚至都没有权限信息的垃圾水平的安全性,照样掐死了所有在DOS下争奇斗艳、不可一世的病毒!
现在,病毒们必须乖乖的接受管理,仅仅能通过Windows为它留的几个接口(注册表里几个run/runservice/runonce主键、启动任务、计划任务以及dll劫持)执行自身……
当然,也是有几个病毒是可以突破“幻觉”、脱离控制的访问到物理硬件的。比如可以烧写bios的cih……
但,它们从哪突破了,微软就会加强哪里,使得未来的病毒无法再从同样的漏洞“越狱”。
而到了Windows7,以上机制被进一步加强了;同时,它终于默认启用NTFS文件系统,这进一步加强了权限控制。于是整个系统铁桶一般,哪有病毒跳脸的机会。
把病毒死死控在用户空间之后,要收拾它就太容易了。
尤其是,我之前提过,xp时代,我可以自己写脚本、记录系统“快照”;而Windows7时代,微软自带签名——所有系统组件,所有驱动,全都自带签名;你改动哪怕一个二进制位,签名就立即失效。这就更进一步的绝了病毒混淆视线的可能。
这就相当于在系统中集成了一个懂手工杀毒的高手,时刻确保操作系统本身的自我洁净!
而这一套在win10/win11阶段,甚至直接推广给了所有正规应用软件——没错,现在Windows程序,哪怕是游戏,都自带签名。
你看,既然病毒这么容易就能收拾掉,杀毒厂商还不躺平,岂不是砸自己饭碗吗?
这层面纱什么时候被戳破了?
——嗯,这个得分人。比如题主你以及绝大多数的人,恐怕至今都没明白过来。
——而对我来说,这个奇葩状态是被08年前后的冲击波病毒给揭破的。
冲击波病毒的原理很简单,两句话就能说清:
1、当时的网站都是http的;http通信是明文、不防篡改的——当时电信公司自己都经常篡改用户的http访问、给他们推送广告!
2、局域网内部通过ARP协议绑定MAC地址和IPv4地址,但这个绑定是无授权无验证的,任何人都可以随意宣布自己持有某个ip地址……这叫ARP欺骗。
这两者就构成了一个极其严重的漏洞:
1、你可以通过ARP欺骗把局域网里面的所有数据都“骗”到你的机器上,然后再转发给受害者
2、你可以识别受害者的http访问请求,在里面通过iframe标签给它插一个病毒……
所以冲击波病毒被归类为arp-iframe病毒。
借助这招,当你和别人共用局域网上网时,你每打开一个网页、访问一个链接、刷新一个页面……中了冲击波病毒的计算机就会给你推一个病毒。
其实冲击波病毒早在2003年7月21日就出现了;但是,你懂的,杀毒软件厂商都躺平了嘛,哈哈。
于是,这个病毒在网吧里肆虐了好多年,压根没人在乎……
当时一大半的网吧机器上面都有病毒——这大概就是当时wow账号疯狂被盗的原因吧。
俺不是会手工杀毒嘛,当时替不少网吧机器干掉过很多这种病毒——偶尔去网吧上机,一看进程列表就知道它中病毒了;俺当然不客气了,杀!杀完再玩游戏!
所以哪怕明知道网吧电脑上有病毒,但经过俺的手工杀毒之后,哪怕在上面登录wow,俺的账号也从没丢过——没错!它上面装的所谓“杀毒软件”从未起效过。
但是,俺08年前后经济拮据,和人共用了网络,于是每天就被推来几十几百个冲击波病毒……的确能手工杀了,但实在不胜其烦啊。
刚好,当时所在公司内网也中了这个病毒——公司嘛,是有经费的,你懂的……
这么说吧,国内的杀毒软件,从小狮子到吹上天的某数字,我们试了个遍,统统无效!
没错,一款2003年的病毒,到了2008年,仍然纵横无敌!
哎呦喂,你们它宝贝的也躺的太平了吧?
——所以,你看,如果李俊稍微有点脑子,稍微懂点技术,能把那傻B图标的bug修复了、能别闹那么大动静……他那个病毒说不定到现在都还没人发现!
——就是真被发现了,杀毒软件厂商也照样会躺平,压根没人管他,啊哈哈哈~
后来怎么给治住的?
请的西医,哈哈哈。
公司请的卡巴斯基,很好用,装上去,病毒没了。
于是我回家,也装了个卡巴斯基,试用版——因为据说它“卡吧死机”,我怕它影响我玩游戏。当然得试试。
一试,整个系统干干净净,除了刚被浏览器推来的几个没启动的冲击波病毒,一点感染没有(当然,它照例把俺的盗版星际争霸注册机报为病毒;不理它,加入忽略列表就好了)。
试用结束,很满意。于是打算掏钱买一套 ……
但是,我这人有洁癖,不喜欢“试用版升级”,因为我担心它弄的不干净;于是我就先卸载试用版;打算卸掉了再重新下载个付费版,来个清洁安装……
结果一卸载,没想到俄国人办事那么短——它把隔离区几十个冲击波病毒都给我拷回Windows目录了!
更恶心的是,当时的Windows7对冲击波病毒其实是有抵抗力的——它能通过iframe推送到我机器上,但却无法自动运行;我发现被推送了病毒,直接删掉就干净了,对吧。
但卡巴斯基居然让病毒运行起来!把我任务管理器占的满满的!
没办法,吭哧吭哧手动干吧!
忙了一头汗,终于手工杀光了……
怒了。老子有钱也不给你赚。另外找去!
既然知道西医管用,俺自然就跑国外找了……找到了一个杀毒软件评测网站av-test,把它评测最优秀的两款下载回来,一款叫AVG一款叫Avira,一试,都能轻松对付arp-ifram病毒。
对了,前面不是说过,Windows把病毒彻底限制死了吗?
既然限制死了,那么无论病毒千变万化,但只要它想运行、感染、破坏,是不是就必须挤海关……哦不,挤操作系统提供的接口?
所以,杀毒软件完全可以写一个hook,监控任何程序的行为……
比如,想写系统目录了、打开系统可执行文件试图写入了、试图修改注册表autorun、run、runservice、runonce等键值了、打开其他exe试图写入了……这些是不是都是个异常?
当然,加壳程序这种合法程序也会这么干;但,加壳程序就那么几种,算出md5放白名单就好;再综合考虑各种异常行为、查看它试图调用的系统API,是不是大致就能判定这个应用不正常?
这就叫启发式杀毒。
windows出现后,国内流氓软件横行无忌、甚至逼的杀毒软件躺平——你敢不躺平,流氓软件就咬你;你就是给人家放白名单,人家一更新MD5变了,你知道人家更新了还是中毒了?
你的软件老吆喝人家是贼,这好说不好听啊——不利于团结的话不要讲,这点道理都不懂吗?
总之,基于种种原因,它们躺的可平了。躺的四仰八叉,极不雅观,哈哈。
但国外却不讲情面——你敢办事不地道,人家就敢直接杀你!
比如,就最近这几年,国内某软件就被iOS杀了,再也不准上架;而另一个软件也被google play市场杀了,只能以微信小程序的方式苟活……
耍流氓被抓到手腕了,该。
你看,老外倒行逆施,不光不允许流氓软件咬人,甚至还允许杀毒软件咬流氓软件……太不和谐了。
不过俺需要的就是一只靠谱的看门狗。它肯替我下口才值得养它,对不对?
咳咳,扯远了。
总之,事情就是这么回事——熊猫烧香没有任何技术;它别搞那个图标、别删别人的gho文件别搞其他破坏,在国内杀毒软件厂商躺的四仰八叉的现实状况下,恐怕到今天都还能逍遥法外——甚至做大了变成另一家合法的流氓软件厂商都说不定。
可惜,李俊这小子既不会做人,也不会做事……