summaryrefslogtreecommitdiff
path: root/start/milestones.js
diff options
context:
space:
mode:
Diffstat (limited to 'start/milestones.js')
-rw-r--r--start/milestones.js133
1 files changed, 133 insertions, 0 deletions
diff --git a/start/milestones.js b/start/milestones.js
new file mode 100644
index 0000000..856900a
--- /dev/null
+++ b/start/milestones.js
@@ -0,0 +1,133 @@
+const HOME = "home";
+
+// You have to run this script once per target
+
+let hacked = [];
+
+/** @param {NS} ns */
+export async function main(ns) {
+
+ ns.tail();
+ ns.moveTail(1650, 725);
+ ns.resizeTail(250, 100);
+
+ ns.disableLog("disableLog");
+ ns.disableLog("clearLog");
+ ns.disableLog("sleep");
+ ns.disableLog("scan");
+ ns.clearLog();
+
+ const targets = [
+ "CSEC",
+ "avmnite-02h",
+ "I.I.I.I",
+ "run4theh111z"//,
+ // "w0r1d_d43m0n"
+ ];
+
+ while (!ns.fileExists("SQLInject.exe")) {
+ await ns.sleep(12000);
+ }
+ for (let i = 0; i < targets.length; i++) {
+ if (targets[i] == "w0rld_d43m0n") {
+ while (!ns.singularity.getOwnedAugmentations().includes("The Red Pill")) {
+ ns.clearLog();
+ ns.print("Waiting for red pill");
+ await ns.sleep(60000);
+ }
+ }
+ await root(ns, targets[i]);
+ }
+}
+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;
+}
+async function root(ns, target) {
+ if (!ns.hasRootAccess(target)) {
+ ns.brutessh(target);
+ ns.ftpcrack(target);
+ ns.relaysmtp(target);
+ ns.httpworm(target);
+ ns.sqlinject(target);
+ ns.print("Gained root access to ", target);
+ while (ns.getHackingLevel() < ns.getServerRequiredHackingLevel(target)) {
+ await ns.sleep(6000);
+ }
+ ns.nuke(target);
+
+ ns.singularity.connect(HOME);
+ await ns.sleep(100);
+
+ let result = [];
+ let route = [];
+
+ buildRoute(ns, HOME, target, 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);
+ } else if (!ns.getServer(target).backdoorInstalled) {
+ ns.singularity.connect(HOME);
+ await ns.sleep(100);
+
+ let result = [];
+ let route = [];
+
+ buildRoute(ns, HOME, target, 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(target);
+ ns.clearLog();
+ ns.print("Hacked servers: ", )
+ for (let j = 0; j < hacked.length; j++) {
+ ns.print(hacked[j]);
+ }
+ return 0;
+} \ No newline at end of file