commit 6199426d67d2ca4125604f1dda5edc42f0e2aeee Author: gauvainboiche Date: Thu Jul 10 18:29:15 2025 +0200 First commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8e5bbf0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.py \ No newline at end of file diff --git a/grow.js b/grow.js new file mode 100644 index 0000000..b328cbc --- /dev/null +++ b/grow.js @@ -0,0 +1,8 @@ +export async function main(ns) { + const args = ns.flags([['help', false]]); + const host = args._[0]; + + while(true) { + await ns.grow(host); + } +} \ No newline at end of file diff --git a/hack-auto.js b/hack-auto.js new file mode 100644 index 0000000..7e19fcb --- /dev/null +++ b/hack-auto.js @@ -0,0 +1,172 @@ +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.`); +} \ No newline at end of file diff --git a/hack.js b/hack.js new file mode 100644 index 0000000..cea35b1 --- /dev/null +++ b/hack.js @@ -0,0 +1,8 @@ +export async function main(ns) { + const args = ns.flags([['help', false]]); + const host = args._[0]; + + while(true) { + await ns.hack(host); + } +} \ No newline at end of file diff --git a/weaken.js b/weaken.js new file mode 100644 index 0000000..7c455ff --- /dev/null +++ b/weaken.js @@ -0,0 +1,8 @@ +export async function main(ns) { + const args = ns.flags([['help', false]]); + const host = args._[0]; + + while(true) { + await ns.weaken(host); + } +} \ No newline at end of file