The3vilM0nk3y

infect

Apr 17th, 2022 (edited)
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //-----MEMORY SETTINGS-----//
  2. //Place in script names to allocate RAM for them on this server.
  3. let allocateFor = [ "covid.js", "scanForCCT.js"];
  4. //Used to keep a certain amount of RAM free
  5. let ramRequirements = 4;
  6.  
  7. //-----LOGGING SETTINGS-----//
  8. //Logging - 1 = Critical/Application 2 = Extended 3 = All Logging
  9. let doLog = true;
  10. let logLevel = 1;
  11.  
  12. //-----FILTER SETTINGS-----//
  13. /*You can prevent symptoms from running on computers by adding them to this list
  14. It will look for servers that CONTAIN the values in the array unless usePreciseNaming
  15. is true, in which it will only look for exact matches.
  16. ex: ["MyServer-32768", "MyServer-1048576", "MyServer-1048576-0"] */
  17. let usePreciseNaming = false;
  18. let ignoreServers = ["MyServer-",];
  19.  
  20. //-----GUI SETTINGS-----//
  21.  
  22. let doGUI = true;
  23. let showKarma = true;
  24.  
  25. //-----SINGULARITY SETTINGS -----//
  26. //Enable this to enable singularity functionality
  27. let haveSingularity = true;
  28. //automate tor/program purchasing,
  29. let torAutomate = true;
  30. //automate backdoor installation
  31. let doBackdoor = true;
  32.  
  33. //do not edit below this line unless you know what your doing.
  34.  
  35. let visited = ["home"];
  36. let hackTarget;
  37. let bestValue = ["home", 0];
  38. let newBestValue = ["home", 0];
  39. let firstRun = true;
  40. let foundFiles = [];
  41. let backdoored = [];
  42.  
  43. const doc = globalThis['document'];
  44. const hook0 = doc.getElementById('overview-extra-hook-0');
  45. const hook1 = doc.getElementById('overview-extra-hook-1');
  46. //args - depth
  47.  
  48. /** @param {NS} ns */
  49. export async function main(ns) {
  50.     ns.exec("scanForCCT.js", "home");
  51.    
  52.     for (let s of allocateFor) {
  53.         ramRequirements += ns.getScriptRam(s);
  54.     }
  55.     while (true) {
  56.  
  57.         const headers = [];
  58.         const values = [];
  59.         if (showKarma && doGUI){
  60.             headers.push("Karma");
  61.             values.push(ns.heart.break().toPrecision(5));
  62.         }
  63.         visited = ["home"];
  64.         backdoored = [];
  65.         //if (torAutomate)  await checkPlayer(ns);
  66.         await updateTarget(ns);
  67.         //await log(ns, visited.toString(), 1);
  68.         if (bestValue[0] != newBestValue[0]) {
  69.             log(ns, "Detected new best value as " + newBestValue[0] + " with a value of " + newBestValue[1], 1);
  70.             bestValue = newBestValue;
  71.         }
  72.         if (firstRun) ns.tprint(visited.toString());
  73.         firstRun = false;
  74.         await ns.sleep(5000);
  75.  
  76.         hook0.innerText = headers.join(" \n");
  77.         hook1.innerText = values.join(" \n");
  78.     }
  79. }
  80.  
  81. /** @param {NS} ns */
  82. function ignored(s, ns) {
  83.     if (usePreciseNaming == false) {
  84.         for (let i of ignoreServers) {
  85.             log(ns, "Comparing - " + s + "  to  " + i, 3);
  86.             if (s.includes(i) || s == i) {
  87.                 log(ns, "In ignore list - " + s, 3);
  88.                 return true;
  89.             }
  90.         }
  91.     } else {
  92.         if (ignoreServers.includes(s)) {
  93.             log(ns, "[PM] - In ignore list - " + s, 3);
  94.             return true;
  95.         }
  96.     }
  97.     log(ns, "Not in ignore list - " + s, 3);
  98.     return false;
  99. }
  100. /** @param {NS} ns */
  101. async function updateTarget(ns) {
  102.     hackTarget = ns.read("target.txt");
  103.     if (hackTarget != undefined && hackTarget != "") {
  104.         if (!ns.hasRootAccess(hackTarget)) {
  105.             await dropImmunity(ns, hackTarget);
  106.         }
  107.         if (ns.hasRootAccess(hackTarget)) {
  108.             await contagious(ns, "home", ns.args[0]);
  109.             if (ignored("home", ns) == false) await runSymptoms(ns, "home");
  110.         } else { log(ns, "Cannot gain root access to - " + hackTarget, 1) }
  111.     } else { log(ns, "Unable to read server name from target.txt", 1); }
  112. }
  113. /** @param {NS} ns */
  114. async function log(ns, s, level) {
  115.     if (doLog && level <= logLevel) ns.tprint(s);
  116. }
  117. /** @param {NS} ns */
  118. async function dropImmunity(ns, server) {
  119.     // If we have the BruteSSH.exe program, use it to open the SSH Port
  120.     // on the target server
  121.     let portLevel = 0;
  122.     if (ns.fileExists("BruteSSH.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  123.         log(ns, "Attempting BruteSSH on " + server, 2);
  124.         ns.brutessh(server);
  125.         portLevel++;
  126.     }
  127.     if (ns.fileExists("FTPCrack.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  128.         log(ns, "Attempting FTPCrack on " + server, 2);
  129.         ns.ftpcrack(server);
  130.         portLevel++;
  131.     }
  132.     if (ns.fileExists("relaySMTP.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  133.         log(ns, "Attempting relaySMTP on " + server, 2);
  134.         ns.relaysmtp(server);
  135.         portLevel++;
  136.     }
  137.     if (ns.fileExists("HTTPWorm.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  138.         log(ns, "Attempting HTTPWorm on " + server, 2);
  139.         ns.httpworm(server);
  140.         portLevel++;
  141.     }
  142.     if (ns.fileExists("SQLInject.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  143.         log(ns, "Attempting SQLInject on " + server, 2);
  144.         ns.sqlinject(server);
  145.         portLevel++;
  146.     }
  147.  
  148.  
  149.     // Get root access to target server
  150.     if (!ns.hasRootAccess(server)) {
  151.         if (ns.getServerNumPortsRequired(server) <= portLevel) {
  152.             ns.nuke(server);
  153.             if (ns.hasRootAccess(server)) {
  154.                 log(ns, "Gained root access to " + server, 1);
  155.             }
  156.         }
  157.         else log(ns, "Not enough open ports for " + server + " to run NUKE.exe", 2);
  158.     }
  159. }
  160.  
  161. /** @param {NS} ns */
  162. async function contagious(ns, root, depth) {
  163.     log(ns, "Scanning " + root + " for nodes. Current Depth: " + depth, 3);
  164.     let list = ns.scan(root);
  165.     for (let server of list) {
  166.         //termiate running scripts
  167.         if (!visited.includes(server)) {
  168.             //set we have visited it
  169.             visited.push(server);
  170.             if (depth > 0 || depth < 0) {
  171.                 //run contagious with that server as target
  172.                 await contagious(ns, server, depth - 1);
  173.             }
  174.             if (ignored(server, ns) == false) {
  175.                 await dropImmunity(ns, server);
  176.                 await runSymptoms(ns, server);
  177.             }
  178.             //if (doBackdoor) await backdoor(server, root, ns);
  179.         }
  180.     }
  181. }
  182. /** @param {NS} ns */
  183. async function runSymptoms(ns, server) {
  184.     if (ns.hasRootAccess(server)) {
  185.         let d = ns.ps(server);
  186.         let runningSymptoms = false;
  187.         for (let process of d) {
  188.             if (process.filename == "symptoms.js" && process.args[0] == hackTarget) {
  189.                 runningSymptoms = true;
  190.                 log(ns, "Symptoms already targeting proper target on " + server + " running on " + process.threads + " threads.", 3);
  191.             }
  192.         }
  193.         if (!runningSymptoms) {
  194.             ns.scriptKill("symptoms.js", server);
  195.             //execute file transfers
  196.             await ns.scp("symptoms.js", server);
  197.             let threads;
  198.  
  199.             if (server == "home") {
  200.                 threads = Math.floor((ns.getServerMaxRam("home") - ramRequirements) / ns.getScriptRam("symptoms.js"));
  201.                 log(ns, "Home Threads: " + threads + "  RAM Available: " + (ns.getServerMaxRam(server) - ramRequirements) + "    RAM Needed: " + (ramRequirements), 1);
  202.                 //threads = 0;
  203.             }
  204.             else threads = Math.floor(ns.getServerMaxRam(server) / ns.getScriptRam("symptoms.js"));
  205.             log(ns, "Executing symptoms on " + server + " with " + threads + " threads.", 3);
  206.             if (threads > 0) ns.exec("symptoms.js", server, threads, hackTarget);
  207.             else log(ns, "Not enough RAM on " + server + " to execute symptoms", 2);
  208.         }
  209.  
  210.     } else log(ns, "No root access was obtained for " + server + " to run symptoms", 3);
  211. }
Add Comment
Please, Sign In to add comment