Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Define Variables
- local argv = {...}
- local argc = #argv
- local vDefs = nil
- local fDef = nil
- local oldDefs = false
- local machineInf = false
- local viruscount = 0
- local critical = false
- --Define Functions
- function ord(char)
- return string.byte(char)
- end
- function ordA1(char)
- return string.byte(char)-string.byte("a")+1
- end
- function chr(num)
- return string.char(num)
- end
- function chrA1(num)
- return string.char(string.byte("a")+num-1)
- end
- function checkSum(str)
- local checkSum = 0
- for i=1, #str do
- local c = string.sub(str,i,i)
- checkSum = checkSum + ord(c)
- end
- return checkSum
- end
- function update()
- local url = http.get("https://pastebin.com/raw/wjYsbRPC")
- if url ~= nil then
- fs.delete(shell.getRunningProgram())
- writeFile(shell.getRunningProgram(),url.readAll())
- return true
- else
- return false
- end
- end
- function hash(str)
- local hash = ""
- for i=1, #str do
- local c = string.sub(str,i,i)
- hash = hash..chr(ord(c)+checkSum(c))
- end
- return hash
- end
- function removeStr(oldstr,remove)
- return string.gsub(oldstr,remove,"")
- end
- function getDefs()
- local virDefs = http.get("https://pastebin.com/raw/v3iDY3Qb")
- local defs = nil
- if virDefs == nil then
- defs = false
- else
- defs = textutils.unserialise(virDefs.readAll())
- virDefs.close()
- end
- return defs
- end
- function exists(fName)
- return fs.exists(fName)
- end
- function readFile(fName)
- if exists(fName) then
- local f = fs.open(fName,"r")
- local fRead = f.readAll()
- f.close()
- return fRead
- else
- return false
- end
- end
- function writeFile(fName,fData)
- local f = fs.open(fName,"w")
- if f == nil then
- return false
- else
- f.write(fData)
- f.close()
- end
- end
- function strFind(original,target)
- return string.find(original,target)
- end
- function setCritical()
- critical = true
- end
- function isCritical()
- return critical
- end
- function scanFile(fName,defs)
- local fData = readFile(fName)
- local isInf = false
- print("Scanning File: "..fName)
- if fData ~= false then
- for i=1,#defs do
- if strFind(fData,defs[i][1]) then
- if defs[i][2] == 1 then
- print("High Security risk file found: "..fName.." Attempting to remove file...")
- isInf = true
- writeFile(fName..".backup",removeStr(fData,defs[i][1]))
- writeFile(fName,"printError(\"This file has been overwritten due to compromisation of this file. If you need to restore this file, there is a backup saved to "..fName..".backup".."\")")
- setCritical()
- break
- end
- print("Virus Found in file "..fName.." Attempting to remove virus code...")
- writeFile(fName,removeStr(fData,defs[i][1]))
- isInf = true
- end
- end
- return 0,isInf
- else
- return 1
- end
- end
- function wipe()
- local files = fs.list("/")
- for i=1,#files do
- if files[i] ~= "rom" then
- fs.delete(files[i])
- end
- end
- end
- function scanDir(Directory,def)
- print("Scannng Directory: "..Directory)
- local sDir = shell.dir()
- sDir = shell.resolve( Directory )
- local tAll = fs.list( sDir )
- local tFiles = {}
- local tDirs = {}
- for n, sItem in pairs( tAll ) do
- if string.sub( sItem, 1, 1 ) ~= "." then
- local sPath = fs.combine( sDir, sItem )
- if fs.isDir( sPath ) then
- table.insert( tDirs, sItem )
- else
- table.insert( tFiles, sItem )
- end
- end
- end
- table.sort( tDirs )
- table.sort( tFiles )
- for i=1,table.getn(tFiles) do
- local code,x = scanFile(Directory.."/"..tFiles[i],def)
- if code == 1 then
- printError("Error scanning file: "..Directory.."/"..tFiles[i])
- else
- if x then
- machineInf = true
- viruscount = viruscount + 1
- end
- end
- end
- for i=1,table.getn(tDirs) do
- if tDirs[i] ~= "rom" then
- scanDir(Directory.."/"..tDirs[i],def)
- end
- end
- end
- function vFullScan()
- scanDir("/",vDefs)
- if machineInf then
- print("Alert! "..viruscount.." Virus(es) Found!")
- else
- print("Machine is Virus Free!")
- end
- if isCritical() then
- local msg = [[
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Alert!
- System Status Critical: One or more files infected with a destructive virus.
- System wipe may be necessary.
- Would you like to wipe the system?
- [Y]es
- [N]o
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Awaiting Input...
- ]]
- print(msg)
- while true do
- local event,key1 = os.pullEvent()
- if event == "key" then
- if key1 == keys.y then
- wipe()
- print("System Wiped, Have a good day.")
- break
- elseif key1 == keys.n then
- break
- end
- else
- print(msg)
- end
- end
- end
- end
- function fFullScan()
- scanDir("/",fDef)
- if machineInf then
- print("Alert! "..viruscount.." Virus(es) Found!")
- else
- print("Machine is Virus Free!")
- end
- if isCritical() then
- local msg = [[
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Alert!
- System Status Critical: One or more files infected with a destructive virus.
- System wipe may be necessary.
- Would you like to wipe the system?
- [Y]es
- [N]o
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Awaiting Input...
- ]]
- print(msg)
- while true do
- local event,key1 = os.pullEvent()
- if event == "key" then
- if key1 == keys.y then
- wipe()
- print("System Wiped, Have a good day.")
- break
- elseif key1 == keys.n then
- break
- end
- else
- print(msg)
- end
- end
- end
- end
- function setTermBg(color)
- term.setBackgroundColor(color)
- term.clear()
- end
- function cPos(x,y)
- term.setCursorPos(x,y)
- end
- function setLineBg(y,color)
- cPos(1,y)
- term.setBackgroundColor(color)
- term.clearLine()
- end
- function wColor(txt,color)
- term.setTextColor(color)
- write(txt)
- end
- function setTxtC(color)
- term.setTextColor(color)
- end
- function setTxtBC(color)
- term.setBackgroundColor(color)
- end
- function clearScreen()
- term.clear()
- term.setCursorPos(1,1)
- end
- function gui(v)
- local tx,ty = term.getSize()
- local btn_scan = "Scan"
- local btn_update = "Update"
- local btn_u_x,btn_u_y = tx-btn_update:len(),ty
- local btn_s_x,btn_s_y = 1,ty
- local txtbgcolor = nil
- local msg = [[
- J-Os Antivirus-0.1-Dev is a sophisticated antivirus that protects your system as well as removes active viruses.
- ]]
- if advanced then
- local bgcolor = colors.aqua
- txtbgcolor = colors.aqua
- setTermBg(bgcolor)
- cPos(1,1)
- setLineBg(1,colors.gray)
- cPos(1,1)
- wColor("[Close] J-Os Antivirus-0.1-DEV",colors.red)
- else
- local bgcolor = colors.gray
- txtbgcolor = colors.gray
- setTermBg(bgcolor)
- cPos(1,1)
- setLineBg(1,colors.gray)
- cPos(1,1)
- wColor("[Close] J-Os Antivirus-0.1-DEV",colors.white)
- end
- cPos(1,3)
- wColor(msg,colors.white)
- cPos(btn_s_x,btn_s_y)
- setTxtBC(txtbgcolor)
- wColor(btn_scan,colors.white)
- cPos(btn_u_x,btn_u_y)
- setTxtBC(txtbgcolor)
- wColor(btn_update,colors.white)
- local timer1 = nil
- while true do
- local event,but,cx,cy = os.pullEvent()
- if event == "mouse_click" then
- if cx >= btn_s_x and cx <= btn_s_x + btn_scan:len() and cy == btn_s_y then
- if v then
- clearScreen()
- vFullScan()
- setLineBg(1,colors.gray)
- cPos(1,1)
- wColor("[Close] J-Os Antivirus-0.1-DEV",colors.white)
- setLineBg(2,colors.gray)
- cPos(1,2)
- timer1 = os.startTimer(10)
- else
- clearScreen()
- fFullScan()
- setLineBg(1,colors.gray)
- cPos(1,1)
- wColor("[Close] J-Os Antivirus-0.1-DEV",colors.white)
- setLineBg(2,colors.gray)
- cPos(1,2)
- timer1 = os.startTimer(10)
- end
- elseif cx >= btn_u_x and cx <= btn_u_x + btn_update:len() and cy == btn_u_y then
- if update() then
- cPos(1,3)
- setLineBg(3,colors.gray)
- cPos(1,3)
- wColor("System updated, Restarting in 5 seconds",colors.white)
- os.sleep(5)
- setTxtBC(colors.black)
- setTxtC(colors.white)
- clearScreen()
- break
- else
- cPos(1,3)
- setLineBg(3,colors.gray)
- cPos(1,3)
- wColor("Error updating! (Is there wifi?)",colors.white)
- end
- elseif cx >= 1 and cx <= 7 and cy == 1 then
- setTxtBC(colors.black)
- setTxtC(colors.white)
- clearScreen()
- break
- end
- elseif event == "timer" and but == timer1 then
- gui(v)
- break
- end
- end
- end
- --Set Variables
- vDefs = getDefs()
- --Get the definitons
- if vDefs == false then
- printError("Error grabbing definitions! Reverting to old defs.")
- oldDefs = true
- if oldDefs then
- print("Grabbing Old Virus Definitions...")
- fDef = readFile(".fdef")
- fDef_hash = readFile(".fdef_hash")
- if fDef == false then
- printError("Error opening Virus Definitions file! (Is it up to date?)")
- else
- if fDef_hash == false then
- printError("Fatal Error! Cannot read hash! Aborting!")
- fDef = false
- else
- if fDef_hash == hash(fDef) then
- fDef = textutils.unserialise(fDef)
- else
- printError("Fatal Error! Hash is invalid! Aborting!")
- fDef = false
- end
- end
- end
- end
- if fDef ~= false then
- --Run antivirus with fDef as definitions
- gui(false)
- end
- else
- writeFile(".fdef",textutils.serialise(vDefs))
- writeFile(".fdef_hash",hash(textutils.serialise(vDefs)))
- --Run antivirus with vDef as definitions
- gui(true)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement