2. Bitburner 기본적인 해킹 스크립트

728x90

1. 서론

 

Bitburner의 기본적인 해킹 순서는

  1. 다른 서버의 권한을 탈취하고
  2. 서버의 보안레벨이 높다면 낮추고
  3. 돈이 적다면 높히고
  4. 해킹하는

과정으로 설명될 수 있다.

 

이때 사용자는 하나하나 터미널에서 명령어를 칠 필요없이 자바스크립트로 작성된 스크립트를 실행시켜 자동화 할 수 있는데, 공식문서를 참조하여 이를 작성하고 적용하는법을 알아보겠다.

 

참고 : https://bitburner.readthedocs.io/en/latest/guidesandtips/gettingstartedguideforbeginnerprogrammers.html#creating-our-first-script

 

 

2. 스크립트 작성 및 실행

 

일단 아래순서대로 스크립트를 복사해서 home에 생성한다.

참고링크의 스크립트와 약간 다른데 버전의 문제인지 ns매개변수를 사용하지 않아, 약간의 가공을 했다.

 

1. js파일을 하나 생성한다. 필자는 "basic_hack.js"라 이름지을것이며, root폴더가 아닌 mycustom폴더안에 생성할 것이다.

nano /mycustom/basic_hack.js

 

2. 아래 스크립트를 복사하여 붙여넣는다.

target변수값에 한글을 넣어놨는데, 붙여넣기가 될 진 모르겠지만 되지않는다면 test등 아무 문자로 치환하여 넣어준다.

/** @param {NS} ns */
export async function main(ns) {
    var target = "이 곳에 서버명을 입력하세요.";
    var moneyThresh = ns.getServerMaxMoney(target) * 0.75;
    var securityThresh = ns.getServerMinSecurityLevel(target) + 5;

    while (true) {
        if (ns.getServerSecurityLevel(target) > securityThresh) {
            await ns.weaken(target);
        } else if (ns.getServerMoneyAvailable(target) < moneyThresh) {
            await ns.grow(target);
        } else {
            await ns.hack(target);
        }
    }
}

 

 

3. 아래 Save버튼을 누르거나 ctrl+s로 저장한다.

 

 

이러면 스크립트의 틀은 완성되었다.

이 스크립트를 home이 아닌 권한을 탈취한 서버에서 실행시키기 위해, 해당 서버로 파일을 복사하여야한다.

게임을 시작하면 가장 처음 만나는 n00dles서버로 파일을 복사하여 자기 자신을 해킹하는 스크립트로 만든 뒤, 서버환경에 맞게 실행해보겠다.

 

설명에 앞서 몇가지 팁과 명령어를 설명해주겠다.

 

  1. 터미널에서 자동완성을 지원한다. 예를들어 connect가 아닌 con까지만 입력 후 탭버튼을 누르면 자동완성이 된다. 이는 파일, 폴더, 서버명에도 적용된다.
  2. 폴더 간 이동에는 리눅스와 동일한 cd명령어를 사용한다(cd .., cd mycustom)
  3. run명령어 매개변수에는 -t가 있다. -t 뒤에 숫자를 넣어주면 숫자만큼의 쓰레드로 스크립트를 실행시킨다. 
    예를들어 run basic_hack.js -t 13 이라면 13개의 쓰레드를 사용하게 될 것이다.
  4. mem [스크립트 파일명] 명령어로 해당 스크립트 구동에 필요한 메모리를 알 수 있다.
    예제파일은 2.45GB가 필요하며, 4기가에서는 1쓰레드, 8기가에서는 3쓰레드, 16기가에서는 6쓰레드까지 작동시킬 수 있다.

 

먼저 완성한 스크립트를 n00dles로 복사해야한다.

서버간 복사시에는 scp명령어를 사용한다.

필자는 mycustom폴더에 들어있으니 cd커맨드 이후 scp명렁어를 사용하였다.

 

cd mycustom
scp basic_hack.js n00dles

 

이후 n00dles로 접속하여 ls커맨드를 날리면 mycustom 디렉토리가 보일 것이고, cd로 폴더내부로 들어가면 동일하게 basic_hack.js를 확인할 수 있다.

 

복사한 스크립트에서는 var target의 값이 임의로 들어가있었는데, 이를 n00dles로 바꿔줘야한다.

아래 커맨드를 입력하여 편집기를 열어준다.

nano basic_hack.js

 

이후 var target = "n00dles"로 변경 후, 저장해준다.

 

n00dles서버는 4기가메모리환경이며, 해당 스크립트를 하나만 실행시킬 수 있다.

아래와 같이 입력해준다.

run basic_hack.js -t 1

 

그러면 좌측 Active Script에서 n00dles에서 스크립트가 실행중임을 알 수 있다.

 

이 모든 과정은 n00dles에 nuke.exe를 실행하여 analyze커맨드를 실행 시,

'Can run scripts on this host' 항목이 YES로 표기되어있어야한다.

 

3. 스크립트 설명

 

무한 루프 전, 3개의 변수를 초기화해주고 있다.

var target = "이 곳에 서버명을 입력하세요.";
var moneyThresh = ns.getServerMaxMoney(target) * 0.75;
var securityThresh = ns.getServerMinSecurityLevel(target) + 5;

target은 해킹할 서버 이름이 된다.

moneyThresh는 서버의 돈의 최대치의 75%보다 서버에 돈이 많을때만 해킹할 수 있도록 하는 기준점이다.

securityThresh는 서버의 최저보안레벨에서 5를 더한 값보다 작아야 해킹하도록 하는 기준점이 된다.

 

무한루프문 안에는 2개의 조건문이 존재한다.

while (true) {
        if (ns.getServerSecurityLevel(target) > securityThresh) {
            // If the server's security level is above our threshold, weaken it
            await ns.weaken(target);
        } else if (ns.getServerMoneyAvailable(target) < moneyThresh) {
            // If the server's money is less than our threshold, grow it
            await ns.grow(target);
        } else {
            // Otherwise, hack it
            await ns.hack(target);
        }
    }

 

첫번째 조건은 앞서 설명한 securityThresh, 즉 서버최저보안레벨+5보다 현재 서버보안레벨이 높다면 weaken을 통해 서버보안레벨을 낮춰주도록 한다.

 

만약 첫번째 조건에서 false가 나온다면 두번째 조건으로 moneyThresh, 즉 서버최대보유가능금액*0.75보다 현재서버보유금액이 적다면 grow로 서버 내 돈을 불려준다.

 

두번째에서도 false가 나온다면 hack을 통해 돈을 탈취하게 된다.

 

처음엔 이 블로그 1번 글(하단에 링크)의 스크립트를 home에서 실행시키고, 대학에서 무료교육을 받거나 슬럼가에서 범죄를 저지르다가, 해킹 레벨이 올라갈때마다 본문의 스크립트를 이용하여 모든 서버에서 실행시켜주면 된다.

 

처음에는 weaken과 grow만을 반복하여 초기수익은 없을 수 있지만, 첫 작업이 끝나면 그때부터 본격적인 수익이 생기기 시작할 것이다.

 

또한 나중에 돈이 모이면 8GB서버를 구매하여 1번글의 스크립트는 서버에서 실행시키고, home에서는 다른 수익높은 서버해킹 스크립트를 실행시켜주면 된다.

 

2024.10.07 - [게임/Bitburner] - 1. Bitburner Hacknet 자동화 스크립트

 

 

 

여담)

필자는 javascript는 단순 dom조작 및 요청을 보내고 받는데에만 사용해봤다.

어차피 사용하던 것 비슷비슷하지만, 이곳에서만 사용되는 오브젝트와 함수가 있어 구글링을 하면서 플레이하는데도 약간 아리까리한게 있다.

 

그래도 내장 editor가 vs code기반이라 자동완성으로 어떤 오브젝트나 함수가 있는지 확인해볼 수 있기에, 플레이하면서 천천히 알아가며 이 카테고리 글을 작성할 것이다.

728x90