Bitburner 隱藏成就
基本上這些隱藏成就,都可以先從 Github 上的原始程式搜尋關鍵字 Player.giveExploit
,大致上知道要怎麼解決。
詳細敘述如下:
Exploit: undocumented
寫一個 .js
檔案並執行,內容如下
/** @param {NS} ns */
export async function main(ns) {
await ns.exploit()
}
執行完後靜待片刻等成就跳出即可。
可參閱原始碼於此
Exploit: bypass
寫一個 .js
檔案並執行,內容如下
const doc = eval('document')
/** @param {NS} ns */
export async function main(ns) {
await ns.bypass(doc)
}
執行完後靜待片刻等成就跳出即可。
可參閱原始碼於此
Exploit: prototype tampering
先打開 Chrome Dev Tools,在 Console 執行
Number.prototype.toExponential = () => {}
執行完後靜待片刻等成就跳出即可。
Exploit: unclickable
寫一個 .js
檔案並執行,內容如下
const doc = eval('document')
/** @param {NS} ns */
export async function main(ns) {
const el = doc.getElementById('unclickable')
const key = Object.keys(el)[1]
el[key].onClick({ target: el, isTrusted: true })
}
執行完後靜待片刻等成就跳出即可。
Exploit: alternate reality
先打開 Chrome Dev Menu,變更函數以下
console.warn = () => {
debugger
}
之後在遊戲裡面,寫一個 .js
檔案並執行,內容如下
/** @param {NS} ns */
export async function main(ns) {
await ns.alterReality()
}
在抓斷點的時候找到 Call Stack 裡面前一個在 Extra.js 中的 anonymous function call
手動把 Scope 裡面 Local 變數 x
的值改成 true
然後繼續斷點下一步直到取得成就。
可參閱原始碼於此
Exploit: rainbow
參閱原始碼於此,可知道就是要猜密碼是啥。
這邊是要你用彩虹表破解。
可參考 reddit 這篇的評論
用我的 Mac Mini 大概跑了幾分鐘結果就出來了。
取得結果後,在遊戲裡面,寫一個 .js
檔案並執行,內容如下
/** @param {NS} ns */
export async function main(ns) {
await ns.rainbow('<這邊寫結果取得的密碼>')
}
Exploit: you are not meant to access this
這個是要你打開 Dev Page。
但一般方式打不開,只能使用斷點大法。
從原始碼可得知切換的大致邏輯。
先打開 Chrome Dev Tools
找到 Source 裡面的 main.bundle.js
展開後,搜尋關鍵字 "Soft Reset!"。找到後,往下再找一下會找到 switch 的邏輯處,在那邊下斷點。
switch (a.page) {
case k.T3.Recovery:
// ...
之後隨意在遊戲裡切換頁面。
在斷點手動把 Scope 裡面 Local 變數 pageWithContext
.page
的值改成 "Dev"
然後繼續斷點下一步,就會開啟 Dev 頁面,取得成就。
Exploit: time compression
由此可知大致邏輯。
可改電腦系統的時間來取得,但太麻煩。我是用竄改 performance.now 來取得此成就。
先打開 Chrome Dev Tools,在 Console 執行
performance.now = () => 0
執行完後靜待片刻等成就跳出即可。
Exploit: noodles
依照邏輯,沒事就去 New Tokyo 的 noodle bar 吃一下即可取得成就。
Exploit: true recursion
依照原始檔,就是在 New Tokyo 的 arcade 進入 Megabyte burner 2000 後,玩破關。
用類似
document.getElementsByTagName('iframe')[0].src = window.location.href
的方法,貌似無用。
然後破關時間也要太久,所以我後來是用斷點大法獲得成就的。
Exploit: save file
依照原始檔的說明,
應該是要在遊戲裡 OPTIONS 頁面把存檔 Export 出來之後,用 base64 解碼
base64 -d bitburnerSave_1695622315_BN12x78.json > a.json
找到存檔裡面 data.PlayerSave
中 exploits,將 EditSaveFile
加進去後,用 base64 編碼回去
base64 a.json > edited.json
最後在遊戲裡面把存檔 Import 回去。
但這樣好麻煩。所以我用斷點解決。
先打開 Chrome Dev Tools
找到 Source 裡面的 main.bundle.js
展開後,搜尋關鍵字 "You ate some delicious noodles and feel refreshed"。
找到後將斷點下在 giveExploit
那一行。
去 noodle bar 吃一下,待斷點發生之後,將 Scope 裡面 Closure 變數 Exploits
裡面有一個 object list 的 N00dles 改成 EditSaveFile
。
然後繼續斷點下一步,讓其判斷成功但是給的成就是另一個。
UNACHIEVABLE
依照原始碼,這東西必須要改 code。
但因為我玩的是 Steam 版本,這樣太麻煩。所以直接開大絕取得:
const doc = eval('document')
/** @param {NS} ns */
export async function main(ns) {
doc.achievements.push('UNACHIEVABLE')
}
因為 code 並沒有更動,遊戲裡面顯示並沒有取得,但實際上 Steam 成就有獲得。
MONEY_M1B
依照原始碼,這應該是要把角色的錢弄超過溢位,然後變成負值。
TODO: