export async function main(ns) { const args = ns.flags([['help', false]]); const host = args._[0]; if (args.help || !host) { ns.tprint("Ce script est destiné à trouver, hacker et déployer un méta-hack sur un serveur ciblé en argument suivant la syntaxe :"); ns.tprint(`run ${ns.getScriptName()} "SERVER_NAME"`); return; } // Récupération de certaines données fondamentales pour le piratage const hostDetails = ns.getServer(host); // A qui cela appartient let hostname = hostDetails.hostname; let playerOwned = hostDetails.purchasedByPlayer; let organization = hostDetails.organizationName; // RAM et CPU let ramMaximum = hostDetails.maxRam; let ramUsed = hostDetails.ramUsed; let cpuCores = hostDetails.cpuCores; // Hacking nécessaire let portsRequiredToHack = hostDetails.numOpenPortsRequired; let hackingLevelRequired = hostDetails.requiredHackingSkill; // Argent disponible/potentiel let maxMoney = hostDetails.moneyMax; let availableMoney = hostDetails.moneyAvailable; ns.tprint(` |-------------------------| `); ns.tprint(` | DEBUT DU SCRIPT | `); ns.tprint(` |‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾| `); ns.tprint(` `); ns.tprint(`Nom du serveur : ${hostname}`); ns.tprint(`M'appartient : ${playerOwned}`); ns.tprint(`Propriétaire : ${organization}`); ns.tprint(` --------------------------------------- `); ns.tprint(`Nombre de coeurs : ${cpuCores}`); ns.tprint(`RAM maximum : ${ramMaximum}`); ns.tprint(`RAM en usage : ${ramUsed}`); ns.tprint(`Ports à ouvrir : ${portsRequiredToHack}`); ns.tprint(`Niveau en piratage requis : ${hackingLevelRequired}`); ns.tprint(` --------------------------------------- `); ns.tprint(`Argent disponible : ${availableMoney}`); ns.tprint(`Argent maximum : ${maxMoney}`); //* Savoir si le hack est possible ou pertinent *// if (ramMaximum === 0) { ns.tprint(`Le serveur ne fera pas tourner de script, faute de RAM.`); } if (playerOwned) { ns.tprint(`Le serveur vous appartient, il n'y a rien à hacker.`); ns.exit(); } // Savoir si le hack est possible niveau "compétence" const player = ns.getPlayer(); const playerHacking = player.skills.hacking; if (playerHacking < hackingLevelRequired) { ns.tprint(`Le niveau requis est trop élevé pour un hack.`); ns.exit(); } // Savoir si le hack est possible au niveau des ports à ouvrir let portsICanHack = 0; const exploits = ["HTTPWorm", "BruteSSH", "FTPCrack", "SQLInject", "relaySMTP"]; for (const exploit of exploits) { const file = `${exploit}.exe`; if (ns.fileExists(file, "home")) { portsICanHack++; } } if (portsICanHack < portsRequiredToHack) { ns.tprint(`Le pare-feu du serveur est trop renforcé pour un hack.`); ns.exit(); } ns.tprint(` |----------------------| `); ns.tprint(` | ACCES ADMIN EN COURS | `); ns.tprint(` |‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾| `); ns.tprint(` `); //* Lancement des programmes individuellement *// // HTTPWorm if (ns.fileExists("HTTPWorm.exe", "home")) { ns.httpworm(host) if (hostDetails.httpPortOpen) { ns.tprint(`Le programme ${exploits[0]} a été lancé avec succès.`) } else { ns.tprint(`Le programme ${exploits[0]} a échoué.`) } } else { ns.tprint(`Le programme ${exploits[0]} n'est pas présent.`) } // BruteSSH if (ns.fileExists("BruteSSH.exe", "home")) { ns.brutessh(host) if (hostDetails.sshPortOpen) { ns.tprint(`Le programme ${exploits[1]} a été lancé avec succès.`) } else { ns.tprint(`Le programme ${exploits[1]} a échoué.`) } } else { ns.tprint(`Le programme ${exploits[1]} n'est pas présent.`) } // FTPCrack if (ns.fileExists("FTPCrack.exe", "home")) { ns.ftpcrack(host) if (hostDetails.ftpPortOpen) { ns.tprint(`Le programme ${exploits[2]} a été lancé avec succès.`) } else { ns.tprint(`Le programme ${exploits[2]} a échoué.`) } } else { ns.tprint(`Le programme ${exploits[2]} n'est pas présent.`) } // SQLInject if (ns.fileExists("SQLInject.exe", "home")) { ns.sqlinject(host) if (hostDetails.sqlPortOpen) { ns.tprint(`Le programme ${exploits[3]} a été lancé avec succès.`) } else { ns.tprint(`Le programme ${exploits[3]} a échoué.`) } } else { ns.tprint(`Le programme ${exploits[3]} n'est pas présent.`) } // relaySMTP if (ns.fileExists("relaySMTP.exe", "home")) { ns.relaysmtp(host) if (hostDetails.smtpPortOpen) { ns.tprint(`Le programme ${exploits[4]} a été lancé avec succès.`) } else { ns.tprint(`Le programme ${exploits[4]} a échoué.`) } } else { ns.tprint(`Le programme ${exploits[4]} n'est pas présent.`) } ns.tprint(`---------------------------`); ns.nuke(host); const adminRights = ns.hasRootAccess(host) ? ns.tprint(`Les droits admins ont été accordés.`) : ns.tprint(`Les droits admins n'ont pas été accordés.`); if (ramMaximum === 0) { ns.tprint(`Le serveur ne peut pas faire tourner de script, faute de RAM.`); ns.exit(); } ns.tprint(` |------------------------| `); ns.tprint(` | HACKING PASSIF DEMARRE | `); ns.tprint(` |‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾| `); ns.tprint(` `); const metaScript = "metahack.js"; const scriptHack = "hack.js"; const scriptGrow = "grow.js"; const scriptWeaken = "weaken.js"; const ramScript = ns.getScriptRam(metaScript, "home"); const threadsPower = Math.floor((ramMaximum - ramUsed) / ramScript); //ns.scp(["hack.js", "grow.js", "weaken.js"], host, "home"); ns.scp(metaScript, host, "home"); ns.scriptKill(metaScript, host); ns.exec(metaScript, host, threadsPower, host); ns.tprint(`${metaScript} est lancé sur le serveur ${host} avec ${threadsPower} coeurs.`); // Lancement de scripts de hack en local ns.exec(scriptGrow, "home", 8, host); ns.exec(scriptWeaken, "home", 8, host); ns.exec(scriptHack, "home", 12, host); ns.tprint(`${scriptGrow}, ${scriptWeaken} et ${scriptHack} ont été lancés sur le PC local.`); }