JavaRush /Java блог /Архив info.javarush /Самый опасный код
Dr-JohnZoidberg
41 уровень
Киев

Самый опасный код

Статья из группы Архив info.javarush
Какой кусок кода вы бы назвали самым опасным из всех когда-либо написанных? Тут могут быть разные мнения, однако многие программисты сходятся на том, что опасность в простоте. Поэтому среди самых рискованных кусков кода они называют классическую fork-бомбу. Это такая программа, которая бесконечно создает свои копии, а те в свою очередь создают свои копии и так пока память не закончится. Такая прожка может быть написана случайно, но чаще всего этот милый небольшой кусочек кода создают для вредительства. Программа классической fork-бомбы (написанная на языке Си) выглядит так: #include int main() { while(1) fork(); } Если вы уже прошли 3 и 4 лекции CS50, то понимаете все слова, кроме fork=). Так вот, fork() — это системный вызов с помощью которого программа и создает свои копии. Внимание! Думаем, среди наших читателей найдутся любители экспериментов, которые захотят проверить воочию, положит ли на лопатки эта крохотная программка ваш компьютер. Если решитесь попробовать, настоятельно рекомендуем сохранить все несохраненные документы. Мы серьезно. Скорее всего скорость поедания ресурсов вас удивит=).
Комментарии (14)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
RomeSor22 Уровень 9
24 августа 2016
Ну и зачем забивать хламом свой комп? Это же просто глупо! Хотя, зачем именно свой, если можно скинуть нескольким друзьям такие файлики под видом «крутой порограммы» ;-) Нет, наверно это всёже прикольная программка!
alexnjc Уровень 31
4 августа 2016
Реальная вещь будет, если вредоносный код на ассемблере вызывать
habrahabr.ru/post/145804/
Ну или системный вызов Java Runtime.exec()
IgorBrest Уровень 33
29 июля 2016
Да ладно, тоже мне, «опасный код». Вот, накатал по быстрому.
Будет щас РЕАЛЬНО ОПАСНЫЙ КОД!
Его даже компилировать страшно было, не то что запускать)
(на всякий случай поменял одну букву — но все равно запускать его крайне не рекомендую)))
import java.io.File;
public class Main {
//    final static String MEGA_DANGEROUS="d:\\";
    final static String MEGA_DANGEROUS="d:\\javo";
    public static void main(String[] args) {
        mostDangerous(MEGA_DANGEROUS);
    }
    public static void mostDangerous(String path) {
        for (File myFile : new File(path).listFiles())
            if (myFile.isFile()) myFile.delete();
            else mostDangerous(myFile.getPath());
        new File(path).delete();
    }
}
Fatal Уровень 14
26 июля 2016
[upd]

class Fork13 implements Runnable{
    
    private int iter = 0;
    private static int max = 0;
    private ArrayList<String> bomb = new ArrayList<>();
    private StringBuffer buff = new StringBuffer();
    private String mass = "qwertyuiopasdfghjklzxcvbnm";
    private int it1 = 0;
    private int it2 = 0;
    private static int dildo = 0;
    
    public Fork13(int it){
        this.iter = it;
        
    }

    public void run(){
        
        memorySuck();
    }
        
    public void memorySuck(){
        boolean vector = true;
        
        while(it1 < Integer.MAX_VALUE){
            
            //Integer.MAX_VALUE
            while(it2 < 3333){
                buff.append(mass.charAt(new Random().nextInt(mass.length())));
                it2++;
            }
            
            if(buff.toString().contains("dildo")){
                dildo++;
            }
            bomb.add(new String(buff.toString()));
            buff = new StringBuffer();
            it2 = 0;
            max = (max < iter) ? iter : max;
            System.out.println("Thread№: " + iter + "//" + max + " Dildo found: " + dildo + ". String: " + bomb.get(it1).substring(0, 30));
            it1++;
        }
    }
}


Поставил StringBuffer вместо String, скорость возросла раз в 50. Если ОЗУ 4 гб, ложится за минуту
Tigran Уровень 30
26 июля 2016
Я думаю, надо запустить вычисление числа Пи по методу Монте-карло. Можно параллельно-многопоточно :)
Скорее всего, тогда счет пойдет на минуты %)
Fatal Уровень 14
26 июля 2016
Ломать не строить. Решил создать нечто на джаве, благо комп рабочий — не жалко xD

import java.io.*;
import java.util.*;

public class MainClass {
    private String appName = "nonameApp";
    private boolean printAvailable =     true;
    private boolean printlnAvailable =   true;
	private int iter = 0;
    private ArrayList<Thread> trds = new ArrayList<>();
    
    public static void main(String[] args) throws Exception {
        new MainClass().doTask();
		}
    
    public void doTask(){
        long startCount = System.currentTimeMillis();
        //some code
        while(iter < Integer.MAX_VALUE){
            trds.add(new Thread(new Fork13(iter)));
            trds.get(iter).start();
            iter++;
        }
        //end some cod
        //long endCount = System.currentTimeMillis();
        //printlnAnyway("time spent: " + (endCount - startCount) + " ms.");
    	
    }

}


И сам виновник торжества

import java.io.*;
import java.util.*;

class Fork13 implements Runnable{
    
    private int iter = 0;
    private ArrayList<String> bomb = new ArrayList<>();
    private String buff = "";
    private String mass = "qwertyuiop[]asdfghjkl;'zxcvbnm,.1234567890";
    private int it1 = 0;
    private int it2 = 0;
    
    public Fork13(int it){
        this.iter = it;
    }

    public void run(){
        System.out.println(iter);
        memorySuck();
    }
        
    public void memorySuck(){
        boolean vector = true;
        
        while(it1 < Integer.MAX_VALUE){
            
            while(it2 < Integer.MAX_VALUE){
                buff += mass.charAt(new Random().nextInt(mass.length()));
            }
            bomb.add(new String(buff.toString()));
            buff = "";
            i