summaryrefslogtreecommitdiff
path: root/start/root.js
diff options
context:
space:
mode:
Diffstat (limited to 'start/root.js')
-rw-r--r--start/root.js358
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) {
+
+}