diff options
Diffstat (limited to 'start/root.js')
-rw-r--r-- | start/root.js | 358 |
1 files changed, 358 insertions, 0 deletions
diff --git a/start/root.js b/start/root.js new file mode 100644 index 0000000..d04449e --- /dev/null +++ b/start/root.js @@ -0,0 +1,358 @@ +const HOME = "home"; + +/** @param {NS} ns */ +export async function main(ns) { + let target = "home"; + let thread = 1; + const scriptRam = 2.4; + + // Determine whether or not to enable logging + let debug = ns.args[0]; + ns.disableLog("ALL"); + + // What percentage of our hacking level should a server be before using it + let lvlpercent = ns.args[1]; + + // List of targets for each level of exe function + const targets = [ + "deltaone", + "global-pharm", + "rho-construction", + "the-hub", + "iron-gym", + "harakiri-sushi" + ]; + + // List of exe functions + const exes = [ + "SQLInject.exe", + "HTTPWorm.exe", + "RelaySMTP.exe", + "FTPCrack.exe", + "BruteSSH.exe", + "NUKE.exe" + ]; + + // Array of all purchased servers + // Varying RAM sizes + const pservers = [ + "pserv-0", + "pserv-1", + "pserv-2", + "pserv-3", + "pserv-4", + "pserv-5", + "pserv-6", + "pserv-7", + "pserv-8", + "pserv-9", + "pserv-10", + "pserv-11", + "pserv-12", + "pserv-13", + "pserv-14", + "pserv-15", + "pserv-16", + "pserv-17", + "pserv-18", + "pserv-19", + "pserv-20", + "pserv-21", + "pserv-22", + "pserv-23", + ]; + + + // Array of all servers that don't need any ports opened + // to gain root access. These have GB of RAM + const servers0Port = [ + "n00dles", + "foodnstuff", + "sigma-cosmetics", + "joesguns", + "nectar-net", + "hong-fang-tea", + "harakiri-sushi" + ]; + + + // Array of all servers that only need 1 port opened + // to gain root access. These have 32 GB of RAM + const servers1Port = [ + "neo-net", + "zer0", + "max-hardware", + "iron-gym", + "CSEC" + ]; + + + // 2 port servers + const servers2Port = [ + "omega-net", + "silver-helix", + "phantasy", + "johnson-ortho", + "crush-fitness", + "the-hub", + "avmnite-02h" + ]; + + // 3 port servers + const servers3Port = [ + "netlink", + "computek", + "I.I.I.I", + "summit-uni", + "catalyst", + "rothman-uni", + "millenium-fitness", + "rho-construction" + ]; + + const servers4Port = [ + "aevum-police", + "global-pharm", + "syscore", + "lexo-corp", + "unitalife", + "snap-fitness", + "alpha-ent", + "univ-energy", + "nova-med", + "zb-def" + ]; + + // 5 port servers + const servers5Port = [ + "zb-institute", + "galactic-cyber", + "aerocorp", + "omnia", + "deltaone", + "taiyang-digital", + "icarus", + "zeus-med", + "infocomm", + "solaris", + "defcomm" + ]; + + // //decide the target + // // Cycle through each .exe file for a match + // for (let i = 0; i < exes.length; i++) { + // // if the file doens't exist yet, look at the next file + // if (ns.fileExists(exes[i]) && (ns.getServerRequiredHackingLevel(targets[i]) <= (ns.getHackingLevel() * lvlpercent))) { + // // the file exists, so the target is now the best target of that file + // target = targets[i]; + // break; + // } + // } + // // List the target in the logs + // ns.print("target: ", target); + // root(ns, target); + + // // Hack from the home server + // if (ns.serverExists("home")) { + // const serv = "home"; + // ns.print("Hacking using: ", serv); + // thread = threads(ns, serv, scriptRam, thread); + // if (thread > 0) { + // hax(ns, serv, target, thread, true); + // } + // } + + // // DEBUGGING: uncomment the following line to find logs for the above code + // if (debug) { + // await ns.sleep(60000); + // } + // // Copy our scripts onto each server that requires 0 ports + // // to gain root access. Then use nuke() to gain admin access and + // // run the scripts. + // for (let i = 0; i < servers0Port.length; ++i) { + // const serv = servers0Port[i]; + // ns.print("Hacking using: ", serv); + // root(ns, serv); + // thread = threads(ns, serv, scriptRam, thread); + // if (thread > 0) { + // hax(ns, serv, target, thread, debug); + // } + // } + + // // Wait until we acquire the "BruteSSH.exe" program + // if (!ns.fileExists("BruteSSH.exe")) { + // ns.print("Waiting for BruteSSH.exe"); + // ns.exit(); + // } + + // // Copy our scripts onto each server that requires 1 port + // // to gain root access. Then use brutessh() and nuke() + // // to gain admin access and run the scripts. + // for (let i = 0; i < servers1Port.length; ++i) { + // const serv = servers1Port[i]; + + // ns.print("Hacking using: ", serv); + // root(ns, serv); + // thread = threads(ns, serv, scriptRam, thread); + // if (thread > 0) { + // hax(ns, serv, target, thread, debug); + // } + // } + + // // Wait until we acquire the "BruteSSH.exe" program + // while (!ns.fileExists("FTPCrack.exe")) { + // ns.print("Waiting for FTPCrack"); + // ns.exit(); + // } + + // // Copy our scripts onto each server that requires 1 port + // // to gain root access. Then use brutessh() and nuke() + // // to gain admin access and run the scripts. + // for (let i = 0; i < servers2Port.length; ++i) { + // const serv = servers2Port[i]; + + // ns.print("Hacking using: ", serv); + // root(ns, serv); + // thread = threads(ns, serv, scriptRam, thread); + // if (thread > 0) { + // hax(ns, serv, target, thread, debug); + // } + // } + + + // //Run hack scripts from purchased servers + // for (let i = 0; i < pservers.length; ++i) { + // while (!ns.serverExists(pservers[i])) { + // ns.print("Server ", pservers[i], " doesn't exist yet"); + // await ns.sleep(60000); + // } + // const serv = pservers[i]; + + // ns.print("Hacking using: ", serv); + // thread = threads(ns, serv, scriptRam, thread); + // if (thread > 0) { + // hax(ns, serv, target, thread, debug); + // } + // } + + // while (!ns.fileExists("RelaySMTP.exe")) { + // ns.print("Waiting for RelaySMTP"); + // ns.exit(); + // } + + // for (let i = 0; i < servers3Port.length; ++i) { + // const serv = servers3Port[i]; + + // ns.print("Hacking using: ", serv); + // root(ns, serv); + // thread = threads(ns, serv, scriptRam, thread); + // if (thread > 0) { + // hax(ns, serv, target, thread, debug); + // } + // } + + const servers = [ + servers0Port, + servers1Port, + servers2Port, + servers3Port, + servers4Port, + servers5Port, + ]; + + let hacked = []; + + ns.clearLog(); + ns.tail(); + ns.moveTail(0,0); + ns.resizeTail(1350, 600); + ns.print("DONT DO ANYTHING DONT DO ANYTHING DONT DO ANYTHING DONT DO ANYTHING \n\n\n\n\n\n\n\n\n\n\n\n"); + await ns.sleep(1000); + + for (let i = 0; i < servers.length; i++) { + for (let j = 0; j < servers[i].length; j++) { + if (!ns.hasRootAccess(servers[i][j])) { + ns.brutessh(servers[i][j]); + ns.ftpcrack(servers[i][j]); + ns.relaysmtp(servers[i][j]); + ns.httpworm(servers[i][j]); + ns.sqlinject(servers[i][j]); + while (ns.getHackingLevel() < ns.getServerRequiredHackingLevel(servers[i][j])) { + await ns.sleep(6000); + } + ns.nuke(servers[i][j]); + ns.print("Gained root access to ", servers[i][j]); + } + if (!ns.getServer(servers[i][j]).backdoorInstalled) { + ns.singularity.connect(HOME); + await ns.sleep(100); + + let result = []; + let route = []; + + buildRoute(ns, HOME, servers[i][j], route) + result = await printRoute(ns, route); + + for (let n = 0; n < result.length; n++) { + ns.singularity.connect(result[n]); + await ns.sleep(100); + } + await ns.singularity.installBackdoor(); + ns.singularity.connect(HOME); + } + hacked.push(servers[i][j]); + } + } + + await ns.sleep(1000); + ns.clearLog(); + ns.moveTail(500, 300); + ns.resizeTail(300, 100); + ns.print("Backdoors installed"); + + + +} + +function buildRoute(ns, parent, target, route, seen = []) { + //first time we run we need to add the parent to the list of servers we've seen + if (!seen.includes(parent)) { + seen.push(parent); + } + //add to route + route.push(parent); + const children = ns.scan(parent); + for (const child of children) { + if (seen.includes(child)) { + //already checked + continue; + } + seen.push(child); + if (child == target) { + //found target, add it to the route and finish recursion + route.push(child); + return true; + } + if (buildRoute(ns, child, target, route, seen)) { + //target found, finish recursion + return true; + } + else { + //target not found in this branch, remove from route + route.pop(); + } + } + //didn't find target in this route, reset route + route = []; + return false; +} +async function printRoute(ns, route) { + let result = []; + for (const node of route) { + result.push(node); + } + return result; +} +function root(ns, target) { + +} |