/** @param {NS} ns */ function brutessh(ns, node) { if(ns.fileExists("brutessh.exe", "home")) { ns.brutessh(node); return true; } else { return false; } } /** @param {NS} ns */ function ftpcrack(ns, node) { if(ns.fileExists("ftpcrack.exe", "home")) { ns.ftpcrack(node); return true; } else { return false; } } /** @param {NS} ns */ function relaysmtp(ns, node) { if(ns.fileExists("relaysmtp.exe", "home")) { ns.relaysmtp(node); return true; } else { return false; } } /** @param {NS} ns */ function httpworm(ns, node) { if(ns.fileExists("httpworm.exe", "home")) { ns.httpworm(node); return true; } else { return false; } } /** @param {NS} ns */ function sqlinject(ns, node) { if(ns.fileExists("sqlinject.exe", "home")) { ns.sqlinject(node); return true; } else { return false; } } /** @param {NS} ns */ export async function crack(ns, node) { let numPorts = ns.getServerNumPortsRequired(node); if(numPorts != 0) { switch(numPorts) { case 1: if(brutessh(ns, node)) { ns.nuke(node); return true; } else return false; case 2: if( brutessh(ns, node) && ftpcrack(ns, node) ) { ns.nuke(node); return true; } else return false; case 3: if( brutessh(ns, node) && ftpcrack(ns, node) && relaysmtp(ns, node) ) { ns.nuke(node); return true; } else return false; case 4: if( brutessh(ns, node) && ftpcrack(ns, node) && relaysmtp(ns, node) && httpworm(ns, node) ) { ns.nuke(node); return true; } else return false; case 5: if( brutessh(ns, node) && ftpcrack(ns, node) && relaysmtp(ns, node) && httpworm(ns, node) && sqlinject(ns, node) ) { ns.nuke(node); return true; } else return false; } } else { ns.nuke(node); return true; } return false; } /** @param {NS} ns */ export async function main(ns) { if(ns.args.length != 1) { ns.tprint("invalid usage!"); } var node = ns.args[0]; ns.tprint(crack(ns, node) ? "Cracked " + node : "Failed to Crack " + node); }