This repository has been archived on 2026-01-16. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
greyhack-public/sandboxy.src
2022-12-29 18:06:14 -08:00

354 lines
No EOL
11 KiB
Lua

//S&boxy
import_code("/root/BTC")
ver="1.0.0"
callSand=function()
globals.server=get_shell.connect_service
if typeof(server) != "shell" then exit("<color=red><b>Could not connect</b></color>")
globals.root=server.connect_service
if typeof(root) != "shell" then exit("<color=red><b>Could not connect</b></color>")
globals.sandbox=server.connect_service
if typeof(sandbox) != "shell" then exit("<color=red><b>Could not connect</b></color>")
end function
Sha256 = function(password)
Blocks = [[0]]
i=0
e=0
while i < password.len
e=4
while e > 0 and password.hasIndex(i)
e=e-1
Blocks[-1][-1] = Blocks[-1][-1] + code(password[i])*256^e
i=i+1
end while
if e == 0 then
if Blocks[-1].len == 16 then Blocks = Blocks + [[0]] else Blocks[-1] = Blocks[-1] + [0]
end if
end while
if e > 0 then
Blocks[-1][-1] = Blocks[-1][-1] + (2147483648/256^(4-e))
else
Blocks[-1][-1] = 2147483648
end if
if Blocks[-1].len == 16 then Blocks = Blocks + [[0]]
while Blocks[-1].len != 15
Blocks[-1] = Blocks[-1] + [0]
end while
Blocks[-1] = Blocks[-1] + [password.len*8]
add = function(a, b)
return (a + b) % 4294967296
end function
XOR = function(a, b)
return bitwise("^", floor(a/65536), floor(b/65536))*65536+bitwise("^", a%65536, b%65536)
end function
AND = function(a, b)
return bitwise("&", floor(a/65536), floor(b/65536))*65536+bitwise("&", a%65536, b%65536)
end function
OR = function(a, b)
return bitwise("|", floor(a/65536), floor(b/65536))*65536+bitwise("|", a%65536, b%65536)
end function
NOT = function(n)
return 4294967295-n
end function
Ch = function(x, y, z)
return OR(AND(x, y), AND(NOT(x), z))
end function
Maj = function(x, y, z)
return OR(OR(AND(x, y), AND(x, z)), AND(y, z))
end function
shr = function(n, shifts)
return floor(n/2^shifts)
end function
rotr = function(n, rots)
rots = 2^rots
return (n % rots) * (4294967296/rots) + floor(n/rots)
end function
sigma0 = function(n)
return XOR(XOR(rotr(n, 7), rotr(n, 18)), shr(n, 3))
end function
sigma1 = function(n)
return XOR(XOR(rotr(n, 17), rotr(n, 19)), shr(n, 10))
end function
SIGMA0 = function(n)
return XOR(XOR(rotr(n, 2), rotr(n, 13)), rotr(n, 22))
end function
SIGMA1 = function(n)
return XOR(XOR(rotr(n, 6), rotr(n, 11)), rotr(n, 25))
end function
K = []
K = K + [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221]
K = K + [3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580]
K = K + [3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986]
K = K + [2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895]
K = K + [666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037]
K = K + [2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344]
K = K + [430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779]
K = K + [1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298]
H = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225]
for Block in Blocks
W = Block[0:]
for i in range(16, 63)
W = W + [add(add(add(sigma1(W[i-2]), W[i-7]), sigma0(W[i-15])), W[i-16])]
end for
a = H[0]
b = H[1]
c = H[2]
d = H[3]
e = H[4]
f = H[5]
g = H[6]
h = H[7]
for i in range(0, 63)
T1 = add(add(add(add(SIGMA1(e), Ch(e, f, g)), h), K[i]), W[i])
T2 = add(SIGMA0(a), Maj(a, b, c))
h = g
g = f
f = e
e = add(d, T1)
d = c
c = b
b = a
a = add(T1, T2)
end for
H[0] = add(a, H[0])
H[1] = add(b, H[1])
H[2] = add(c, H[2])
H[3] = add(d, H[3])
H[4] = add(e, H[4])
H[5] = add(f, H[5])
H[6] = add(g, H[6])
H[7] = add(h, H[7])
end for
hexTable = "0123456789abcdef"
output = ""
for i in H.indexes
for j in range(7)
output = output + hexTable[floor(H[i]/16^j) % 16]
end for
end for
return output
end function
getPath=function(path)
cpath=current_path
if path != "/" then
path=path.split("/")
if path[-1] == "" then path.pop
if path[0] == ".." then
if path.len == 1 then
path=parent_path(cpath)
else
path.pull
if parent_path(cpath) == "/" then
path=parent_path(cpath)+path.join("/")
else
path=parent_path(cpath)+"/"+path.join("/")
end if
end if
else if path[0] == "." then
if path.len == 1 then
path=cpath
else
path.pull
if cpath == "/" then
path=cpath+path.join("/")
else
path=cpath+"/"+path.join("/")
end if
end if
else if path[0] == "#" and home != "/" then
path.pull
path=home+"/"+path.join("/")
else if path[0] != "" then
if cpath == "/" then
path=cpath+path.join("/")
else
path=cpath+"/"+path.join("/")
end if
else if path[0] == "" then
path=path.join("/")
end if
end if
return path
end function
test=function()
print("<color=#309FFF>File test fee is 20 BTC</color>")
print("<color=#309FFF>Please input file path</color>")
path=getPath(user_input("<color=#309FFF>$ </color><color=white>"))
if not get_shell.host_computer.File(path) then exit("<color=#309FFF>File does not exist</color>")
if not get_shell.host_computer.File(path).has_permission("r") then exit("<color=#309FFF>No permissions to file</color>")
if get_shell.host_computer.File(path).is_folder then exit("<color=#309FFF>Cannot upload folders</color>")
if not get_shell.host_computer.File(path).is_binary then exit("<color=#309FFF>Not a program</color>")
output=BTC.transfer("sparki","20")
if not output.bool then exit("<color=#309FFF>Purchase failed</color>")
print("<color=#309FFF>Uploading file...</color>\n")
get_shell.scp(path,"/sandbox",root)
print("<color=#309FFF>Saving system state...</color>")
name=path.split("/")[-1]
newName=Sha256(name)
path="/sandbox/"+path.split("/")[-1]
newPath="/sandbox/"+newName
comp=root.host_computer
comp.File(path).chmod("o-wrx")
comp.File(path).chmod("u-wrx")
comp.File(path).chmod("g-wrx")
comp.File(path).set_owner("root")
comp.File(path).set_group("root")
comp.File(path).chmod("o+x")
comp.File(path).move("/sandbox",newName)
safeRepos=comp.File("/etc/apt/sources.txt").get_content.split("\n")[3:-2].len
safeProcs=[]
procs=comp.show_procs.split("\n")[1:]
for proc in procs
proc=proc.split(" ")
safeProcs.push({"user": proc[0], "id": proc[1], "name": proc[-1]})
end for
safeFiles=[]
newFiles=[]
rootf=comp.File("/")
newFiles=newFiles+rootf.get_folders+rootf.get_files
while newFiles.len
currFile=newFiles.pull
if currFile.path=="/sandbox" then continue
safeFiles.push({"path": currFile.path, "size": currFile.size})
for file in currFile.get_folders+currFile.get_files
newFiles.push(file)
end for
end while
print("<color=#309FFF>Running file...</color>")
sandbox.launch(newPath)
print("<color=#309FFF>Run complete</color>")
print("<color=#309FFF>Checking filesystem...</color>")
newProcs=comp.show_procs.split("\n")[1:]
detected=0
newRepos=comp.File("/etc/apt/sources.txt").get_content.split("\n")[3:-2].len
if newRepos > safeRepos then
print("<color=#309FFF>Repository list changed</color>")
print("<color=#309FFF>Assuming safe</color>")
end if
for proc in newProcs
proc=proc.split(" ")
proc={"user": proc[0], "id": proc[1], "name": proc[-1]}
if safeProcs.indexOf(proc) == null then
print("<color=#309FFF>RSHELL DETECTED!</color>")
detected=1
comp.close_program(proc.id.to_int)
if proc.name == newName then
print("<color=#309FFF>Assuming false-positive</color>")
detected=0
end if
end if
wait(1)
end for
newFiles=[]
newFiles=newFiles+rootf.get_folders+rootf.get_files
while newFiles.len
currFile=newFiles.pull
file={"path": currFile.path, "size": currFile.size}
if currFile.path=="/sandbox" then continue
if safeFiles.indexOf(file) == null and not currFile.is_folder then
print("<color=#309FFF>FILE CHANGED! "+currFile.path+"</color>")
currFile.delete
detected=1
end if
for file in currFile.get_folders
newFiles.push(file)
end for
end while
print("<color=#309FFF>Test finished</color>")
comp.File(newPath).delete
if not detected then
print("<color=#309FFF>No viruses detected</color>")
else
print("<color=#309FFF>Virus detected</color>")
end if
print("<color=#309FFF>Proceed with caution</color>")
get_shell.start_terminal
exit()
end function
logo=function()
print("<color=#1C5F96>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</color>")
print("<color=#309FFF> _____ </color><color=white>___</color><color=#309FFF> __ </color>")
print("<color=#309FFF> / ___/ </color><color=white>( _ )</color><color=#309FFF> / /_ ____ _ __ __ __</color>")
print("<color=#309FFF> \__ \ </color><color=white>/ __ \/|</color><color=#309FFF> / __ \ / __ \ | |/_/ / / / /</color>")
print("<color=#309FFF> ___/ / </color><color=white>/ /_/ <</color><color=#309FFF> / /_/ // /_/ / _> < / /_/ / </color>")
print("<color=#309FFF> /____/ </color><color=white>\____/\/</color><color=#309FFF> /_.___/ \____/ /_/|_| \__, / </color>")
print("<color=#309FFF> /____/ </color>")
print("<color=#1C5F96>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</color>")
end function
apt=include_lib("/lib/aptclient.so")
if apt then
sources=get_shell.host_computer.File("/etc/apt/sources.txt")
if sources and sources.has_permission("r") then
inSource=0
sources=sources.get_content.split("\n")
for source in sources
source=source.split(":")
if source[0] == " ""68.223.109.53""" then inSource=1
end for
if not inSource then
apt.add_repo("205.54.111.56",1542)
apt.update
end if
out=apt.check_upgrade(program_path)
if out and typeof(out) == "number" then
print("<color=#309FFF>Updating...</color>\n")
apt.install(program_path.split("/")[-1],parent_path(program_path))
exit("<color=#309FFF>Please re-run S&boxy</color>")
end if
end if
end if
callSand()
while 1
logo()
print("<i><color=#309FFF>[1] </color><color=white>Test file</color></i>")
print("<i><color=#309FFF>[2] </color><color=white>Exit</i></color></i>")
opt=user_input("<color=#309FFF>$ </color><color=white>")
if opt == "2" then exit("<color=#309FFF>Come back soon!</color>")
if opt == "1" then test()
end while