23

Я читал предупреждение Ubuntu Forum о вредоносных командах и нашел этот интересный камень:

:(){ :|:& };:

ПРЕДУПРЕЖДЕНИЕ. Приведенный выше код приведет к сбою в работе вашего компьютера, если только вы не установили строгие ограничения процедур (что, вероятно, нет), что приведет к принудительному перезапуску.

Считайте этот код похожим на запуск sudo rm -rf / .

Но что это значит? Даже с моим опытом программирования я никогда не видел загадочную команду, которая не является языком ассемблера.

3 ответа3

40

Это, как вы сказали, вилочная бомба. Что он делает, так это определяет функцию, а затем вызывает ее. Функция называется :

Давайте назовем это forkbomb чтобы лучше видеть, что происходит:

forkbomb(){ forkbomb|forkbomb& };forkbomb

Как вы можете видеть и, вероятно, догадываетесь из своего опыта программирования, первая часть - это определение функции (forkbomb(){ ... }), а самая последняя : это место, где вызывается функция (the ; просто разделяет операторы в Bash). ).

Теперь, что делает эта функция? Если вы знакомы с Bash, вы будете знать, что | символ передает стандартный вывод одной команды / программы на стандартный ввод другой. Таким образом, в основном :|: запускает два экземпляра функции (именно здесь она "разветвляется").

И затем магия: & ставит эти команды в фоновом режиме, позволяя возвратить исходную функцию, в то время как каждый экземпляр разветвляется, пока коровы возвращаются домой в фоновом режиме, тем самым израсходовав все свои ресурсы и разрушив систему (если она не имеет ограничения наложены на него).

9

Взято из статьи Википедии Forkbomb:

:()      # define ':' -- whenever we say ':', do this:
{        # beginning of what to do when we say ':'
    :    # load another copy of the ':' function into memory...
    |    # ...and pipe its output to...
    :    # ...another copy of ':' function, which has to be loaded into memory
         # (therefore, ':|:' simply gets two copies of ':' loaded whenever ':' is called)
    &    # disown the functions -- if the first ':' is killed,
         #     all of the functions that it has started should NOT be auto-killed
}        # end of what to do when we say ':'
;        # Having defined ':', we should now...
:        # ...call ':', initiating a chain-reaction: each ':' will start two more.
7

Сломано:

: () // Define ':' as a function. When you type ':' do the following
{
    : // Call ':' 
    | // Redirect output
    : // Into ':'
    & // Push process to the background
}; // End of ':' def
: // Now do ':'

Поменяй : на bomb и у тебя есть:

bomb(){ bomb|bomb& };bomb

Это действительно довольно элегантно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .