Как я написал ботнет и взломал всю сеть!
Речь пойдёт про очень увлекательную игру Bitburner.
Бесплатная хакерская RPG Bitburner, где скрипты на JavaScript управляют серверами, миллиардами и аугментациями. Прокачка реальных навыков и тонны удовольствия.
Bitburner — это бесплатная хакерская RPG с элементами программирования и инкрементала. Вы играете за хакера, который взламывает серверы, получает деньги, покупает аугментации и перерождается, становясь всё сильнее.
Где играть?
Браузерная версия: https://bitburner-official.github.io/ — сразу открывайте и играйте, без регистрации.
Steam: https://store.steampowered.com/app/1812820/Bitburner/ — бесплатно, есть достижения, облачные сохранения.
GitHub: код открыт, можно форкнуть и доработать.
Основные фишки:
Всё управляется скриптами на JavaScript (Netscript).
Скрипты могут выполняться на удалённых серверах, работают асинхронно, используют RAM.
Есть полноценный терминал, редактор кода, встроенная документация.
Мир игры — это сотни серверов, фракции, биржа, хакнет-узлы, аугментации.
Игра не прощает ошибок: неверный скрипт может обнулить защиту сервера или слить деньги на комиссиях.
Первые шаги: как не сломать лоб
Когда вы запускаете игру впервые, видите терминал и кучу вкладок: Terminal, Hacking, Stats, Factions, Active Scripts. Становится страшно. Но не бойтесь.
Базовые команды терминала:
scan — показать список соседних серверов.
connect <сервер> — перейти на сервер.
ls — посмотреть файлы.
nano <имя.js> — создать скрипт.
run <имя.js> — запустить скрипт на текущем сервере.
connect home — вернуться домой.
Первая цель: сервер n00dles
У этого сервера не требуется открывать порты — можно сразу выполнить nuke и получить root.
Выполните на нем команду analyze чтобы увидеть информацию о нем, там будет указан требуемый уровень хакинга для установки root который ставиться через команду nuke.exe, далее на других компьютерах после анализа будет указано количество необходимых открытых портов для запуска nuke.exe.
"На самом деле уровень взлома не так важен для открытия портов, они открываются с помощью программ, которые можно либо приобрести бесплатно, но тогда точно нужен уровень хакинга, т. к. они открываются при достижении определенного уровня, но можно приобрести тор-роутер и в дарквебе приобрести эти программы, не дожидаясь прокачки, и тогда даже на самых сложных компьютерах можно будет установить root и запускать свои скрипты на нем или грабить его, но бэкдор не установить без уровня хакинга."
Когда вы подключились к ПК и установили root вы можете выполнять команды на нем
Золотой треугольник хакера:
weaken(server) — ослабляет защиту (security level).
grow(server) — увеличивает количество денег на сервере.
hack(server) — крадёт часть денег.
Если делать всё наугад, сервер станет бесполезным. Правильная стратегия: держать защиту на минимуме, деньги — на максимуме, и только потом красть.
Можно всё выполнять вручную, но это скучно, самый замес в том, что можно всё автоматизировать и писать свои скрипты, которые будут выполнять это за вас!
Скрипты бывают разные и выполняют разные действия, всё от вашей фантазии! Их можно запускать и хранить как на своем ПК, так и на чужих, всё зависит от цели.
Я написал 3 основных скрипта, которые всё оптимизируют и делают работу за вас, это скрипт хакера, который выполняет нужные команды для понижения защиты, увеличения денег и грабежа при достижении нужных условий. Ниже его код, его нужно создать у себя на ПК, то есть «home», командой nano hacker.js, откроется редактор скриптов, туда можете скопировать мой код и сохранить, запускается командой из терминала run hacker.js, подождите запускать, т. к. он начнет атаковать свой же компьютер, его необходимо запускать на чужих ПК, но это не все, для облегчения я написал ботнет, который сканирует сеть, находит самый лакомый кусочек (оптимальный по уровню и деньгам компьютер), скачивает и устанавливает нашего хакера на все компьютеры, на которых есть root-доступ, и запускает скрипт с атакой на указанной целью (то есть нашу выбранную цель)!
В общем вот его логика:
Принимает имя сервера-цели и в бесконечном цикле:
если защита выше минимальной → ослабляем,
если денег меньше максимума → увеличиваем,
иначе → крадём.
/** @Param {NS} ns **/
export async function main(ns) {
const target = ns.args[0];
if (!target) {
ns.tprint("Ошибка: цель не указана");
return;
}
while (true) {
if (ns.getServerSecurityLevel(target) > ns.getServerMinSecurityLevel(target) + 0.1) {
await ns.weaken(target);
} else if (ns.getServerMoneyAvailable(target) < ns.getServerMaxMoney(target)) {
await ns.grow(target);
} else {
await ns.hack(target);
}
}
}
Вот скрипт на нашего хакера, это самый простой скрипт.
А ниже уже будет сам ботнет, вот его сила:
Сканирует всю сеть (рекурсивно), взламывает новые серверы (открывает порты, nuke), затем копирует hacker.js на каждый взломанный сервер и запускает его с максимально возможным количеством потоков (threads). Все серверы атакуют одну общую цель — ту, которая даёт максимальную отдачу (формула maxMoney / hackTime). Периодически цель пересчитывается.
А вот ниже уже представлен код на нашего великого ботнета:
/** @param {NS} ns **/
export async function main(ns) {
const HACKER = "hacker.js";
const INTERVAL = 1800000; // 30 минут (можно изменить)
// Рекурсивный сбор всех серверов
function getAllServers(root = "home", visited = new Set()) {
visited.add(root);
for (const s of ns.scan(root)) if (!visited.has(s)) getAllServers(s, visited);
return Array.from(visited);
}
// Взлом сервера: открытие портов и nuke
async function hackServer(server) {
if (ns.hasRootAccess(server)) return true;
if (ns.getHackingLevel() < ns.getServerRequiredHackingLevel(server)) return false;
if (ns.fileExists("BruteSSH.exe", "home")) ns.brutessh(server);
if (ns.fileExists("FTPCrack.exe", "home")) ns.ftpcrack(server);
if (ns.fileExists("relaySMTP.exe", "home")) ns.relaysmtp(server);
if (ns.fileExists("HTTPWorm.exe", "home")) ns.httpworm(server);
if (ns.fileExists("SQLInject.exe", "home")) ns.sqlinject(server);
let portsOpened = 0;
if (ns.fileExists("BruteSSH.exe", "home")) portsOpened++;
if (ns.fileExists("FTPCrack.exe", "home")) portsOpened++;
if (ns.fileExists("relaySMTP.exe", "home")) portsOpened++;
if (ns.fileExists("HTTPWorm.exe", "home")) portsOpened++;
if (ns.fileExists("SQLInject.exe", "home")) portsOpened++;
const required = ns.getServerNumPortsRequired(server);
if (portsOpened >= required) {
ns.nuke(server);
ns.tprint(`[ВЗЛОМ] ${server} (портов ${portsOpened}/${required})`);
return true;
}
return false;
}
// Выбор лучшей цели для атаки (по формуле maxMoney / hackTime)
function getBestTarget() {
let best = null;
let bestScore = -1;
const myLevel = ns.getHackingLevel();
for (const s of getAllServers()) {
if (s === "home") continue;
if (!ns.hasRootAccess(s)) continue;
if (myLevel < ns.getServerRequiredHackingLevel(s)) continue;
const maxMoney = ns.getServerMaxMoney(s);
if (maxMoney <= 0) continue;
const hackTime = ns.getHackTime(s);
const score = maxMoney / hackTime;
if (score > bestScore) {
bestScore = score;
best = s;
}
}
return best;
}
// Развёртывание hacker.js на сервере (без проверки на деньги)
async function deployHacker(server, target) {
if (!ns.hasRootAccess(server)) return false;
await ns.scp(HACKER, server);
// Убиваем все старые процессы hacker.js
const running = ns.ps(server).filter(p => p.filename === HACKER);
for (const p of running) ns.kill(p.pid);
await ns.sleep(200);
const maxRam = ns.getServerMaxRam(server);
const usedRam = ns.getServerUsedRam(server);
let freeRam = maxRam - usedRam;
const scriptRam = ns.getScriptRam(HACKER);
if (freeRam < scriptRam) {
ns.print(`[НЕТ RAM] ${server} свободно ${freeRam.toFixed(2)} GB, нужно ${scriptRam.toFixed(2)} GB`);
return false;
}
let threads = Math.floor(freeRam / scriptRam);
if (freeRam - threads * scriptRam < 0.1) threads--;
if (threads < 1) return false;
ns.exec(HACKER, server, threads, target);
ns.tprint(`[ЗАПУСК] ${server}: ${threads} потоков -> цель ${target}`);
return true;
}
// Основной цикл
ns.tprint("[БОТНЕТ] Запущен. Сканирую сеть...");
while (true) {
const allServers = getAllServers();
// Взламываем новые серверы
for (const s of allServers) {
if (s !== "home") await hackServer(s);
}
// Выбираем лучшую цель
const target = getBestTarget();
if (!target) {
ns.tprint("[БОТНЕТ] Нет подходящей цели. Ждём...");
await ns.sleep(INTERVAL);
continue;
}
ns.tprint(`[ЦЕЛЬ] ${target}`);
// Развёртываем hacker.js на всех взломанных серверах (включая home)
for (const s of allServers) {
if (s === "home") continue;
if (ns.hasRootAccess(s)) await deployHacker(s, target);
}
// Домашний ПК – отдельно, оставляем 1 GB для ботнета
const homeFree = ns.getServerMaxRam("home") - ns.getServerUsedRam("home");
const scriptRam = ns.getScriptRam(HACKER);
if (homeFree > scriptRam + 1) {
let threads = Math.floor((homeFree - 1) / scriptRam);
const homeProcs = ns.ps("home").filter(p => p.filename === HACKER);
for (const p of homeProcs) ns.kill(p.pid);
await ns.sleep(200);
ns.exec(HACKER, "home", threads, target);
ns.tprint(`[ЗАПУСК] home: ${threads} потоков -> цель ${target}`);
}
ns.tprint(`[БОТНЕТ] Ожидание ${INTERVAL/1000} секунд до следующего цикла...`);
await ns.sleep(INTERVAL);
}
}
На практике ботнет работает отлично, кроме взлома, я это исправлю в будущем, но поэтому я собрал скрипт, который как раз взламывает все ПК и поднимает на них root, игнорируя уровень хакера, единственное, он взламывает только доступными программами, и если у вас есть не все проги, то вы не сможете открыть достаточное количество портов для поднятия root, в общем, если вы купите в даркнете все проги, то сможете взломать абсолютно все ПК в игре, не обращая внимания на свой уровень.
В общем вот логика:
Просто перебирает все серверы, открывает все порты, на которые у вас есть программы (BruteSSH.exe, FTPCrack.exe, relaySMTP.exe, HTTPWorm.exe, SQLInject.exe), и выполняет nuke. Не смотрит на уровень хакинга — если вы не можете взломать сервер, он просто не даст root. Удобно для массового захвата.
/** @param {NS} ns **/
export async function main(ns) {
function getAllServers(current = "home", visited = new Set()) {
visited.add(current);
for (const next of ns.scan(current)) if (!visited.has(next)) getAllServers(next, visited);
return Array.from(visited);
}
const servers = getAllServers();
const tools = [
{ file: "BruteSSH.exe", func: ns.brutessh },
{ file: "FTPCrack.exe", func: ns.ftpcrack },
{ file: "relaySMTP.exe", func: ns.relaysmtp },
{ file: "HTTPWorm.exe", func: ns.httpworm },
{ file: "SQLInject.exe", func: ns.sqlinject }
];
for (const s of servers) {
if (s === "home") continue;
ns.print(`\n🔧 Обработка ${s}...`);
// Открываем все доступные порты
for (const tool of tools) {
if (ns.fileExists(tool.file, "home")) {
tool.func(s);
ns.print(` Открыт порт через ${tool.file}`);
} else {
ns.print(` ⚠️ Файл ${tool.file} отсутствует`);
}
}
// Пытаемся получить root
ns.nuke(s);
if (ns.hasRootAccess(s)) {
ns.print(` ✅ ${s} ВЗЛОМАН!`);
} else {
ns.print(` ❌ ${s} не взломан (не хватает уровня или портов)`);
}
await ns.sleep(100);
}
ns.print("\nГотово.");
}
Вот три основных скрипта, я предлагаю порядок такой: сначала запускаете скрипт массового взлома, затем, когда он взломает доступные ПК, вы запускаете ботнет и ждете, когда повалят деньги!
Для начала самое то, если будет интересно, могу выложить еще много интересных скриптов, например для автоматической торговли на бирже, подскажу, где лучше всего работать и где набивать навыки.
Я не программист, возможно, мой код — это говнокод, я знаю, что там можно сделать еще лучше и круче, и я не раскрыл весь потенциал игры, но, по крайней мере, я вижу, что это работает и приносит то, что приносит!
Еще не забывайте про количество памяти на своем ПК, ее можно и нужно повышать, в городе найдите магазин, где можно приобрести улучшения для домашнего ПК, скрипты требуют памяти, и чем больше, тем лучше!
Надеюсь, я помогу начинающим, и меня не забросают тапками, просто поделился тем, что меня увлекло.



