2011-11-30 62 views

回答

5

这段代码已被问及on the Debian forums

根据该线程的主持人Lacek的说法,代码最初做的是rm -rf /,尽管他们提到他们已经改变了那个版本,所以人们试图弄清楚它是如何工作的并不会删除整个文件系统。还有一些关于Perl代码的各个部分的解释。

(你发布此知道它的所作所为,或者是你不知道吗?)

引述它Lacek的帖子:

反正这里是脚本如何工作的。

它基本上是两个正则表达式替换和一个音译。 管道任何东西到其标准输入没有区别,perl 代码不会以任何方式使用其输入。如果你在表达 边界分割线长,你会得到这样的:

$??s:;s:s;;$?:: 
s;;=]=>%-{\\>%<-{;; 
y; -/:[email protected][-`{-};`-{/" -;; 
s;;$_;see 

第一行是什么也不做保存使得代码 看起来更困难的条件。如果前面的命令源自perl 代码没有成功,它会在标准输入(程序不使用,因此它有效地代替 没有任何输入)上执行一些替换。由于没有以前的命令存在,$?始终为0,所以 的第一行永远不会被执行。

第二行代替 标准输入(无)看似无意义的垃圾。

第三行是音译操作符。它定义了4个范围,在 中,字符被替换为音译替换中给出的一个范围和4个个字符。我宁愿不要 在这里写整个音译表,因为它有点长。 如果您真的感兴趣,只需在定义的 范围(空格为'/',':'至'@','['至'(反向)'和'{'至'}')中写入字符, 在替换范围('(backtick)'到 '{')旁边写入字符,最后从替换模式中写入剩余字符(/,“,空格和 - ) 。有这样的表,你可以看到 什么字符被替换到什么。

最后一行执行 代与导致串 (这是“的xterm”的任何结果的命令。这本来就是“系统“RM -rf /“',并保存在$ _中的 ),评估s作为一种表达的表达和执行。

(我在这里用实际反引号字符替代'反引号',这样代码自动格式化不会启动。)

+1

其实我发现有一个人要求尝试这个程序,但我无法理解代码,所以在这里问。 –