namelessos_version = "v0.2.7924a"
singleplayer = {"db":"12.1.177.243","pass":"juvenson"} // db = db ip | pass = db root pass
theme = "parrot"
globals.L = {"c":"<pos=50%>","bc":"<pos=35%>","s":"<s>"}
globals.C = {"g":"<color=green>","r":"<color=red>","G":"<color=#3f3e40>","o":"<color=orange>","p":"<color=purple>","rr":"<color=#FF2222>","lc":"<color=#e0ffff>","e":"</color>","w":"<color=white>","lb":"<color=#25B7DD53>","db":"<color=#209399FF>","c":"<color=#04CBCD>","y":"<color=#F8EB64>"}
globals.Themes = {"parrot":{"bd":C.r,"t":C.o,"p":C.y,"c":C.lc,"o":C.G,"root":C.rr,"user":C.g,"guest":C.p,"other":C.lb,"i":C.e,"s":C.g,"e":C.rr,"it":C.o,"pa":C.o,"ip":C.c}}
globals.t={}
t=Themes[theme]
// Startup
globals.disable_print = false
globals.Print = function(text)
if globals.disable_print != true then print(text)
return text
end function
clear_screen()
Print("\n"+t.o+"NamelessOS build "+namelessos_version+C.e+"\n")
Print("\n"+t.o+"NamelessOS Loading..."+C.e)
// Init
globals.login = null
globals.ar = null
if params.len == 1 or params.len == 2 then
globals.login = params[0]
end if
if params.len == 2 then
globals.ar = params[1]
end if
globals.config = {"db":singleplayer.db,"db_pass":singleplayer.pass,"info":true,"deleteLogs":true,"passwdChange":"x"}
globals.rshell = {"ip":singleplayer.db,"port":1337,"login":22,"active":false}
globals.proxys = [{"ip":singleplayer.db,"password":singleplayer.pass}]
globals.login = "username"+":"+md5("password")
rm_dupe = function(list)
tmp = []
for item in list
if typeof(tmp.indexOf(item)) != "number" then tmp.push(item)
end for
return tmp
end function
globals.proxys = rm_dupe(globals.proxys)
globals.usr = active_user
if active_user == "root" then globals.usr = "root"
if active_user == "guest" then globals.usr = "guest"
globals.husr = globals.usr
globals.lusr = globals.usr
globals.hs = get_shell()
globals.hc = globals.hs.host_computer
globals.hrouter = get_router()
globals.ls = get_shell()
globals.lc = globals.ls.host_computer
globals.lrouter = get_router()
globals.lip = globals.lc.public_ip
globals.llan = globals.lc.local_ip
globals.shell = get_shell()
globals.path = current_path
globals.comp = globals.shell.host_computer
globals.lan = globals.comp.local_ip
idxp = globals.comp.public_ip
globals.rout = get_router(idxp)
globals.H=[]
SearchFolder = function(folder, name = "", special = false, output)
if not folder then return "ERROR_FOLDER_IN_NULL"
if special then
for file in folder.get_files
if file.name.indexOf(name) != null then output.push(trim(file.path))
end for
else
for file in folder.get_files
if file.name == name then return output.push(trim(file.path))
end for
end if
for folder in folder.get_folders
SearchFolder(folder, name, special, output)
end for
end function
SearchFFolder = function(folder, name = "", special = false, output)
if not folder then return "ERROR_FOLDER_IN_NULL"
if special then
for file in folder.get_folders
if file.name.indexOf(name) != null then output.push(trim(file.path))
end for
else
for file in folder.get_folders
if file.name == name then output.push(trim(file.path))
end for
end if
for folder in folder.get_folders
SearchFolder(folder, name, special, output)
end for
end function
FindFile = function(name = "",pc=null)
if pc == null then pc = globals.shell
root_folder = null
if typeof(pc) == "shell" then root_folder = pc.host_computer.File("/")
if typeof(pc) == "computer" then root_folder = pc.File("/")
if typeof(pc) == "file" then root_folder = NavToRoot(pc)
if root_folder == null then return "ERROR_ROOT_FOLDER_NOT_OBTAINED"
output = []
special = false
if name.indexOf("*") != null then
special = true
name = name.remove("*")
end if
if special then
for file in root_folder.get_files
if file.name.indexOf(name) != null then output.push(trim(file.path))
end for
else
for file in root_folder.get_files
if file.name == name then return output.push(trim(file.path))
end for
end if
SearchFolder(root_folder, name, special, output)
return rm_dupe(output)
end function
FindFolder = function(name = "",pc)
if not pc then pc = globals.shell
if typeof(pc) == "shell" then pc = pc.host_computer
if typeof(pc) != "computer" then return "ERROR_COMPUTER_NOT_PROVIDED"
root_folder = pc.File("/")
if not root_folder then return "ERROR_ROOT_FOLDER_NOT_OBTAINED"
output = []
special = false
if name.indexOf("*") != null then
special = true
name = name.remove("*")
end if
if special then
for file in root_folder.get_folders
if file.name.indexOf(name) != null then output.push(trim(file.path))
end for
else
for file in root_folder.get_folders
if file.name == name then return output.push(trim(file.path))
end for
end if
SearchFFolder(root_folder, name, special, output)
return rm_dupe(output)
end function
ScanFolder = function(folder, depth, output)
for f in folder.get_files + folder.get_folders
output.push(" "*depth + f.name + " "+f.permissions)
ScanFolder(f, depth + 2, output)
end for
end function
ScanComputer = function(computer)
if typeof(computer) == "shell" then computer = computer.host_computer
if typeof(computer) != "computer" then return
output = []
root_folder = computer.File("/")
if not root_folder then return
output.push(root_folder.name + " " + root_folder.permissions)
ScanFolder(root_folder,2,output)
return output
end function
loginCheck = function(user,pass)
if globals.login then
sp = globals.login.split(":")
if sp.len == 2 then
user = sp[0]
pass = sp[1]
for login in globals.logins
if login.key == user then
if login.value == pass then
return true
end if
end if
end for
end if
end if
if pass then
for login in globals.logins
if login.key == user then
if login.value == pass then
globals.login = user+":"+pass
return true
end if
end if
end for
else
if user then
for login in globals.logins
if login.key == user then
return true
end if
end for
end if
end if
return false
end function
// Login
Print(t.o+"NamelessOS Loaded!\n\n"+C.e)
// Main
wlsys = function(shhell)
if globals.config.deleteLogs == true then
log = shhell.host_computer.File("/var/system.log")
if not log == null then
log.delete
end if
end if
log = hs.host_computer.File("/var/system.log")
if not log == null then
log.delete
end if
end function
securesys = function(shhell)
pwd = shhell.host_computer.File("/etc/passwd")
if not pwd == null and pwd.has_permission("r") and pwd.has_permission("w") then
con = pwd.get_content
lines = con.split("\n")
nc = ""
sep = ""
for line in lines
lsp = line.split(":")
if lsp.len >= 2 then
user = lsp[0]
hash = lsp[1]
nc=nc+sep+ user+":"+md5(hash)
sep = "\n"
end if
end for
pwd.set_content(nc)
end if
sshd = shhell.host_computer.File("/server/conf/sshd.conf")
if sshd and sshd.has_permission("w") then
t = "{""encryption_enabled"": true,\n""message_encrypted_conn"": true,\n""path_enc"": ""/server/encode.src"",\n""path_dec"": ""/server/decode.bin""\n}"
sshd.set_content(t)
end if
gues = shhell.host_computer.File("/home/guest")
if not gues == null then
gues.delete
end if
crypt = shhell.host_computer.File("/lib/crypto.so")
if not crypt == null then
crypt.move("/root","crypto.so")
end if
home = shhell.host_computer.File("/home")
if not home == null then
for user in home.get_folders
if user.name == "root" then
for file in user.get_files
file.move("/root",file.name)
end for
for folder in user.get_folders
for file in folder.get_files
file.move("/root/"+folder.name,file.name)
end for
end for
user.delete
else
for file in user.get_files
file.move("/root",file.name)
end for
for folder in user.get_folders
if folder.name == "Desktop" then
for file in folder.get_files
if file.name != "Terminal" then
file.move("/root/"+folder.name,file.name)
end if
end for
else
for file in folder.get_files
file.move("/root/"+folder.name,file.name)
end for
end if
end for
end if
end for
end if
wlsys(shhell)
shhell.host_computer.File("/").set_owner("root",1)
shhell.host_computer.File("/").set_group("root",1)
shhell.host_computer.File("/").chmod("o-wrx",1)
shhell.host_computer.File("/").chmod("u-wrx",1)
shhell.host_computer.File("/").chmod("g-wrx",1)
shhell.host_computer.File("/bin/sudo").chmod("g+x")
shhell.host_computer.File("/usr/bin/Terminal.exe").chmod("g+x")
end function
globals.db_shell = get_shell.connect_service(globals.config.db,22,"root",globals.config.db_pass)
clear_screen
log = hs.host_computer.File("/var/system.log")
if not log == null then
log.delete
end if
securesys(db_shell)
globals.db_pc = globals.db_shell.host_computer
globals.db_ip = globals.config.db
uparse = function(ur)
if ur == "root" then return t.root+"root"
if ur == "guest" then return t.guest+"guest"
if ur == "?" then return t.other+"secured"
return t.user+ur
end function
pparse = function(pat)
ret = pat
ret = ret.replace("/root","~")
ret = ret.replace("/home/"+globals.usr,"~")
return ret
end function
globals.ppath = pparse(path)
getUser = function(computer,isF)
su = "?"
if not isF then
if computer.File("/") then
for folder in computer.File("/").get_folders
if folder.path == "/home" then
for user in folder.get_folders
if user.has_permission("w") then
if su != "root" then
if user.group == "guest" then
if su != "guest" then
su = user.group
else
su = "guest"
end if
end if
end if
end if
end for
end if
if folder.path == "/boot" then
if folder.has_permission("w") then
su = folder.group
end if
end if
end for
dirs = findUnlockedDirs(computer.File("/"),[])
if dirs.len > 0 then
ddir = null
for dir in dirs
if dir.has_permission("w") then ddir = dir
if dir.has_permission("w") and dir.has_permission("x") then ddir = dir
if dir.has_permission("w") and dir.has_permission("r") then ddir = dir
if dir.has_permission("w") and dir.has_permission("r") and dir.has_permission("x") then ddir = dir
if dir.parent.name == "." then ddir = dir.parent
end for
mkd = globals.comp.create_folder(ddir.path, ".")
if mkd == 1 then
dir = globals.comp.File(ddir.path+"/.")
su = dir.owner
dir.delete
end if
end if
end if
else
if computer.path == "/" then
for folder in computer.get_folders
if folder.path == "/home" then
for user in folder.get_folders
if user.has_permission("w") then
if su != "root" then
if user.group == "guest" then
if su != "guest" then
su = user.group
else
su = "guest"
end if
end if
end if
end if
end for
end if
if folder.path == "/boot" then
if folder.has_permission("w") then
su = folder.group
end if
end if
end for
end if
end if
return su
end function
getLibFileName = function(metaLib)
return metaLib.lib_name+"_v"+metaLib.version+".txt"
end function
padSpaces = function(s, l, p = " ")
if typeof(s) == "number" then s = s+""
if s.len >= l then return s
padString = ""
c = l - s.len
while c > 0
padString = padString+p
c = c - 1
end while
return (s+padString)
end function
padSpacesRight = function(s, l, p = " ")
if typeof(s) == "number" then s = s+""
if s.len >= l then return s
padString = ""
c = l - s.len
while c > 0
padString = p+padString
c = c - 1
end while
return (padString+s)
end function
getRouter = function(IPAddress)
router = get_router(IPAddress)
if not router then
error("Could not find a router at the given address: "+IPAddress)
return null
end if
return router
end function
getColorString = function(fileObj)
if fileObj.has_permission("r") and fileObj.has_permission("w") then return("88FFFF")
if fileObj.has_permission("r") then return("8888FF")
if fileObj.has_permission("w") then return("88FF88")
return("FF8888")
end function
parseSize = function(bytes)
bytes = bytes.to_int
i=0
units = ["B","KB","MB","GB","TB","PT"]
while bytes > 1024
bytes=bytes/1024
i=i+1
end while
return round(bytes,2)+units[i]
end function
loadLibrary = function(libFileName, search)
paths = FindFile(libFileName,globals.hs)
if search == 2 then paths = FindFile(libFileName)
for p in paths
lib = include_lib(p)
if lib then return lib
end for
error("Could not find requested library: "+libFileName)
return false
end function
findLibrary = function(libFileName, search)
paths = FindFile(libFileName,globals.hs)
if search == 2 then paths = FindFile(libFileName)
for p in paths
return p
end for
error("Could not find requested library: "+libFileName)
return false
end function
loadMetaXPloit = function()
return loadLibrary("metaxploit.so", true)
end function
error = function(str)
Print(t.e+"<b> ERROR: </b>"+C.e+str)
end function
info = function(str)
if globals.config.info == false then return null end if
Print(t.c+"<i> INFO: "+C.e+str+"</i>")
end function
removeDuplicates = function(exploits)
index1 = -1
startCount = exploits.len
for exploit in exploits
index1 = index1+1
index2 = exploits.len -1
while index2 > index1
if exploit.memory == exploits[index2].memory and exploit.string == exploits[index2].string then exploits.remove(index2)
end if
index2 = index2 - 1
end while
end for
finalCount = exploits.len
info("Removed "+(startCount-finalCount)+" duplicate items from exploit library.")
return exploits
end function
get_choice = function(choices, default = -1)
c = 0
for choice in choices
if c == 0 then
Print("<b>"+t.it+choices[0]+C.e+"</b> ")
else
selString = t.it+"<b>["+c+"]</b> "+C.e
Print(padSpaces(selString, 12)+choices[c])
end if
c = c+1
end for
if default > -1 then
prompt = t.it+"<default="+default+C.e+">"+t.p+" $ "+t.i
else
prompt = t.p+"$ "+C.e
end if
while 1
user_choice = user_input(prompt)
if user_choice.len == 0 and default > -1 then return default
user_choice = user_choice.to_int
if not typeof(user_choice) == "number" or user_choice < 1 or user_choice >= c then
error("Not a valid choice")
continue
end if
return user_choice
end while
end function
get_yesno = function(default, prompt = "")
if prompt.len > 0 then Print("<b>"+prompt+"</b>")
if default then
prompt = t.it+"[Enter=Yes]"+C.e+t.p+" $ "+t.i
else
prompt = t.it+"[Enter=No]"+C.e+t.p+" $ "+t.i
end if
while 1
resp = user_input(prompt)
if resp.len == 0 then return default
if resp.lower[0] == "y" then return true
if resp.lower[0] == "n" then return false
end while
end function
extractMetaLibs = function(router)
returnValue = []
if typeof(router) == "router" then
externalPorts = router.used_ports
else if typeof(router) == "string" then
externalPorts = globals.rout.device_ports(router)
end if
metaxploit = loadMetaXPloit()
if typeof(router) == "router" then
routerLib = metaxploit.net_use(router.public_ip)
if routerLib != null then
routerLib = routerLib.dump_lib
else
return error("Router is destroyed lol.")
end if
else
routerLib = metaxploit.net_use(globals.rout.public_ip)
if routerLib != null then
routerLib = routerLib.dump_lib
else
return error("Router is destroyed lol.")
end if
end if
if routerLib then
if typeof(router) == "router" then
returnValue.push({"public_ip": router.public_ip, "local_ip": router.local_ip, "port_number":-1, "metaLib":routerLib})
else
returnValue.push({"public_ip": globals.rout.public_ip, "local_ip": router, "port_number":-1, "metaLib":routerLib})
end if
else
error("Could not map exploit library to router at: "+router.public_ip)
end if
for port in externalPorts
metalib = null
if typeof(router) == "router" then
metalib = metaxploit.net_use(router.public_ip, port.port_number)
else
metalib = metaxploit.net_use(router, port.port_number)
end if
if not metalib then continue
metalib = metalib.dump_lib
if not metalib then
error("Could not map exploit to public port at: "+router.public_ip+":"+port.port_number)
else
if typeof(router) == "router" then
returnValue.push({"public_ip": router.public_ip,"local_ip": port.get_lan_ip, "port_number":port.port_number, "metaLib":metalib})
else
returnValue.push({"public_ip": globals.rout.public_ip,"local_ip": port.get_lan_ip, "port_number":port.port_number, "metaLib":metalib})
end if
end if
end for
return returnValue
end function
loadExploits = function(metaLib)
// Loads all the exploits appropriate for
if typeof(metaLib) == "string" then
fileName = metaLib
else
fileName = getLibFileName(metaLib)
end if
filePath = "/lib/"
globals.db_pc.touch(filePath, fileName)
exploitLibFile = globals.db_pc.File(filePath+fileName)
if not exploitLibFile then
error("Could not find exploit library.")
return false
end if
info("Loading library..")
rValue = []
newKey = false
info(exploitLibFile.get_content)
lines = exploitLibFile.get_content.split("|")
securesys(db_shell)
info("Library contains " + lines.len + " lines of data.")
for line in lines
if line.len == 0 then continue
colsUntrimmed = line.split("::")
cols = []
for col in colsUntrimmed
cols.push(col.trim)
end for
if cols.len < 2 then continue
if cols[0] == "exploit" then
if newKey then rValue.push(newKey)
newKey = {"type": cols[1]}
else if cols[0] == "parameters" or cols[0] == "requirements" then
newKey[cols[0]] = cols[1:]
else
newKey[cols[0]] = cols[1]
end if
end for
if newKey then rValue.push(newKey)
return rValue
end function
writeExploits = function(exploits, metaLib)
fileName = getLibFileName(metaLib)
filePath = "/lib/"
globals.db_pc.touch(filePath, fileName)
file = globals.db_pc.File(filePath+fileName)
outputString = ""
if not file then
error("Could not open "+filename+" for output.")
return false
end if
for exploit in exploits
info(exploit)
if exploit.hasIndex("type") then outputString = outputString+"exploit::"+exploit.type+"&"
for key in exploit.indexes
value = exploit[key]
if typeof(value) == "string" then
outputString = outputString+key+"::"+value+"&"
else if typeof(value) == "list" then
for val in value
outputString = outputString+key+"::"+val+"&"
end for
else
error("writeExploits: Don't know what to do with type: "+typeof(value)+" while writing key: "+key)
return false
end if
end for
outputString = outputString+"|"
end for
file.set_content(outputString)
securesys(db_shell)
end function
scanTarget = function(target)
// Scans the target and appends the data to the file as needed.
metaxploit = loadMetaXPloit()
addresses = metaxploit.scan(target)
info("Found "+addresses.len+" memory addresses.")
info("Updating library...")
expList = []
expMap = false
requirements = false
for address in addresses
exploits = metaxploit.scan_address(target, address)
lines = exploits.split("\n")
for line in lines
info("Analyzing: "+line)
if line.len == 0 then continue
if line.indexOf("Unsafe check") == 0 then
if expMap then
if requirements then
expMap.push("requirements")
expMap["requirements"] = requirements
info("Adding requirements to object")
end if
expList.push(expMap)
info("pushing object: "+expMap)
end if
startPos = line.indexOf("<b>")+3
endPos = line.indexOf("</b>")
info("Creating new object with keystring: "+line[startPos:endPos])
expMap = {"exploit":"Unknown", "string":line[startPos:endPos], "memory":address}
requirements = false
else if line[0] == "*" then
if requirements then
requirements = requirements+"::"+line
info("Updated requirements: "+requirements)
else
info("New requirements set: "+line)
requirements = line
end if
end if
end for
end for
if expMap then
if requirements then
expMap.push("requirements")
expMap["requirements"] = requirements
info("Adding requirements to object")
end if
expList.push(expMap)
info("pushing object: "+expMap)
end if
fileName = getLibFileName(target)
filePath = "/lib/"
globals.db_pc.touch(filePath, fileName)
exploitLibFile = globals.db_pc.File(filePath+fileName)
newEntries = ""
for exp in expList
if target.lib_name == "kernel_router.so" or "net.so" then exp.exploit = "Router"
newEntries = newEntries+"exploit::"+exp.exploit+"&"
newEntries = newEntries+"memory::"+exp.memory+"&"
newEntries = newEntries+"string::"+exp.string+"&"
if exp.hasIndex("requirements") then newEntries = newEntries+"requirements::"+exp.requirements+"&"
if target.lib_name == "kernel_router.so" or "net.so" then
newEntries = newEntries+"parameters::Local IP Address&"
end if
newEntries = newEntries+"|"
end for
exploitLibFile.set_content(exploitLibFile.get_content+newEntries)
securesys(db_shell)
info("library updated.")
writeExploits(removeDuplicates(loadExploits(target)), target)
end function
changeExploitType = function(exploitToChange, target, newType)
info("Updating exploit type from "+exploitToChange.type+" to "+newType)
newExploit = exploitToChange
exploitList = loadExploits(target)
c = -1
for exploit in exploitList
c = c+1
if exploit.memory == exploitToChange.memory and exploit.string == exploitToChange.string then
if newType.lower == "shell" or newType.lower == "computer" or newType.lower == "file" or newType.lower == "firewall" then
exploitList[c].type = newType
info("Changing entry "+c+" to "+newType)
newExploit = exploitList[c]
else if newType.lower == "rootpass" or newType.lower == "userpass" then
if newType.lower == "rootpass" then
exploitList[c].type = "Change root password"
else
exploitList[c].type = "Change user password"
end if
if not exploitList[c].hasIndex("parameters") then exploitList[c].push("parameters")
exploitList[c].parameters = ["New Password"]
newExploit = exploitList[c]
end if
end if
end for
writeExploits(exploitList, target)
return newExploit
end function
runExploit = function(exploit, target, lip)
while 1
info("\n<b>Applying exploit <i>"+exploit.type+"</i> against target: <i>"+target.lib_name+"</i></b>")
ps = []
if exploit.hasIndex("parameters") then
for parameter in exploit.parameters
if parameter == "Local IP Address" then
ps.push(lip)
else if parameter == "New Password" then
ps.push(globals.config.passwdChange)
else
Print("<b>Additional information needed. Please answer the following questions</b>")
ps.push(user_input(parameter+" >"))
end if
end for
end if
print(exploit)
if ps.len == 0 then
overflowResult = target.overflow(exploit.memory, exploit.string)
else if ps.len == 1 then
overflowResult = target.overflow(exploit.memory, exploit.string, ps[0])
else if ps.len == 2 then
overflowResult = target.overflow(exploit.memory, exploit.string, ps[0], ps[1])
else if ps.len == 3 then
overflowResult = target.overflow(exploit.memory, exploit.string, ps[0], ps[1], ps[2])
else
error("Too many parameters")
return true
end if
info("Result is an object of type <i>"+typeof(overflowResult)+"</i>")
if typeof(overflowResult) == "null" then
choices = [""]
choices.push("Requirements not met.")
choices.push("Invalid type.")
choice = get_choice(choices, 1)
if choice == 1 then
return null
else if choice == 2 then
choices_b = ["\n<b>Which type of attack should this be listed as?"]
choices_b.push("A root user password change")
choices_b.push("A regular user password change")
choices_b.push("A firewall")
choices_b.push("Nevermind, leave it as it is.")
choice_b = get_choice(choices_b, choices_b.len-1)
if choice_b == 1 then
changeExploitType(exploit, target, "rootpass")
return null
else if choice_b == 2 then
changeExploitType(exploit, target, "userpass")
return null
else if choice_b == 3 then
changeExploitType(exploit, target, "firewall")
return null
else
continue
end if
end if
else if typeof(overflowResult) == "shell" or typeof(overflowResult) == "computer" or typeof(overflowResult) == "file" or typeof(overflowResult) == "number" then
if not exploit.type.lower == typeof(overflowResult) then
changeExploitType(exploit, target, typeof(overflowResult).upper[0]+typeof(overflowResult)[1:])
end if
return overflowResult
else
return overflowResult
end if
end while
end function
getAccessString = function(fileObj)
perm = ""
if fileObj.has_permission("r") then
perm = "r"
else
perm = "-"
end if
if fileObj.has_permission("w") then
perm = perm+"w"
else
perm = perm+"-"
end if
if fileObj.has_permission("x") then
perm = perm+"x"
else
perm = perm+"-"
end if
return perm
end function
rshell_c = function()
rs = globals.rshell
if rs.active == true then
if comp.public_ip == hc.public_ip and comp.local_ip == hc.local_ip then return null
meta = loadMetaXPloit()
meta.rshell_client(rs.ip,rs.port,"dsession")
end if
end function
getShell = function(SHELL)
Print(t.o+"Connected!")
globals.ls = globals.shell
globals.lc = globals.comp
globals.lrouter = globals.rout
globals.lip = idxp
globals.lusr = globals.usr
globals.llan = globals.lan
globals.shell = SHELL
globals.comp = SHELL.host_computer
globals.lan = globals.comp.local_ip
idxp = globals.comp.public_ip
globals.rout = get_router(idxp)
sus = getUser(globals.comp)
globals.usr = sus
globals.path = "/home/"+sus
globals.ppath = "~"
if sus == "?" then
globals.path = "/"
globals.ppath = "/"
end if
if sus == "root" then globals.path = "/root"
rshell_c()
if globals.config.deleteLogs == true then
log = SHELL.host_computer.File("/var/system.log")
if not log == null and log.has_permission("w") then
log.delete
end if
log = globals.hs.host_computer.File("/var/system.log")
if not log == null and log.has_permission("w") then
log.delete
end if
end if
return globals.shell
end function
system_message = function(text)
return Print(t.bd+"[NamelessOS Notification] > "+C.e+text)
end function
NavToRoot = function(_file)
if _file.name != "/" then
return NavToRoot(_file.parent)
end if
return _file
end function
SearchFile = function(_file)
if not _file.is_folder then
if not _file.is_binary then
if _file.name == "Bank.txt" or _file.name == "passwd" then
Print(_file.name+"\n"+_file.get_content)
end if
end if
return null
end if
files = _file.get_files
folders = _file.get_folders
for f in files
SearchFile(f)
end for
for folder in folders
SearchFile(folder)
end for
return null
end function
displayLocalMap = function(localMachineIP)
router = globals.rout
localPorts = router.device_ports(localMachineIP)
externalPorts = router.used_ports
r = loadMetaXPloit().net_use(router.public_ip)
Print("\n<b>"+C.lb+"Local Machine at "+C.o+localMachineIP)
if localPorts.len == 0 then Print("| | --> <i>"+C.o+"No local ports detected.</b>")
for localPort in localPorts
s = "| |"
if localPort.is_closed then
s = s+"-X-> "
else
s = s+"---> "
end if
s = padSpacesRight(s+":"+localPort.port_number+" ", 6)
s = s+router.port_info(localPort)
for externalPort in externalPorts
iPort = router.ping_port(externalPort.port_number)
if iPort.port_number == localPort.port_number and iPort.get_lan_ip == localMachineIP then
s = s+"-->"+C.lb+" External Address: "+C.o+router.public_ip+""+C.db+":"+C.o+externalPort.port_number
end if
end for
Print(s)
end for
Print("|\n|---> <b>"+router.essid_name+"</b> ("+router.bssid_name+")")
Print(" "+C.db+"Public IP: <b>"+router.public_ip+"</b> "+C.db+"Private IP: <b>"+router.local_ip+"</b>")
routerLib = r.dump_lib
whoisLines = whois(router.public_ip).split("\n")
for whoisLine in whoisLines
if whoisLine.len > 1 then
cols = whoisLine.split(":")
Print(" <b>"+padSpacesRight(cols[0], 25)+":</b> "+cols[1:].join(""))
end if
end for
Print(" "+C.lb+routerLib.lib_name+" is at version: "+routerLib.version)
if not router.kernel_version then
Print(C.r+"Warning: "+C.db+"kernel_router.so not found")
else
Print(" "+C.lb+"kernel_router.so is at version: "+router.kernel_version)
end if
end function
displayRouterMap = function(mRouter)
r = loadMetaXPloit().net_use(mRouter.public_ip)
if mRouter.essid_name == "" then
essid_name = C.lb+"<i>No ESSID</i>"
else
essid_name = C.lb+mRouter.essid_name
end if
Print("\n<b>"+essid_name+"</b> ("+mRouter.bssid_name+")")
Print(C.lb+"Public IP: <b>"+C.db+""+mRouter.public_ip+"</b> "+C.lb+"Private IP: <b>"+C.db+""+mRouter.local_ip+"</b>")
routerLib = r.dump_lib
whoisLines = whois(mRouter.public_ip).split("\n")
for whoisLine in whoisLines
if whoisLine.len > 1 then
cols = whoisLine.split(":")
Print("<b>"+padSpacesRight(cols[0], 25)+":</b> "+cols[1:].join(""))
end if
end for
Print(C.lb+routerLib.lib_name+""+C.db+" is at version: "+routerLib.version)
if not mRouter.kernel_version then
Print(C.r+"Warning: "+C.db+"kernel_router.so not found")
else
Print(" "+C.lb+"kernel_router.so is at version: "+mRouter.kernel_version)
end if
portFwds = []
blankPorts = []
for externalPort in mRouter.used_ports
internal = mRouter.ping_port(externalPort.port_number)
if internal then portFwds.push({"external":externalPort, "internal":internal})
arrows = "--->"
arrows2 = " ---> "
if externalPort.is_closed then arrows = "-X->"
if not mRouter.ping_port(externalPort.port_number) then
arrows2 = " ---> ? "
else if mRouter.ping_port(externalPort.port_number).is_closed then
arrows2 = " -X-> "
end if
Print(" | |"+arrows+" :"+C.o+padSpaces(externalPort.port_number, 5)+" "+C.lb+""+padSpaces(mRouter.port_info(externalPort).split(" ")[0], 8)+" "+C.db+""+padSpaces(mRouter.port_info(externalPort).split(" ")[1], 8)+arrows2+externalPort.get_lan_ip)
end for
if not mRouter.devices_lan_ip then
Print(" |-> <i>"+C.o+"No local machines detected.</i>")
else
for localMachine in mRouter.devices_lan_ip
Print(" |-> <b>"+C.lb+"Machine at "+C.o+localMachine+"</b>")
vbar = "|"
if mRouter.devices_lan_ip.indexOf(localMachine) == (mRouter.devices_lan_ip.len-1) then vbar = " "
if not mRouter.device_ports(localMachine) then
Print(" "+vbar+" |--> <i>"+C.o+"No ports detected.</i>")
else
for port in mRouter.device_ports(localMachine)
arrows = "-->"
if port.is_closed then arrows = "-X>"
toPrint = " "+vbar+" |"+arrows+" :"+C.o+padSpaces(port.port_number, 5)+" "+C.lb+""+padSpaces(mRouter.port_info(port).split(" ")[0], 8)+" "+C.db+""+padSpaces(mRouter.port_info(port).split(" ")[1], 8)
for portFwd in portFwds
if port.get_lan_ip == portFwd.internal.get_lan_ip and port.port_number == portFwd.internal.port_number then toPrint = toPrint+" --->"+C.lb+" external port "+C.o+"<b>"+portFwd.external.port_number
end for
Print(toPrint)
end for
end if
end for
end if
end function
messWithProcs = function(computer)
while 1
choices = ["\n\n<b>The following processes have been detected on the machine:</b>\nChoose the one you would like to kill."]
procs = computer.show_procs.split("\n")
PIDs = []
for b in range(0, procs.len-1)
procCols = procs[b].split(" ")
for c in range(0, procCols.len-2)
procCols[c] = padSpaces(procCols[c], 10)
end for
if b == 0 then
choices[0] = choices[0]+"\n "+procCols.join("")
else
choices.push(procCols.join(""))
PIDs.push(procCols[1])
end if
end for
choices.push("<i>Leave these procs do their proc'ing (exit)</i>")
choice = get_choice(choices, choices.len-1)
if choice == choices.len-1 then return null
Print("<b>Attempting to kill process ID: "+PIDs[choice-1])
r = computer.close_program(PIDs[choice-1].to_int)
if r == 1 then
Print("<b>SUCCESS!</b> You really showed that process you can murder it.")
else if r == 0 then
error("Could not find the process.")
else
error(r)
end if
end while
end function
messWithUsers = function(computer)
choices = ["\n<b>What would you like to do?</b>"]
choices.push("Add a user.")
choices.push("Delete a user.")
choices.push("Forget it.")
choice = get_choice(choices, choices.len-1)
result = null
if choice == 1 then
un = user_input("New user name? > ")
pw = user_input("Password? > ")
result = computer.create_user(un,pw)
else if choice == 2 then
un = user_input("User to delete? >")
delHome = get_yesno(false,"Delete home directory?")
result = computer.delete_user(un, delHome)
else
return null
end if
if result == 1 then
return Print("<b>SUCCESS!</b>")
else
return error(result)
end if
end function
crackPasswordFile = function(filePtr, hostInfo = "")
crypto = loadLibrary("crypto.so", true)
lines = filePtr.get_content.split("\n")
hr = false
for line in lines
results = []
line = split(line.trim, ":")
if line.len == 2 and line[1].len == 32 then
if line[0] == "root" then hr = true
end if
end for
for line in lines
results = []
line = split(line.trim, ":")
if line.len == 2 and line[1].len == 32 then
if hr then
if line[0] != "root" then continue
end if
Print("Cracking MD5 hash for user: <b><i>"+line[0]+"</b></i> in file: <b><i>"+filePtr.path+"</b></i>")
pw = crypto.decipher(line[1])
if pw then
Print("Password: ["+pw+"]")
globals.hc.touch(home_dir, "crackedPasswords.txt")
f = globals.hc.File(home_dir+"/crackedPasswords.txt")
f.set_content(f.get_content+"\n"+padSpaces(line[0]+"@"+pw, 30)+" "+hostInfo+": "+filePtr.name)
end if
end if
end for
end function
crackAllFiles = function(filePtr, hostInfo = "")
subDirs = filePtr.get_folders
files = filePtr.get_files
for file in files
if file.has_permission("r") and not file.is_binary then crackPasswordFile(file, hostInfo)
end for
for dir in subDirs
crackAllFiles(dir, hostInfo)
end for
end function
crackAllFilesFromTop = function(filePtr, hostInfo = "")
while filePtr.parent
filePtr = filePtr.parent
end while
crackAllFiles(dir, hostInfo)
end function
findUnlockedRWString = function(readPerm, writePerm)
if readPerm and writePerm then
return "read and write"
else if readPerm then
return "read"
else if writePerm then
return "write"
else
return "no"
end if
end function
findUnlocked = function(dirPtr)
directories = dirPtr.get_folders
files = dirPtr.get_files
if dirPtr.has_permission("w") then Print("<color=#"+getColorString(dirPtr)+">Directory at <b>"+dirPtr.path+"</b> has write permission.")
if files.len > 0 then
for file in files
if not findUnlockedRWString(file.has_permission("r"), file.has_permission("w")) == "no" then
Print("<color=#"+getColorString(file)+">File at <b>"+file.path+"</b> has "+findUnlockedRWString(file.has_permission("r"), file.has_permission("w"))+" permissions.")
end if
end if
end if
if directories.len > 0 then
for directory in directories
findUnlocked(directory)
end for
end if
end function
findUnlockedDirs = function(f, output)
for fo in f.get_folders
if fo.has_permission("w") then
output.push(fo)
end if
findUnlockedDirs(fo,output)
end for
return output
end function
browseFiles = function(dirPtr, hostInfo = "")
while not dirPtr.parent == null
dirPtr = dirPtr.parent
end while
rootPtr = dirPtr
while 1
directories = dirPtr.get_folders
files = dirPtr.get_files
choices = ["\n\n<b>Contents of "+dirPtr.path+":</b>\n <color=#"+getColorString(dirPtr)+">"+dirPtr.permissions+padSpaces("", 19)+"<.>" ]
isRoot = (dirPtr.path == "/")
if not isRoot then choices.push("<color=#"+getColorString(dirPtr.parent)+">"+dirPtr.parent.permissions+" <..>"+C.e)
for directory in directories
choices.push("<color=#"+getColorString(directory)+">"+directory.permissions+" "+padSpacesRight(directory.owner, 8, " ")+" "+padSpaces(directory.group, 8, " ")+" ./"+padSpaces(directory.name, 19, ".")+"<dir>"+C.e)
end for
if files.len > 25 then
files = files[0:24]
Print("Possible file bomb detected. Only showing the first 25 files.")
end if
for file in files
binString = "<binary>"
if not file.is_binary then binString = "<text>"
choices.push("<color=#"+getColorString(file)+">"+file.permissions+" "+padSpacesRight(file.owner, 8, " ")+" "+padSpaces(file.group, 8, " ")+" "+padSpaces(file.name, 20, ".")+"."+padSpaces(binString, 9)+parseSize(file.size)+C.e)
end for
choices.push("--- Stop browsing files ---")
choice = get_choice(choices, choices.len-1)
if choice == choices.len-1 then break
if (not isRoot and choice == 1) then
dirPtr = dirPtr.parent
else if (directories.len > 0 and isRoot and choice <= directories.len) or (directories.len > 0 and not isRoot and choice <= (1+directories.len)) then
if isRoot then
dirPtr = directories[choice-1]
else
dirPtr = directories[choice-2]
end if
else if (file.len > 0 and isRoot and choice > directories.len) or (file.len > 0 and not isRoot and choice > (directories.len+1)) then
filePtr = null
if isRoot then
filePtr = files[choice - directories.len - 1]
else
filePtr = files[choice - directories.len - 2]
end if
choicesb = ["\n\n<b>What would you like to do with this file?"]
choicesb.push("Display contents")
choicesb.push("Download file")
choicesb.push("Over-write file")
choicesb.push("Delete")
choicesb.push("Append")
choicesb.push("Scan for and crack passwords")
//choicesb.push("Unlock all files from here down")
choicesb.push("Do nothing")
choiceb = get_choice(choicesb, choicesb.len-1)
if choiceb == choicesb.len-1 then break
if choiceb == 1 then
if filePtr.get_content then
if choiceb == 1 then
Print("\n\n<b>Contents of file: "+filePtr.name+"</b>")
Print(filePtr.get_content)
end if
else
error("Could not read the contents of this file - Check permissions and file type.")
end if
else if choiceb == 2 then
Print("Saving file to: /root/Downloads/"+filePtr.name)
x = globals.shell.scp(filePtr.path, "/root/Downloads", globals.hs)
if(x == 1) then
Print("File downloaded successfully.")
else
error(x)
end if
else if choiceb == 3 then
x = user_input("<b>Please enter what you would like to replace the contents of this file with.</b>\n")
x = filePtr.set_content(x)
if(x == 1) then
Print("File overwritten successfully.")
else
error(x)
end if
else if choiceb == 4 then
if get_yesno(false, "Are you sure you want to delete this file?") then
x = filePtr.delete
if x == "" then
Print(" .. File deleted successfully.")
else
error(x)
end if
end if
else if choiceb == 6 then
if not filePtr.get_content then
error("Could not read the contents of this file - Check permissions and file type.")
continue
else
Print("Scanning contents...")
crackPasswordFile(filePtr)
Print("Cracked passwords have been saved in <b><i>" + home_dir + "/crackedPasswords.txt</b></i>")
end if
else if choiceb == 5 then
x = user_input("<b>Please enter what you would like to add to the contents of this file.</b>\n")
x = filePtr.set_content(filePtr.get_content + "\n" + x)
if(x == 1) then
Print("File appended successfully.")
else
error(x)
end if
end if
end if
end while
end function
Commands = {}
Commands["help"] = {"Name": "help","Description": "List all commands.","Args": ""}
Commands["help"]["Run"] = function(args,pipe)
Ret = "\n"+C.g+"Commands:"+C.e+"\n"
for Command in Commands
CData = Command.value
Ret = Ret+" "+C.lc+ CData.Name +C.y+" "+ CData.Args.trim +C.lc+" -> "+C.o+ CData.Description+"\n"
end for
return Print(Ret)
end function
Commands["man"] = {"Name": "man","Description": "Shows description and args for command.","Args": "[command]"}
Commands["man"]["Run"] = function(params,pipe)
cmdn = params[0]
CData = null
foun = false
for Command in Commands
if cmdn == Command.value.Name then
foun = true
CData= Command.value
end if
end for
if foun==true then
msg = C.lc+ CData.Name +C.y+" "+ CData.Args.trim +C.lc+" -> "+C.o+ CData.Description
return Print(msg)
else
return error("Command not found!")
end if
end function
Commands["ls"] = {"Name": "ls","Description": "List all files.","Args": "[(opt) path]"}
Commands["ls"]["Run"] = function(args,pipe)
computer = globals.shell.host_computer
folderPath = globals.path
if args.len == 1 then
folderPath = args[0]
end if
folder = computer.File(folderPath)
if folder == null then
return error("No such file or directory")
else
showHide = 1
showDetails = 1
subFiles = folder.get_folders+folder.get_files
subFiles.sort
output = C.o+"<b>NAME TYPE +WRX FILE_SIZE PERMISSIONS OWNER GROUP</b>"+C.e
for subFile in subFiles
nameFile = subFile.name.replace(" ","_")
permission = subFile.permissions
owner = subFile.owner
size = subFile.size
group = subFile.group
type = "txt"
if subFile.is_binary == 1 then type = "bin"
if subFile.is_folder == 1 then type = "fld"
WRX = ""
if subFile.has_permission("w") then WRX = WRX+"w" else WRX = WRX+"-"
if subFile.has_permission("r") then WRX = WRX+"r" else WRX = WRX+"-"
if subFile.has_permission("x") then WRX = WRX+"x" else WRX = WRX+"-"
output = output+"\n<color=#"+getColorString(subFile)+">"+nameFile+" ["+type+"] ["+WRX+"] ["+parseSize(size)+"] ["+permission+"] ["+owner+"] ["+group+"]"
end for
return Print(format_columns(output))
end if
end function
Commands["search"] = {"Name": "search","Description": "Searches for files or directorys you have access to.","Args": "[(opt) name]"}
Commands["search"]["Run"] = function(args,pipe)
if args.len == 0 and pipe then args.push(pipe)
if args.len == 0 then args.push("*")
file = args[0]
files = rm_dupe(FindFile(file))
for dirx in rm_dupe(FindFolder(file))
files.push(dirx)
end for
if files.len == 0 then
error("No files found.")
return null
else
showHide = 1
showDetails = 1
files = rm_dupe(files)
files.sort
output = C.o+"<b>NAME TYPE +WRX FILE_SIZE PERMISSIONS OWNER GROUP PATH</b>"+C.e
for subFile in files
subFile = globals.comp.File(subFile)
nameFile = subFile.name.replace(" ","_")
permission = subFile.permissions
owner = subFile.owner
size = subFile.size
group = subFile.group
dir = subFile.path.replace(" ","_")
type = "txt"
if subFile.is_binary == 1 then type = "bin"
if subFile.is_folder == 1 then type = "fld"
WRX = ""
if subFile.has_permission("w") then WRX = WRX+"w" else WRX = WRX+"-"
if subFile.has_permission("r") then WRX = WRX+"r" else WRX = WRX+"-"
if subFile.has_permission("x") then WRX = WRX+"x" else WRX = WRX+"-"
if WRX != "---" then
output = output+"\n<color=#"+getColorString(subFile)+">"+nameFile+" ["+type+"] ["+WRX+"] ["+parseSize(size)+"] ["+permission+"] ["+owner+"] ["+group+"] ["+dir+"]"+C.e
end if
end for
return Print(format_columns(output))
end if
end function
Commands["find"] = {"Name": "find","Description": "Finds a file or directory.","Args": "[(opt) name]"}
Commands["find"]["Run"] = function(args,pipe)
if args.len == 0 and pipe then args.push(pipe)
if args.len == 0 then args.push("*")
file = args[0]
files = rm_dupe(FindFile(file))
for dirx in rm_dupe(FindFolder(file))
files.push(dirx)
end for
if files.len == 0 then
error("No files found.")
return null
else
showHide = 1
showDetails = 1
files = rm_dupe(files)
files.sort
output = C.o+"<b>NAME TYPE +WRX FILE_SIZE PERMISSIONS OWNER GROUP PATH</b>"+C.e
for subFile in files
subFile = globals.comp.File(subFile)
nameFile = subFile.name.replace(" ","_")
permission = subFile.permissions
owner = subFile.owner
size = subFile.size
group = subFile.group
dir = subFile.path.replace(" ","_")
type = "txt"
if subFile.is_binary == 1 then type = "bin"
if subFile.is_folder == 1 then type = "fld"
WRX = ""
if subFile.has_permission("w") then WRX = WRX+"w" else WRX = WRX+"-"
if subFile.has_permission("r") then WRX = WRX+"r" else WRX = WRX+"-"
if subFile.has_permission("x") then WRX = WRX+"x" else WRX = WRX+"-"
output = output+"\n<color=#"+getColorString(subFile)+">"+nameFile+" ["+type+"] ["+WRX+"] ["+parseSize(size)+"] ["+permission+"] ["+owner+"] ["+group+"] ["+dir+"]"+C.e
end for
return Print(format_columns(output))
end if
end function
Commands["ps"] = {"Name": "ps","Description": "Shows the active processes of the operating system.","Args": ""}
Commands["ps"]["Run"] = function(args,pipe)
procs = globals.shell.host_computer.show_procs
procs = procs.split("\n")
output = ""
for proc in procs
val = proc.split(" ")
if val[0] == "USER" then continue
output = output+"\n"+C.w+"["+C.o+val[0]+C.w+"] ("+C.o+val[1]+C.w+") "+C.o+val[4]+" "+C.w+"CPU: ["+C.o+val[2]+C.w+"] "+C.w+"MEM: ["+C.o+val[3]+C.w+"]"
end for
Print(format_columns(output))
return output
end function
Commands["pwd"] = {"Name": "pwd","Description": "Prints current directory.","Args": ""}
Commands["pwd"]["Run"] = function(args,pipe)
Print(C.o+globals.path)
return globals.path
end function
Commands["haslib"] = {"Name": "hasLib","Description": "Lib check.","Args": "[lib]"}
Commands["haslib"]["Run"] = function(args,pipe)
crypto = include_lib(args[0])
return Print(crypto)
end function
Commands["rat"] = {"Name": "rat","Description": "Rats the connected pc.","Args": ""}
Commands["rat"]["Run"] = function(args,pipe)
return rshell_c()
end function
Commands["ratted"] = {"Name": "ratted","Description": "Views the ratted pcs.","Args": "[(opt) login]"}
Commands["ratted"]["Run"] = function(args,pipe)
login = globals.config.db_pass
rs = globals.rshell
if args.len == 1 then login = args[0]
sh = globals.shell.connect_service(rs.ip, rs.login, "root", login, "ssh")
if not sh then return error("Invalid password!")
securesys(sh)
sh.start_terminal
return sh.launch("/root/rshell_interface")
end function
Commands["db"] = {"Name": "db","Description": "Logs into the db.","Args": ""}
Commands["db"]["Run"] = function(args,pipe)
sh = globals.shell.connect_service(globals.config.db, 22, "root", globals.config.db_pass, "ssh")
if not sh then return error("Invalid password!")
securesys(sh)
return getShell(sh)
end function
Commands["cd"] = {"Name": "cd","Description": "Moves to a different directory.","Args": "[path]"}
Commands["cd"]["Run"] = function(args,pipe)
computer = globals.comp
if computer.File(args[0]) then
globals.path = computer.File(args[0]).path
else
if computer.File(globals.path+"/"+args[0]) then
globals.path = computer.File(globals.path+"/"+args[0]).path
else
error("No such file or directory")
end if
end if
globals.ppath = pparse(globals.path)
return globals.path
end function
Commands["shell"] = {"Name": "shell","Description": "Starts a normal shell.","Args": ""}
Commands["shell"]["Run"] = function(args,pipe)
return globals.shell.start_terminal()
end function
Commands["vpn"] = {"Name": "vpn","Description": "Randomizes your ip and makes the trace longer.","Args": ""}
Commands["vpn"]["Run"] = function(params,pipe)
globals.proxys.shuffle
sh = null
connect = function(ip,pass,pipe)
info("Routing...")
remote = globals.shell.connect_service(ip, 22, "root", pass, "ssh")
if remote then
securesys(remote)
getShell(remote)
info("Routed!")
end if
return sh
end function
for data in globals.proxys
connect(data["ip"],data["password"])
end for
if sh then
securesys(sh)
return getShell(sh)
end if
end function
Commands["clear"] = {"Name": "clear","Description": "Delete any text from the terminal.","Args": ""}
Commands["clear"]["Run"] = function(args,pipe)
return clear_screen
end function
Commands["exit"] = {"Name": "exit","Description": "Exits from NamelessOS.","Args": ""}
Commands["exit"]["Run"] = function(args,pipe)
return exit("Exiting NamelessOS...")
end function
Commands["escalate"] = {"Name": "escalate","Description": "Escalates your shell permissions.","Args": ""}
Commands["escalate"]["Run"] = function(Args,pipe)
startev = function()
cryptools = loadLibrary("crypto.so")
if not cryptools then return error("Can't find crypto library")
metaxploit = loadLibrary("metaxploit.so")
if not metaxploit then return error("Can't find metaxploit library")
if (globals.hc.public_ip == globals.comp.public_ip and globals.hc.local_ip == globals.comp.local_ip) or globals.ar == "escalate" then
GetPassword = function(userPass)
if userPass.len != 2 then return error("wrong syntax")
password = cryptools.decipher(userPass[1])
if password then
return password
else
return null
end if
end function
passwds = FindFile("passwd",globals.shell,"pwd")
for passwd in passwds
if passwd != null then
cont = passwd.split("\n")
for c in cont
cc = c.split(":")
if cc.len == 2 then
if cc[0] == "root" then
p = GetPassword(cc)
if p != null then
shell = get_shell("root", p)
if shell then
info("Fake password")
else
return getShell(shell)
end if
else
info("Fake password.")
end if
end if
end if
end for
else
info("Cant find /etc/passwd")
end if
end for
libs = FindFile("*.so")
metas = []
for lib in libs
m = metaxploit.load(lib)
if m != null then
metas.push( m )
end if
end for
for metaLib in metas
exploits = loadExploits(metaLib)
if exploits.len == 0 then
scanTarget(metaLib)
exploits = loadExploits(metaLib)
end if
for exploit in exploits
vuls = []
output = ""
vuls.push(exploit.memory+":"+exploit.string)
for v in vuls
data = v.split(":")
res = null
ps = []
if exploit.hasIndex("parameters") then
for parameter in exploit.parameters
if parameter == "Local IP Address" then
ps.push(globals.comp.local_ip)
else if parameter == "New Password" then
ps.push(globals.config.passwdChange)
else
Print("<b>Additional information needed. Please answer the following questions</b>")
ps.push(user_input(parameter+" >"))
end if
end for
end if
if ps.len == 0 then
res = metaLib.overflow(exploit.memory, exploit.string)
else if ps.len == 1 then
res = metaLib.overflow(exploit.memory, exploit.string, ps[0])
else if ps.len == 2 then
res = metaLib.overflow(exploit.memory, exploit.string, ps[0], ps[1])
else if ps.len == 3 then
res = metaLib.overflow(exploit.memory, exploit.string, ps[0], ps[1], ps[2])
else
error("Too many parameters")
return null
end if
if res != null then
type = typeof(res)
if type == "shell" then
sus = getUser(res.host_computer)
if sus == "root" then return getShell(res)
if globals.usr == "guest" then
if sus != "guest" then
return getShell(res)
end if
end if
end if
if type == "number" then
info("Password changed to '"+globals.config.passwdChange+"'")
end if
if type == "file" then
Root = NavToRoot(res)
passwds = FindFile("passwd",res,"pwd")
for passwd in passwds
if passwd and passwd != null then
Print(passwd)
cont = passwd.split("\n")
for c in cont
cc = c.split(":")
if cc.len == 2 then
if cc[0] == "root" then
p = GetPassword(cc)
if p != null then
shell = get_shell("root", p)
if shell then
info("Fake password")
else
return getShell(shell)
end if
else
info("Fake password.")
end if
end if
end if
end for
else
info("Cant find /etc/passwd")
end if
end for
end if
if type == "computer" then
if globals.config.deleteLogs == true then
var = res.File("/var/system.log")
if var then
if var.has_permission("w") then
var.delete()
info("Logs deleted")
else
info("Cant delete logs")
end if
else
info("Cant find /var/system.log")
end if
end if
passwds = FindFile("passwd",res,"pwd")
for passwd in passwds
if passwd and passwd != null then
Print(passwd)
cont = passwd.split("\n")
for c in cont
cc = c.split(":")
if cc.len == 2 then
if cc[0] == "root" then
p = GetPassword(cc)
if p != null then
shell = get_shell("root", p)
if shell then
info("Fake password")
else
return getShell(shell)
end if
else
info("Fake password.")
end if
end if
end if
end for
else
info("Cant find /etc/passwd")
end if
end for
end if
end if
end for
end for
end for
else
dirs = findUnlockedDirs(globals.comp.File("/"),[])
if dirs.len > 0 then
ddir = null
for dir in dirs
if dir.has_permission("w") then ddir = dir
if dir.has_permission("w") and dir.has_permission("x") then ddir = dir
if dir.has_permission("w") and dir.has_permission("r") then ddir = dir
if dir.has_permission("w") and dir.has_permission("r") and dir.has_permission("x") then ddir = dir
if dir.parent.name == "." then ddir = dir.parent
end for
mkd = globals.comp.create_folder(ddir.path, ".")
if mkd == 1 then
dir = globals.comp.File(ddir.path+"/.")
x = globals.hs.scp(program_path, dir.path, globals.shell)
if(x == 1) then
if not findLibrary("crypto.so",2) then
globals.hs.scp(findLibrary("crypto.so"), dir.path, globals.shell)
end if
if not findLibrary("metaxploit.so",2) then
globals.hs.scp(findLibrary("metaxploit.so"), dir.path, globals.shell)
end if
prgd = dir.path+"/"+globals.hc.File(program_path).name
if not globals.comp.File(prgd) then
globals.hs.scp(program_path, dir.path, globals.shell)
end if
args = [globals.login,"escalate"]
globals.shell.launch(prgd,args.join(" "))
end if
else
Print("Invalid Permissions.")
end if
else
Print("Unable to find vulnerable folder cant escalate.")
end if
end if
end function
if globals.usr == "root" then
return Print("You already have root.")
else
return startev()
end if
end function
Commands["back"] = {"Name": "back","Description": "Goes back to the last shell.","Args": ""}
Commands["back"]["Run"] = function(args,pipe)
globals.shell = globals.ls
globals.comp = globals.lc
sus = getUser(globals.comp)
globals.usr = sus
globals.rout = globals.lrouter
idxp = globals.lip
globals.lan = globals.llan
globals.path = "/home/"+sus
globals.ppath = "~"
if sus == "?" then
globals.path = "/"
globals.ppath = "/"
end if
if sus == "root" then globals.path = "/root"
end function
Commands["up"] = {"Name": "up","Description": "Uploads a file.","Args": "[path]"}
Commands["up"]["Run"] = function(args,pipe)
pathFile = args[0]
file = globals.hs.host_computer.File(pathFile)
if file == null then return error("file not found: "+pathFile)
Print("Uploading file to: "+pparse(globals.ppath)+"/"+file.name)
x = globals.hs.scp(file.path, globals.path, globals.shell)
if(x == 1) then
return Print("File downloaded successfully.")
else
return error(x)
end if
end function
Commands["dl"] = {"Name": "dl","Description": "Downloads a file.","Args": "[path]"}
Commands["dl"]["Run"] = function(args,pipe)
pathFile = args[0]
file = globals.shell.host_computer.File(pathFile)
if file == null then file = globals.shell.host_computer.File(path+"/"+pathFile)
if file == null then return error("file not found: "+pathFile)
Print("Saving file to: /root/Downloads/"+file.name)
x = globals.shell.scp(file.path, "/root/Downloads", globals.hs)
if(x == 1) then
return Print("File downloaded successfully.")
else
return error(x)
end if
end function
Commands["cat"] = {"Name": "cat","Description": "Shows the contents of a text file.","Args": "[file]"}
Commands["cat"]["Run"] = function(params,pipe)
pathFile = params[0]
if pipe then pathFile = pipe
file = globals.shell.host_computer.File(pathFile)
if file == null then file = globals.shell.host_computer.File(path+"/"+pathFile)
if file == null then return error("file not found: "+pathFile)
if file.is_binary then return error("can't open "+file.path+". Binary file")
if not file.has_permission("r") then return error("permission denied")
return Print(file.get_content)
end function
Commands["rm"] = {"Name": "rm","Description": "Delete any file if you have the appropriate permissions.","Args": "[(opt) -r] [file]"}
Commands["rm"]["Run"] = function(args,pipe)
pathFile = args[0]
if pipe then pathFile = pipe
isRecursive = 0
if args[0] == "-r" then
isRecursive = 1
pathFile = args[1]
end if
file = globals.shell.host_computer.File(pathFile)
if file == null then return error("file not found: "+pathFile)
if not file.has_permission("w") then return error("permission denied")
if file.is_folder == 1 and isRecursive == 0 then
return error(file.name+" is a directory")
else
return file.delete
end if
end function
Commands["iwlist"] = {"Name": "iwlist","Description": "Shows the list of wifi networks visible from your computer.","Args": ""}
Commands["iwlist"]["Run"] = function(params,pipe)
c = globals.comp
if c.wifi_networks("wlan0")[0] != null then interface="wlan0"
if c.wifi_networks("eth0")[0] != null then interface="eth0"
la = 999999
laa = 999999
networks = c.wifi_networks(interface)
bssid = ""
essid = ""
tack = ""
xx = false
for net in networks
ack = ceil(300000/net.split(" ")[1].remove("%").val)
if ack < laa then
if xx == false then
essid = net.split(" ")[2]
laa = ack
end if
end if
end for
for net in networks
ack = ceil(300000/net.split(" ")[1].remove("%").val)
if ack < la then
if xx == false then
bssid = net.split(" ")[0]
la = ack
end if
end if
if essid == net.split(" ")[2] then
Print(C.o+net+" "+C.y+"["+ack+"] "+C.rr+"(Highest)")
tack = ack
else
Print(C.o+net+" "+C.y+"["+ack+"]")
end if
if ack != tack then
ack = tack
end if
end for
end function
Commands["wifi"] = {"Name": "wifi","Description": "Hacks the specified wifi or the one with the highest connection.","Args": "[(opt) essid]"}
Commands["wifi"]["Run"] = function(params,pipe)
w = ""
if params.len >= 1 then
w = params[0]
end if
if pipe then w = pipe
crypto = loadLibrary("crypto.so",true)
if not crypto then return error("Can't find crypto library")
c = globals.comp
if c.wifi_networks("wlan0")[0] != null then interface="wlan0"
if c.wifi_networks("eth0")[0] != null then interface="eth0"
la = 999999
laa = 999999
networks = c.wifi_networks(interface)
bssid = ""
essid = ""
tack = ""
xx = false
for net in networks
ack = ceil(300000/net.split(" ")[1].remove("%").val)
if w == net.split(" ")[2] then
essid = net.split(" ")[2]
else if ack < laa then
if xx == false then
essid = net.split(" ")[2]
laa = ack
end if
end if
end for
for net in networks
ack = ceil(300000/net.split(" ")[1].remove("%").val)
if w == net.split(" ")[2] then
bssid = net.split(" ")[0]
la = ack
xx = true
else if ack < la then
if xx == false then
bssid = net.split(" ")[0]
la = ack
end if
end if
if essid == net.split(" ")[2] then
Print(C.o+net+" "+C.y+"["+ack+"] "+C.rr+"(SELECTED)")
tack = ack
else
Print(C.o+net+" "+C.y+"["+ack+"]")
end if
if ack != tack then
ack = tack
end if
end for
f = c.File(current_path+"/file.cap")
if f then f.delete
crypto.airmon("start", interface)
r1 = crypto.aireplay(bssid,essid,ack)
if typeof(r1) == "string" then return error(r1)
pass = crypto.aircrack(current_path+"/file.cap")
if pass == "" then return error("Terminated!")
c.connect_wifi(interface,bssid,essid,pass)
f = c.File(current_path+"/file.cap")
if f then f.delete
crypto.airmon("stop", interface)
return Print(C.o+"Connected, Creds: "+C.r+essid+":"+pass)
end function
Commands["sudo"] = {"Name": "sudo","Description": "It allows users to run programs with administrator security privileges.","Args": "[(opt) -s] [command]"}
Commands["sudo"]["Run"] = function(Args,pipe)
inputPass = user_input("Password: ", true)
if Args[0] == "-u" then
shell = get_shell(Args[2], inputPass)
if not shell then return error("incorrect username or password")
getShell(shell)
else if Args[0] == "-s" then
shell = get_shell("root", inputPass)
if not shell then return error("incorrect password")
getShell(shell)
end if
if Args[0] == "-s" or Args[1] == "-u" then
else
computer = shell.host_computer
args = Args[1:].join(" ")
if not Args[0].indexOf("/") then
globalPath = [globals.path, "/bin", "/usr/bin"]
for path in globalPath
program = computer.File(path+"/"+Args[1])
if program != null then return error(shell.launch(program.path, args))
end for
else
program = computer.File(Args[1])
if not program then return error(Args[1]+" not found.")
shell.launch(program.path, args)
end if
end if
end function
Commands["grep"] = {"Name": "grep","Description": "Looks for text in a string.","Args": "[search] [string]"}
Commands["grep"]["Run"] = function(Args,pipe)
if pipe then Args.push(pipe)
search = Args[0]
input = Args[1]
if input.split("\n").len != 0 then
lines = input.split("\n")
f = []
for line in lines
if line.split(search).len >= 2 then f.push(line)
end for
if f.len == 1 then f = f[0]
Print(f)
return f
else
Print(input)
return input
end if
end function
Commands["crack"] = {"Name": "crack","Description": "Cracks a hash.","Args": "[hash]"}
Commands["crack"]["Run"] = function(Args,pipe)
crypto = loadLibrary("crypto.so",true)
if not crypto then return error("Can't find crypto library")
out = ""
login = Args[0]
if pipe then login = pipe
hashes=login
if typeof(login)!="list" then
hashes=[login]
end if
for hash in hashes
if login.split(":").len == 2 then login = login.split(":")[1]
got = crypto.decipher(login)
if got != null then
out=out+t.t+login+" -> "+got+"\n"
else
out=out+t.t+login+" -> "+t.e+"Invalid Hash\n"
end if
end for
return Print(out)
end function
Commands["rshells"] = {"Name": "rshells","Description": "Terminal interface to interact with the installed rshell server and manage incoming connections.","Args": ""}
Commands["rshells"]["Run"] = function(args,pipe)
metaxploit = loadMetaXPloit()
if not metaxploit then exit("Error: Can't find metaxploit library")
Print("Listening for upcoming connections...")
shells = []
while shells.len == 0
shells = metaxploit.rshell_server
if(typeof(shells) == "string") then exit(shells)
if(shells.len == 0) then wait(2)
end while
option = 0
while typeof(option) != "number" or (option < 1 or option > shells.len)
Print(shells.len + " shell(s) connected!\n<b>Select a shell to start a terminal:</b>")
for i in range(0, shells.len - 1)
shel = shells[i]
wlsys(shel)
Print("\n<b>Shell (" + (i + 1) + ")</b>\nUser: "+ uparse(getUser(shel.host_computer)) +"\nPublic IP: " + shel.host_computer.public_ip + "\nLocal IP: " + shel.host_computer.local_ip)
end for
Print("-----------")
option = user_input("Select shell>").to_int
end while
Print("Starting shell #" + option)
return getShell(shells[option - 1])
end function
Commands["sniff"] = {"Name": "sniff","Description": "The terminal listens to the network packets of any connection that passes through this device.","Args": "[(opt) saveEncSource]"}
Commands["sniff"]["Run"] = function(params,pipe)
metaxploit = loadMetaXPloit()
if not metaxploit then return error("Error: Can't find metaxploit library")
Print("Starting listen...\nWaiting to incoming data.")
while 1
output = metaxploit.sniffer(params.len == 1)
if not output then
error("Unknown error: can't start to listening")
else
Print(output)
end if
end while
end function
Commands["kernel.panic"] = {"Name": "kernel.panic","Description": "Destroy everything (requires reboot).","Args": ""}
Commands["kernel.panic"]["Run"] = function(params,pipe)
reboot = null
if globals.comp.File("/boot") and globals.comp.File("/boot").has_permission("w") then
globals.comp.File("/boot").delete
end if
end function
Commands["forkbomb"] = {"Name": "forkbomb","Description": "Fills up the ram.","Args": ""}
Commands["forkbomb"]["Run"] = function(params,pipe)
rs = globals.rshell
meta = loadMetaXPloit()
i=0
act = true
while act == true
meta.rshell_client(rs.ip,rs.port,"Xorg")
i=i+1
if i == 50 then act = false
wait()
end while
Print(C.G+"Success!")
end function
Commands["files"] = {"Name": "files","Description": "File browser.","Args": ""}
Commands["files"]["Run"] = function(params,pipe)
while 1
choices = ["\n\n<b>Options:</b>"]
choices.push(C.y+"Browse through the files.")
choices.push(C.y+"Create a file on the computer.")
choices.push(C.y+"Mess with users")
choices.push(C.y+"Mess with processes")
choices.push(C.y+"Scan entire machine for passwords (and crack them)")
choices.push(C.y+"Scan entire machine for vulnerable directories and files")
choices.push(C.rr+"Go Back.")
choice = get_choice(choices, choices.len-1)
if choice == choices.len-1 then break
if choice == 1 then
browseFiles(globals.comp.File("/"), globals.comp.public_ip+"->"+globals.comp.local_ip)
else if choice == 2 then
path = user_input("Path to new file (Do not include file name) >")
filename = user_input("File name for new file > ")
x = globals.comp.touch(path, filename)
if x == 1 then
Print("File successfully created at "+path+"/"+filename)
else
error(x)
end if
else if choice == 3 then
messWithUsers(globals.comp)
else if choice == 4 then
messWithProcs(globals.comp)
else if choice == 5 then
crackAllFiles(globals.comp.File("/"), vul.metaLib.public_ip+" --> "+vul.metaLib.local_ip)
Print("Cracked passwords have been saved in <b><i>"+home_dir+"/crackedPasswords.txt</b></i>")
else if choice == 6 then
findUnlocked(globals.comp.File("/"))
end if
end while
end function
Commands["nmap"] = {"Name": "nmap","Description": "Scans an ip/domain for ports and local ips.","Args": "[ip/domain]"}
Commands["nmap"]["Run"] = function(args,pipe)
ip = args[0]
if pipe then ip = pipe
port = null
ipAddr = null
if not is_valid_ip(ip) then
if is_valid_ip(nslookup(ip)) then
ip = nslookup(ip)
else
return error("IP not found!")
end if
end if
ipAddr = ip
metaxploit = loadMetaXPloit()
if is_lan_ip(ipAddr) then
routerLib = metaxploit.net_use(globals.rout.public_ip)
displayLocalMap(ipAddr)
else
router = getRouter(ipAddr)
routerLib = metaxploit.net_use(router.public_ip)
displayRouterMap(router)
end if
end function
Commands["router"] = {"Name": "router","Description": "Scans the router for firewall rules.","Args": "[ip]"}
Commands["router"]["Run"] = function(params,pipe)
ipAddress = params[0]
if pipe then ipAddress = pipe
router = get_router( ipAddress )
if router == null then return error("scanrouter: ip address not found")
Print("Connecting to router at address: " + ipAddress + "\nScanning kernel library...")
version = router.kernel_version
if not version then
Print("Warning: kernel_router.so not found")
else
Print("kernel_router.so : v" + version)
end if
firewall_rules = router.firewall_rules
if typeof(firewall_rules) == "string" then return error(firewall_rules)
Print("\nScanning firewall rules...\n")
if firewall_rules.len == 0 then return error("No rules found.")
info = C.o+"<b>ACTION PORT SOURCE_IP DESTINATION_IP"
for rules in firewall_rules
info = info + "\n" + rules
end for
Print(format_columns(info) + "\n")
return info
end function
Commands["ssh"] = {"Name": "ssh","Description": "Access to private servers through a back door.","Args": "[user@password] [ip] [(opt) port]"}
Commands["ssh"]["Run"] = function(args,pipe)
ip = args[1]
if pipe then args[0] = pipe
credentials = args[0].split("@")
user = credentials[0]
password = credentials[1]
port = 22
serv = "ssh"
if args.len == 3 then
port = args[2].to_int
if port == "21" then serv = "ftp"
end if
if typeof(port) != "number" then return error("Invalid port: "+port)
remote = globals.shell.connect_service(ip, port, user, password, serv)
if remote then
wlsys(remote)
return getShell(remote)
end if
end function
Commands["masterkey"] = {"Name": "masterkey","Description": "lol this is just op (if u have access)","Args": "[ip] [port]"}
Commands["masterkey"]["Run"] = function(args,pipe)
if pipe then args[0] = pipe
ip = args[0]
port = args[1].to_int
if typeof(port) != "number" then return error("Invalid port: "+port)
remote = globals.shell.masterkey(ip, port)
if remote then
wlsys(remote)
return getShell(remote)
end if
end function
Commands["echo"] = {"Name": "echo","Description": "Prints text.","Args": "[text]"}
Commands["echo"]["Run"] = function(args,pipe)
if pipe then args[0] = pipe
text = args[0]
Print(text)
return text
end function
Commands["secure"] = {"Name": "secure","Description": "Secures the connected system.", "Args": ""}
Commands["secure"]["Run"] = function(args,pipe)
securesys(globals.shell)
end function
Commands["scan"] = {"Name": "scan","Description": "Scans an ip/domain for vulns.","Args": "[ip/domain] [(opt) port]"}
Commands["scan"]["Run"] = function(args,pipe)
ip = args[0]
port = null
ipAddr = null
globals.H = []
if not is_valid_ip(ip) then
if is_valid_ip(nslookup(ip)) then
ip = nslookup(ip)
else
return error("IP not found!")
end if
end if
ipAddr = ip
if args.len == 2 then port = args[1]
metaxploit = loadMetaXPloit()
if is_lan_ip(ipAddr) then
routerLib = metaxploit.net_use(globals.rout.public_ip)
metaLibs = extractMetaLibs(ipAddr)
else
router = getRouter(ipAddr)
routerLib = metaxploit.net_use(router.public_ip)
metaLibs = extractMetaLibs(router)
end if
for metaLib in metaLibs
if port!=null then
if metaLib.port_number != port then continue
end if
if loadExploits(metaLib.metaLib).len == 0 then
scanTarget(metaLib.metaLib)
end if
exploits = loadExploits(metaLib.metaLib)
exps = []
for exploit in exploits
exploitObj = runExploit(exploit, metaLib.metaLib, metaLib.local_ip)
exps.push(exploitObj)
end for
globals.H.push({"exploits":exps,"metaLib":metaLib})
end for
return Print("Done Scanning! Run: 'exploits' for the found vulns")
end function
Commands["exploits"] = {"Name": "exploits","Description": "Lists all found vulns.","Args": ""}
Commands["exploits"]["Run"] = function(args,pipe)
idx = 0
for vul in globals.H
Print(C.lc+"<b>IP: </b>"+C.e+vul.metaLib.public_ip)
Print(C.lc+"<b>Local IP: </b>"+C.e+vul.metaLib.local_ip)
Print(C.lc+"<b>Port: </b>"+C.e+vul.metaLib.port_number)
Print(C.lc+"<b>Lib: </b>"+C.e+vul.metaLib.metaLib.lib_name)
Print(C.lc+"<b>Lib Version: </b>"+C.e+vul.metaLib.metaLib.version)
Print(C.lc+"<b>Exploits:</b>")
for m in vul.metaLib
for exploitObj in vul.exploits
if typeof(exploitObj) == "shell" or typeof(exploitObj) == "ftpshell" then
idx=idx+1
Print(t.t+" <b>["+str(idx)+"]"+C.e+":</b> <i>Shell</i> ("+uparse(getUser(exploitObj.host_computer))+"</color>)")
else if typeof(exploitObj) == "computer" then
idx=idx+1
Print(t.t+" <b>["+str(idx)+"]"+C.e+":</b> <i>Computer</i> ("+uparse(getUser(exploitObj))+"</color>)")
else if typeof(exploitObj) == "file" then
idx=idx+1
fo = NavToRoot(exploitObj)
Print(t.t+" <b>["+str(idx)+"]"+C.e+":</b> <i>File</i> ("+uparse(getUser(fo,1))+C.e+")")
end if
end for
end for
Print("\n")
end for
end function
Commands["use"] = {"Name": "use","Description": "Uses a vuln.","Args": "[id]"}
Commands["use"]["Run"] = function(args,pipe)
idx = 0
for vul in globals.H
for m in vul.metaLib
for exploitObj in vul.exploits
if typeof(exploitObj) == "shell" or typeof(exploitObj) == "ftpshell" then
idx=idx+1
else if typeof(exploitObj) == "computer" then
idx=idx+1
else if typeof(exploitObj) == "file" then
idx=idx+1
end if
end for
end for
end for
if args[0].to_int > idx then
return Print("Invalid ID")
end if
idx=0
for vul in globals.H
for m in vul.metaLib
for exploitObj in vul.exploits
if typeof(exploitObj) == "shell" or typeof(exploitObj) == "ftpshell" then
idx=idx+1
if args[0].to_int == idx then
return getShell(exploitObj)
end if
else if typeof(exploitObj) == "computer" then
idx=idx+1
if args[0].to_int == idx then
return getShell(exploitObj)
end if
else if typeof(exploitObj) == "file" then
idx=idx+1
if args[0].to_int == idx then
while 1
choices = ["\n\n<b>Options:</b>"]
choices.push(t.c+"Browse through the files.")
choices.push(t.c+"Scan entire machine for passwords (and crack them)")
choices.push(t.c+"Scan entire machine for vulnerable directories and files")
choices.push(t.e+"Go Back.")
choice = get_choice(choices, choices.len-1)
if choice == choices.len-1 then break
if choice == 1 then
browseFiles(exploitObj)
else if choice == 2 then
while exploitObj.parent
exploitObj = exploitObj.parent
end while
crackAllFiles(exploitObj)
Print("Cracked passwords have been saved in <b><i>"+home_dir+"/crackedPasswords.txt</b></i>")
else if choice == 3 then
while exploitObj.parent
exploitObj = exploitObj.parent
end while
findUnlocked(exploitObj)
end if
end while
end if
end if
end for
end for
end for
end function
Commands["sys"] = {"Name": "sys","Description": "System shell.","Args": ""}
Commands["sys"]["Run"] = function(params,pipe)
system_shell = function()
message = user_input("\n"+t.bd+"NamelessOS [SYSTEM]"+C.e+t.p+" $ "+t.i)
args = message.split(" ")
if args[0] == "commands" or args[0] == "help" then
Print("\n"+L.c+t.t+"System Commands:"+C.e+"\n")
Print(L.bc+"secure -> Removes programs/files that introduce security issues also chmods the system.")
Print(L.bc+"decipher [file] -> Decipher tool.\n")
Print(L.bc+"exit -> Exits the shell.\n")
Print(L.bc+"help/commands -> Lists all commands.\n")
Print(L.bc+"<i>More soon..</i>\n")
end if
if args[0] == "decipher" then
crypto = loadLibrary("crypto.so")
if not crypto then return error("Error: Can't find crypto library")
filename = args[1]
file = globals.shell.host_computer.File(filename)
if not file == null then
logins = file.get_content.split("\n")
for login in logins
info = login.split(":")
accnum = info[0]
hash = info[1]
got = crypto.decipher(hash)
Print(accnum+" -> "+got)
end for
end if
end if
if args[0] == "secure" then
if not globals.usr == "root" then
Print(t.e+"NamelessOS cannot be sure that this command worked due to no root access"+C.e)
end if
securesys(globals.shell)
Print(t.s+"NamelessOS has secured this machine.")
Print(t.e+"You have too run sudo an get root before you can do anything or your machine"+C.e)
end if
if args[0] == "exit" then
return
end if
system_shell
end function
return system_shell
end function
if globals.ar then Commands[globals.ar].Run([],null)
clear_screen
menu = function()
namelessos = function()
globals.disable_print = false
cmdpTOP= "\n"+t.bd+"<s>• </s> (" + uparse(usr) + t.p+"@"+t.ip+ comp.public_ip + "~" + comp.local_ip + t.bd + ")<s> </s>["+t.pa+ pparse(globals.ppath) +t.bd+"]"
cmdpBTM= "\n"+t.bd+"<s>• •</s>"+t.p+" $ " +C.e+t.i
input = user_input(cmdpTOP+cmdpBTM)
cmds = input.split(";")
if cmds.len == 0 then cmds.push(input)
for cmd in cmds
pipes = cmd.split(":")
if pipes.len == 0 then pipes.push(cmd)
globals.lout = null
cpipe = 1
for pipe in pipes
globals.disable_print = true
if cpipe == pipes.len then
globals.disable_print = false
else
cpipe=cpipe+1
end if
args = pipe.split(" ")
cmdn = args[0].lower
args.pull
if Commands.hasIndex(cmdn) then
cmd = Commands[cmdn]
Args = cmd.Args.trim.replace("(opt) ","(opt)").split(" ")
usa = function()
msg = t.c+ cmd.Name+" "+t.p+" "+cmd.Args.trim +t.c+" -> "+t.t+ cmd.Description
Print("Usage: "+msg)
globals.lout = null
end function
if cmd.Args.trim == "" then
if args.len == 1 then
if args[0] == "-h" or args[0] == "--help" then
usa
continue
end if
end if
globals.lout = cmd.Run(args,globals.lout)
continue
end if
ta=0
oa=0
ra=0
for arg in Args
arg=arg.replace("[","")
arg=arg.replace("]","")
if arg.indexOf("(opt)") == 0 then
oa=oa+1
else
ra=ra+1
end if
ta=ta+1
end for
if globals.lout != null then
if ra == 1 and args.len < ra then
args.push(globals.lout)
end if
ra=ra-1
oa=oa+1
end if
if (args.len < ra or args.len > ta) then
usa
else
if args.len == 1 then
if args[0] == "-h" or args[0] == "--help" then
usa
continue
end if
end if
globals.lout = cmd.Run(args,globals.lout)
end if
else
error("Command not found!")
end if
end for
end for
namelessos
end function
namelessos
menu
end function
menu