类似于90后表情的死机脚本

原贴:http://roclinux.cn/?p=1095


  • 22 Nov

    最近在网上看到了一段有关恶意脚本的文章,里面涉及到了一个非常奇怪的脚本命令,形如:

    :(){ :|:&};:

    一眼望去,匪夷所思,你绝对不相信这竟然是shell脚本命令,恩,我也不相信,可以如果你在root权限下执行一下你就知道它的厉害了,呵呵(你还真敢试?)

    不卖关子,这是一个可以产生无数进程的脚本程序,当大量进程占据了内存空间后,机器就会越来越慢,以至于寿终正寝,Down掉了。

    我一直没有高清其中原委,今天看到了一个帖子道出了其中的秘密,原贴如下:http://bbs.chinaunix.net/viewthread.php?tid=1317493

    原来:(){ :|:&};:可以写成结构化的脚本程序形式:

    :()
    {
        : | : &
    }
    :

    下面是原帖中网友对此脚本的详细解释,非常感谢:)


    (即除最后一行外)定义了一个 shell 函数,函数名是“:”,而这个函数体执行一个后台命令“: | :” ——即冒号命令(或函数,下文会解释)的输出通过管道再传给冒号命令做输入(够清楚了吧)
    最后一行执行“:”命令

    这个代码只有在 bash 中执行才会出现不断创建进程而耗尽系统资源的严重后果,在 ksh(Korn shell)、sh(Bourne shell)中并不会出现,在 ksh87 和传统 unix Bourne shell 中冒号不能做函数名,即便是在后来的 posix sh 和 pdksh(ksh93 手边没有,没试)中冒号可以做函数名,但还是不会出现那个效果。

    原因是 sh、ksh 中内置命令的优先级高于函数,所以执行“:”,总是执行内置命令“:”而不是刚才定义的那个恐怖函数。
    但是在 bash 中就不一样,bash 中函数的优先级高于内置命令,所以执行“:”结果会导致不断的递归,而其中有管道操作,这就需要创建两个子进程来实现,这样就会不断的创建进程而导致资源耗尽。

    需要注意的是,很多 linux 发行本的 sh 命令并不是真正的 Bourne shell,而是 bash 的一个符号链接或副本。如果不能确定请不要轻易尝试用 sh 执行这段代码,否则也可能会导致资源耗尽。

    over~

    我猜您对这些文章感兴趣:

    Posted by rocrocket @ 10:49 pm

    Tags: , , , , ,

    313人阅读过了这篇文章。

    如果您还满意我的文章,请您订阅我的博客。点击“我要订阅”即可。谢谢:)

    <<返回主页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值