First commit

This commit is contained in:
gauvainboiche
2025-07-10 18:29:15 +02:00
commit 6199426d67
5 changed files with 197 additions and 0 deletions

172
hack-auto.js Normal file
View File

@@ -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.`);
}