From 4068de1e39751af0285006892860cff42dd6483c Mon Sep 17 00:00:00 2001 From: Mizzajl Date: Sun, 6 Oct 2024 13:25:54 +0200 Subject: [PATCH] fixin and cleaning up some files --- Mizzajl/home/CrackAndRootAll.js | 8 + Mizzajl/home/EveryServerRun.js | 2 +- Mizzajl/home/Library.js | 243 ++++++++++++++++++ Mizzajl/home/Serverlist.js | 19 ++ Mizzajl/home/autoexec.js | 11 +- Mizzajl/home/{ => backup}/myLibrary.js | 0 Mizzajl/home/{ => backup}/serverlister.js | 0 Mizzajl/home/{ => backup}/upgrade.js | 0 Mizzajl/home/batch.js | 2 +- .../home/{killallall.js => killAllScripts.js} | 2 +- Mizzajl/home/purchaseServers.js | 5 + Mizzajl/home/push.txt | 1 - Mizzajl/home/scanFactionAugments.js | 24 -- Mizzajl/home/settings.txt | 4 +- Mizzajl/home/{ => wip}/progress.js | 0 15 files changed, 286 insertions(+), 35 deletions(-) create mode 100644 Mizzajl/home/CrackAndRootAll.js create mode 100644 Mizzajl/home/Library.js create mode 100644 Mizzajl/home/Serverlist.js rename Mizzajl/home/{ => backup}/myLibrary.js (100%) rename Mizzajl/home/{ => backup}/serverlister.js (100%) rename Mizzajl/home/{ => backup}/upgrade.js (100%) rename Mizzajl/home/{killallall.js => killAllScripts.js} (99%) create mode 100644 Mizzajl/home/purchaseServers.js delete mode 100644 Mizzajl/home/push.txt delete mode 100644 Mizzajl/home/scanFactionAugments.js rename Mizzajl/home/{ => wip}/progress.js (100%) diff --git a/Mizzajl/home/CrackAndRootAll.js b/Mizzajl/home/CrackAndRootAll.js new file mode 100644 index 0000000..0636f06 --- /dev/null +++ b/Mizzajl/home/CrackAndRootAll.js @@ -0,0 +1,8 @@ + +import { getCracks, scanServerList, findBestTarget, crackingAndRooting, copyAndRunScript } from "/Library.js"; +/** @param {NS} ns */ +export async function main(ns) { + let cracks = {}; + cracks = getCracks(ns); + crackingAndRooting(ns, cracks, "", false); +} \ No newline at end of file diff --git a/Mizzajl/home/EveryServerRun.js b/Mizzajl/home/EveryServerRun.js index 2b40576..396912b 100644 --- a/Mizzajl/home/EveryServerRun.js +++ b/Mizzajl/home/EveryServerRun.js @@ -1,4 +1,4 @@ -import { getGrowThreads, getSetting } from "myLibrary.js"; +import { getGrowThreads, getSetting } from "Library.js"; /** @param {NS} ns */ export async function main(ns) { diff --git a/Mizzajl/home/Library.js b/Mizzajl/home/Library.js new file mode 100644 index 0000000..8e068c8 --- /dev/null +++ b/Mizzajl/home/Library.js @@ -0,0 +1,243 @@ +/** @param {NS} ns */ +export async function main(ns) { + ns.tprint("This is just a function library, it doesn't do anything."); +} + +// Custom color coding. +const cCyan = "\u001b[36m"; +const cGreen = "\u001b[32m"; +const cRed = "\u001b[31m"; +const cReset = "\u001b[0m"; + +/** @param {NS} ns */ +export function getCracks(ns) { + let cracks = {}; + if (ns.fileExists("BruteSSH.exe", "home")) { + cracks["BruteSSH.exe"] = ns.brutessh; + }; + if (ns.fileExists("FTPCrack.exe", "home")) { + cracks["FTPCrack.exe"] = ns.ftpcrack; + }; + if (ns.fileExists("relaySMTP.exe", "home")) { + cracks["relaySMTP.exe"] = ns.relaysmtp; + }; + if (ns.fileExists("HTTPWorm.exe", "home")) { + cracks["HTTPWorm.exe"] = ns.httpworm; + }; + if (ns.fileExists("SQLInject.exe", "home")) { + cracks["SQLInject.exe"] = ns.sqlinject; + }; + return cracks; +} + +/** @param {NS} ns */ +export function scanServerList(ns) { + const home = "home"; + let serverList = {}; + let unscanned = []; + + unscanned.push(home); + while (unscanned.length > 0) { + let currentServer = unscanned.pop(); + if (!serverList[currentServer]) { + let maxRam = ns.getServerMaxRam(currentServer); + let minPorts = ns.getServerNumPortsRequired(currentServer); + let minSecLevel = ns.getServerMinSecurityLevel(currentServer); + let minHackLevel = ns.getServerRequiredHackingLevel(currentServer); + let rootAccess = ns.hasRootAccess(currentServer); + let serverMoney = ns.getServerMaxMoney(currentServer); + let serverFiles = ns.ls(currentServer); + let serverStats = ns.getServer(currentServer); + let serverOrgs = serverStats.organizationName; + let serverCores = serverStats.cpuCores; + + serverList[currentServer] = + { + serverName: currentServer, + maxRam: maxRam, + maxMoney: serverMoney, + minSec: minSecLevel, + minPorts: minPorts, + minHackLvl: minHackLevel, + rootAccess: rootAccess, + openPorts: 0, + serverOrgs: serverOrgs, + serverCores: serverCores, + serverFiles: serverFiles, + }; + let neighbours = ns.scan(currentServer); + for (let i = 0; i < neighbours.length; i++) { + let neighbour = neighbours[i]; + if (serverList[neighbour]) { + continue + } + unscanned.push(neighbour); + } + } + } + ns.write("serverList.txt", JSON.stringify(serverList), "w"); +} + +/** @param {NS} ns */ +export function findBestTarget(ns, maxSec, maxPorts, currentHackLevel, manualTargetOverride) { + if (!ns.fileExists("serverList.txt", "home")) scanServerList(); + let serverList = JSON.parse(ns.read("serverList.txt")); + let bestEntry = ""; + if (manualTargetOverride.length > 0) { + bestEntry = manualTargetOverride; + } else { + bestEntry = null; + let nMaxMoneyPerChance = 0; + let nBestMoneyPerChance = 0; + for (const [name, entry] of Object.entries(serverList)) { + if (entry.minSec <= maxSec && entry.minPorts <= maxPorts && entry.minHackLvl < currentHackLevel) { + nMaxMoneyPerChance = (entry.maxMoney * ns.hackAnalyzeChance(name)) / entry.minSec; + if (nMaxMoneyPerChance > nBestMoneyPerChance) { + nBestMoneyPerChance = nMaxMoneyPerChance; + bestEntry = name; + } + } + } + } + ns.write("bestTarget.txt", JSON.stringify(serverList[bestEntry]), "w"); +} + + +/** @param {NS} ns */ +export function crackingAndRooting(ns, cracks) { + if (!ns.fileExists("serverList.txt", "home")) scanServerList(); + let serverList = JSON.parse(ns.read("serverList.txt")); + for (const [name, entry] of Object.entries(serverList)) { + let cracked = false; + let openPorts = serverList[name].openPorts || 0; + if (entry.minPorts === 0 || (entry.minPorts > openPorts && entry.minPorts <= Object.keys(cracks).length)) { + for (let k = 0; k < entry.minPorts; k++) { + cracks[Object.keys(cracks)[k]](name); + serverList[name].openPorts = k; + } + cracked = true; + } + if (!ns.hasRootAccess(name) && cracked === true) { + ns.nuke(name); + if (ns.hasRootAccess(name)) { + serverList[name].rootAccess = true; + } + } + ns.write("serverList.txt", JSON.stringify(serverList), "w"); + } + ns.tprint("Cracking and rooting done"); +} + + +/** @param {NS} ns */ +export function copyAndRunScript(ns, funnyScript, currentServer) { + let bestTarget = JSON.parse(ns.read("bestTarget.txt")); + let name = currentServer; + let serverList = JSON.parse(ns.read("serverList.txt")); + ns.print(name); + if (serverList[name].rootAccess === true && serverList[bestTarget.serverName].rootAccess === true) { + if (name !== "home") { + ns.print("killed threads on: " + name + ns.killall(name, true)); + } else { + ns.print("killed threads on: " + name + ns.scriptKill(funnyScript[0], name)); + }; + if (serverList[name].maxRam > 0) { + ns.scp(funnyScript, name, "home"); + let maxProcesses = 1; + if (serverList[name].maxRam >= 8) { + maxProcesses = Math.max(Math.floor((serverList[name].maxRam) / 8), 1); + } else { + maxProcesses = 1 + }; + for (let n = 1; n <= maxProcesses; n++) { + ns.exec(funnyScript[0], name, 1, bestTarget.serverName); + } + } + } +} + +/** @param {NS} ns */ +export async function purchaseAndUpgradeServers(ns) { + ns.disableLog("sleep"); + ns.disableLog("getServerMoneyAvailable"); + ns.disableLog("getServerMaxRam"); + let maxPurchasedServers = ns.getPurchasedServerLimit(); + let purchasedServers = []; + let count = listPurchasedServers(ns).length; + let currentMoney = 0; + let serverList = {}; + while (count < maxPurchasedServers) { + purchasedServers = listPurchasedServers(ns); + currentMoney = ns.getServerMoneyAvailable("home"); + let targetRamInitial = 16; + if (ns.getPurchasedServerCost(targetRamInitial) < currentMoney) { + let sFrontZero = "0"; + if (nServers >= 9) { + sFrontZero = ""; + } + let hostname = ns.purchaseServer("pserv-" + sFrontZero + (aServers.length), targetRamInitial); + ns.tprint("Purchased " + cCyan + hostname + cReset); + ns.toast("Purchased " + hostname, "info", 10000); + count = listPurchasedServers(ns).length; + serverList = JSON.parse(ns.read("serverList.txt")); + serverList[hostname] = { + serverName: hostname, + maxRam: 16, + maxMoney: 0, + minSec: 0, + minPorts: 5, + minHackLvl: 1, + rootAccess: true, + openPorts: 0, + }; + ns.write("serverList.txt", JSON.stringify(serverList), "w"); + continue + } else { + await ns.sleep(5000); + } + } + let i = 5; + while (i < 21) { + let targetRam = 2 ** i; + purchasedServers = listPurchasedServers(ns); + for (let currentServer of purchasedServers) { + currentMoney = ns.getServerMoneyAvailable("home"); + if (ns.getServerMaxRam(currentServer) < targetRam && ns.getPurchasedServerUpgradeCost(currentServer, targetRam) < currentMoney) { + if (ns.upgradePurchasedServer(currentServer, targetRam)) { + ns.print(currentServer + " upgraded to " + targetRam + " GB RAM"); + serverList = JSON.parse(ns.read("serverList.txt")); + serverList[currentServer].maxRam = targetRam; + ns.write("serverList.txt", JSON.stringify(serverList), "w"); + ns.tprint(cCyan + "Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB" + cReset); + ns.toast("Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB", "info", 10000); + } + } else { + await ns.sleep(5000); + continue + }; + } + ++i; + } + ns.tprint("Extiting purchaseServers script!") +} + +/** @param {NS} ns */ +export function listPurchasedServers(ns) { + return ns.getPurchasedServers(); +} + +/** @param {NS} ns */ +export function getSetting(ns, sSetting) { + let oSettings = JSON.parse(ns.read("settings.txt")); + let settingEntry = oSettings.setting[sSetting]; + //ns.tprint(oSettings.setting[sSetting]) + //ns.tprint("settingEntry = "+settingEntry); + return settingEntry; +} + +/** @param {NS} ns */ +export function getGrowThreads(ns, sTarget, nHackThreads, nCores) { + let nHackAmountPercent = ns.hackAnalyze(sTarget) * nHackThreads; + let nGrowthThreads = ns.growthAnalyze(sTarget, 1 + nHackAmountPercent, nCores); + return nGrowthThreads; +} diff --git a/Mizzajl/home/Serverlist.js b/Mizzajl/home/Serverlist.js new file mode 100644 index 0000000..29237fd --- /dev/null +++ b/Mizzajl/home/Serverlist.js @@ -0,0 +1,19 @@ +import { getCracks, scanServerList, findBestTarget, crackingAndRooting } from "/Library.js"; + +/** @param {NS} ns */ +export async function main(ns) { + let cracks = {}; + cracks = getCracks(ns); + let maxPorts = Object.keys(cracks).length; + scanServerList(ns); + let manualTargetOverride = ""; + if (ns.getHackingLevel() < 200) { + manualTargetOverride = "n00dles"; + }; + findBestTarget(ns, 999, maxPorts, ns.getHackingLevel(), manualTargetOverride); + let bestTarget = ns.read("bestTarget.txt") + ns.tprint("Best Target: " + bestTarget); + ns.tprint(Object.keys(JSON.parse(ns.read("serverList.txt"))).length); + crackingAndRooting(ns, cracks); +} + diff --git a/Mizzajl/home/autoexec.js b/Mizzajl/home/autoexec.js index 3e6dd64..1971fad 100644 --- a/Mizzajl/home/autoexec.js +++ b/Mizzajl/home/autoexec.js @@ -1,5 +1,5 @@ -import { purchaseServers, listPurchasedServers, getSetting } from "myLibrary.js"; +import { purchaseAndUpgradeServers, listPurchasedServers, getSetting } from "Library.js"; /** @param {NS} ns */ @@ -23,7 +23,7 @@ export async function main(ns) { //scripts const sGangScript = "gang/auto-gang2.js"; - const sServerLister = "serverlister.js"; + const sServerLister = "Serverlist.js"; const sServerListFile = "serverList.txt"; const sBestServerFile = "bestTarget.txt"; const sBackdoorScript = "backdoor.js"; @@ -196,14 +196,15 @@ export async function main(ns) { } else if (getSetting(ns, "autoPurchaseServers") && nPServs < 25 && nMoney >= 5e+6) { //Purchased Servers ns.tprint("purchasing servers "); - await purchaseServers(ns); + //await purchaseServers(ns); + purchaseAndUpgradeServers(ns); ns.exec(sServerLister, sThisRunner, 1, false, true); } - else if (getSetting(ns, "autoUpgrades") && nLowestRAM < (2 ** 20) && !ns.scriptRunning("upgrade.js", sThisRunner) && nPServs >= 25 && nMoney >= 1e+6) { + /*else if (getSetting(ns, "autoUpgrades") && nLowestRAM < (2 ** 20) && !ns.scriptRunning("upgrade.js", sThisRunner) && nPServs >= 25 && nMoney >= 1e+6) { ns.tprint("upgrading servers "); ns.exec("upgrade.js", sThisRunner, 1); - } + }*/ //ns.tprint("autoPurchaseServers = " + getSetting(ns, "autoPurchaseServers")); //ns.tprint("autoUpgrades = " + getSetting(ns, "autoUpgrades")); diff --git a/Mizzajl/home/myLibrary.js b/Mizzajl/home/backup/myLibrary.js similarity index 100% rename from Mizzajl/home/myLibrary.js rename to Mizzajl/home/backup/myLibrary.js diff --git a/Mizzajl/home/serverlister.js b/Mizzajl/home/backup/serverlister.js similarity index 100% rename from Mizzajl/home/serverlister.js rename to Mizzajl/home/backup/serverlister.js diff --git a/Mizzajl/home/upgrade.js b/Mizzajl/home/backup/upgrade.js similarity index 100% rename from Mizzajl/home/upgrade.js rename to Mizzajl/home/backup/upgrade.js diff --git a/Mizzajl/home/batch.js b/Mizzajl/home/batch.js index 980385c..6c574d2 100644 --- a/Mizzajl/home/batch.js +++ b/Mizzajl/home/batch.js @@ -1,4 +1,4 @@ -import { getGrowThreads, getSetting } from "myLibrary.js"; +import { getGrowThreads, getSetting } from "Library.js"; /** @param {NS} ns */ export async function main(ns) { diff --git a/Mizzajl/home/killallall.js b/Mizzajl/home/killAllScripts.js similarity index 99% rename from Mizzajl/home/killallall.js rename to Mizzajl/home/killAllScripts.js index 601ae5b..cc54271 100644 --- a/Mizzajl/home/killallall.js +++ b/Mizzajl/home/killAllScripts.js @@ -5,4 +5,4 @@ export async function main(ns) { ns.killall(name, true) } -} \ No newline at end of file +} diff --git a/Mizzajl/home/purchaseServers.js b/Mizzajl/home/purchaseServers.js new file mode 100644 index 0000000..e79b9cb --- /dev/null +++ b/Mizzajl/home/purchaseServers.js @@ -0,0 +1,5 @@ +import { getCracks, scanServerList, findBestTarget, crackingAndRooting, copyAndRunScript, purchaseAndUpgradeServers } from "/RamsesUtils.js"; +/** @param {NS} ns */ +export async function main(ns) { + await purchaseAndUpgradeServers(ns); +} \ No newline at end of file diff --git a/Mizzajl/home/push.txt b/Mizzajl/home/push.txt deleted file mode 100644 index 1050001..0000000 --- a/Mizzajl/home/push.txt +++ /dev/null @@ -1 +0,0 @@ -asd \ No newline at end of file diff --git a/Mizzajl/home/scanFactionAugments.js b/Mizzajl/home/scanFactionAugments.js deleted file mode 100644 index ebbc94a..0000000 --- a/Mizzajl/home/scanFactionAugments.js +++ /dev/null @@ -1,24 +0,0 @@ -/** @param {NS} ns */ -export async function main(ns) { - - let aFactions = ns.getPlayer().factions; - ns.tprint("aFactions = " + aFactions); - let aAugmentations; - let sStats; - - for (let f = 0; f < aFactions.length; f++) { - //ns.tprint("f = " + f); - //sFaction = ns.singularity.faction - aAugmentations = ns.singularity.getAugmentationsFromFaction(aFactions[f]); - ns.tprint("aAugmentations = " + aAugmentations); - ns.tprint("----------------------------------------------------------------------------------------------------------------------------------------------------------"); - for (let a = 0; a < aFactions.length; a++) { - sStats = JSON.stringify(ns.singularity.getAugmentationStats(aAugmentations[a])); - ns.tprint(aAugmentations[f] + "sStats = " + sStats); - ns.tprint("----------------------------------------------------------------------------------------------------------------------------------------------------------"); - } - - } - - -} \ No newline at end of file diff --git a/Mizzajl/home/settings.txt b/Mizzajl/home/settings.txt index 7e0d1f8..556fcff 100644 --- a/Mizzajl/home/settings.txt +++ b/Mizzajl/home/settings.txt @@ -1,6 +1,6 @@ {"setting":{ "autoUpgrades":true, "autoPurchaseServers":true, -"batchHacks":50, -"batchFrequency":1000 +"batchHacks":100, +"batchFrequency":50 }} \ No newline at end of file diff --git a/Mizzajl/home/progress.js b/Mizzajl/home/wip/progress.js similarity index 100% rename from Mizzajl/home/progress.js rename to Mizzajl/home/wip/progress.js