NIKKE 啟動器中毒事件:官方檔案被改 37 天,偷的不只遊戲帳號
NIKKE PC 啟動器載入的官方 JS 被植入木馬 37 天。對照兩份技術分析、網域與憑證紀錄,整理攻擊怎麼進來、偷了什麼、怎麼自查與止損。
打開你的 NIKKE 安裝資料夾,找到 Launcher\intl_service\debug.log,搜尋 k2f_chan。
如果搜得到,你的電腦在某個時間點跑過一個遠端控制程式。它能執行任意指令、讀任意檔案、截圖,而且會去翻你的瀏覽器密碼、SSH 金鑰、加密錢包,還有 Claude Code、Codex、Gemini CLI 這些 AI 工具的登入憑證。
11 月 3 日起,NIKKE 的社群 Discord、NGA、巴哈姆特 NIKKE 板和英文社群陸續出現警告。NGA 上一位中招玩家貼出的自查帖寫得很直接,結論是「只要能搜索到 k2f_chan 關鍵字就說明上述的信息已經被竊取走了」。巴哈也有人開串討論,不過那個頁面我這邊開不了,下面不引用它的內容。
這篇我讀了兩份公開的技術分析:一份是 MotherSphere 在 GitHub Gist 上持續更新的事件報告,一份是 WormW 的逆向分析報告。再自己查了網域註冊資料和憑證透明度紀錄,對照 Inven Global 等媒體的報導。有幾個流傳很廣的說法需要修正,也有幾個止損步驟,NGA 那份清單沒寫到,照做可能會把系統弄壞。
先講結論:誰該擔心?
圖 1:MotherSphere 報告開頭的警告框,最後更新於 11 月 4 日 02:00 GMT(來源:GitHub Gist)
報告開頭的警告框把事情講得很清楚:從 2026 年 9 月 27 日起,Level Infinite 的 CDN 上有四個官方 JavaScript 檔案被塞進了攻擊者的程式碼。NIKKE 的 PC 啟動器會載入這些檔案。最晚從 10 月 23 日起,打開啟動器就可能被裝上遠端控制程式,在啟動器開著的時候,攻擊者可以在你的電腦上執行任何指令、讀任何檔案、截圖。
所以受影響的是:
- 用 PC 版官方啟動器的人。 目前兩份分析只涵蓋 PC 啟動器。
- 在 9 月底到 11 月 3 日之間開過啟動器的人。 最早回報的代理程式啟動是 10 月 23 日,但 MotherSphere 說十月初的情況資料不足,不能排除。
- 用 Steam Deck 或 Linux 透過 Proton 玩的人也一樣。 MotherSphere 的報告特別寫了「Proton 保護不了你」:Wine 會把整個根目錄和家目錄對應進去,代理程式一樣讀得到
~/.ssh和瀏覽器資料。
不是每次開啟動器都會中。MotherSphere 分析的那台電腦,大約 19 次啟動裡有 3 次收到了惡意程式。
「過期網域被搶註」只說對了一半
NGA 那篇自查帖的時間線第一條是「insightjs.com 被重新註冊(過期域名搶注)」,很多轉述因此把事情理解成:啟動器原本就用了一個叫 insightjs 的分析服務,後來這個網域過期,被駭客搶去註冊,所以啟動器載入的東西就變成了惡意程式。
網域確實是過期後被重新註冊的,這點我自己查得到。
圖 2:crt.sh 收錄的 insightjs.com 憑證,11 月 4 日查閱(來源:crt.sh)
crt.sh 上的紀錄分成兩段。2019 年 8 月到 2021 年 6 月,Amazon 的憑證機構陸續簽了二十張左右的憑證給 api.insightjs.com 和 cdn.insightjs.com,看起來是一個正常營運的產品。2021 年 6 月 26 日之後是五年多的空白。下一張是 2026 年 10 月 6 日,Let’s Encrypt 簽給 analytics.insightjs.com。
我再查了 Verisign 的 RDAP 註冊資料:insightjs.com 的建立時間是 2026 年 9 月 27 日 01:59:19(UTC),註冊商是 PDR Ltd.,名稱伺服器在冰島的主機商 1984。
但另一半說法不成立。兩份技術報告都沒有說啟動器以前用過 insightjs.com。它們描述的是:攻擊者在 01:59 註冊了網域,四小時四十分鐘後的 06:41 到 06:42,Level Infinite CDN 上的官方檔案就被改了,改的內容是加進一段載入 insightjs.com 的程式。
也就是說,指向 insightjs.com 的那行程式碼是攻擊者自己寫進官方檔案的。挑一個 2019 年真實存在過的分析服務網域,只是讓這行程式碼看起來不突兀。WormW 的報告把它歸類為攻擊者刻意搶下的基礎設施,理由是這個名稱和它 2019 年的歷史,看起來就像一個真的網頁監測或分析服務。
這個差別很重要。如果是相依的第三方服務過期被搶,問題出在「忘了清掉一個舊的外部引用」,修法是盤點外部腳本。這次是有人拿到了官方 CDN 的寫入權限,修法是查清楚權限怎麼外流的。兩份報告都說這一點目前不知道:WormW 列了 CDN 憑證外洩、CI/CD 被入侵、設定錯誤三種「待驗證假設」,MotherSphere 寫的是「攻擊者如何取得 Level Infinite CDN 的寫入權限,目前還不知道」。
另外一個小地方。MotherSphere 根據 Cert Spotter 列了一張 9 月 27 日 03:00 的 insightjs.com 憑證,和一張 10 月 23 日涵蓋多個子網域的憑證,這兩張在我截圖的 crt.sh 上都沒有出現。WormW 也提到多子網域那張是直接連線檢查才發現的,CT 紀錄只看得到 analytics 那一張。不同的 CT 查詢服務收錄範圍不同,我沒辦法判斷是哪邊漏了。
惡意程式是怎麼進到你電腦的?
圖 3:本文整理的攻擊鏈(資料來源:MotherSphere、WormW)
NIKKE 的 PC 啟動器本質上是一個包著瀏覽器的程式,介面上的公告、圖片、新聞列表,是從 Level Infinite 的網站和 CDN 載入的網頁內容。
被改的檔案在 playerinfinite.com 底下。MotherSphere 列了四個:aegis-fix.min.js、images.7fec4c32.js、FeedList.feb647c9.js 和 vue-bucket.min.js。WormW 的報告只列了前三個,少了 vue-bucket.min.js。媒體也跟著分成兩派,Inven Global 的兩篇報導一篇寫三個、一篇寫四個。MotherSphere 給了 vue-bucket.min.js 被改版本的 SHA-256,我傾向相信是四個,但這是我的判斷。
每個檔案被加進去的東西很小,把網址藏在一串整數陣列裡,執行時才組回來,插入一個 script 標籤去載 insightjs.com/l.js,載完就把標籤刪掉。如果 .com 連不上,就改連 insightjs.org。
接下來是整件事真正的破口。啟動器替自己的網頁開了一些原生功能,其中一個是下載檔案。惡意的 l.js 呼叫這個功能,從 analytics.insightjs.com 抓回一個約 205 KB 的檔案,存進 Launcher\log\tinyget\,副檔名取成 .log 掩人耳目,執行完再刪掉。WormW 的報告把這件事寫成:遠端的 JavaScript 能呼叫啟動器的原生下載與執行能力。
那個檔案是 LuaJIT 2.0 的位元組碼,經過混淆。它本身沒有網路功能,會向啟動器的通訊中心註冊一個叫 k2f_chan 的頻道,然後等指令。所有的收發都經過啟動器內建的瀏覽器(Windows 上是 tbs_browser.exe)。
這也是為什麼 debug.log 裡會留下 "k2f_chan registered" 和 "adopted ..." 這兩行,NGA 的自查方法就是靠它。
最後一步是持久化,只發生在 Windows 上。代理程式會在 %LOCALAPPDATA%\Google\Chrome\User Data\PlatformExperienceHelper\ 底下建一個 64 位十六進位名稱的資料夾,放進 platform_experience_helper.dll,再在 HKCU\Software\Classes\CLSID\{E77CC89B-7401-4C04-8CED-149DB35ADD04}\InprocServer32 寫入這個 DLL 的路徑,劫持一個 COM 元件。這個 DLL 在啟動器關掉之後還會繼續運作。
「K2F」是什麼的縮寫?WormW 說它是這個家族的品牌字串,出現在各種內部名稱和攻擊者後台憑證的 CN 裡,但報告沒有解釋它的意思,我也查不到。
時間線:37 天,而且還沒完全清乾淨
圖 4:本文整理的時間線,全部換算成 UTC,台灣時間要加 8 小時(資料來源:crt.sh、RDAP、MotherSphere)
各家來源的時區不一樣,NGA 用的是本地時間,MotherSphere 用 GMT,Inven 的韓文報導用韓國時間,我把它們全部換成 UTC 排在一起。
從 9 月 27 日 06:41 檔案被改,到 11 月 3 日 17:04 官方替換第一個檔案,中間是 37 天又 10 個多小時。標題的 37 天是這樣來的,而且這只是下限。
FeedList.feb647c9.js 的情況比較複雜。MotherSphere 說它在 10 月 28 日已經在源站被換回乾淨版本,但 CDN 有快取,11 月 3 日 22:26 GMT 還有兩個 CDN 節點在送被改過的檔案。WormW 在 11 月 4 日 02:01 到 02:07 UTC 再查一次,結果一樣,Last-Modified 還停在 9 月 27 日 06:42:03。WormW 的報告直接寫了「官方修復不完整」。
攻擊者這邊也沒閒著。NGA 時間線寫的 10 月 29 日 18:52:01(UTC)樣本編譯時間,對應的是 WormW 分析的那個 DLL 的編譯時間戳;WormW 提醒這個值可以偽造,只是剛好跟其他證據對得上。MotherSphere 記錄到 11 月 1 日到 3 日之間,攻擊者的伺服器上傳了五個不同版本的 payload,最後一次是 11 月 3 日 14:56,公開警告前一個多小時。
11 月 3 日 18:31 UTC,也就是台灣和中國時間 11 月 4 日凌晨 2:31,攻擊者的伺服器停止回應。NGA 帖子的「2:30 更新」說的就是這件事。
那則更新還有後半段,說程式碼回落到 insightjs.org,而這個網域「今天被某個好心人註冊」,所以玩家看到的啟動器公告不是官方發的,是好心人透過 insightjs.org 下發的。
我能查證的部分是:insightjs.org 的註冊時間是 11 月 3 日 17:55:42 UTC,註冊商是 Spaceship,名稱伺服器在 Cloudflare,兩份報告都說它現在是一個警告頁面,惡意 payload 的路徑回 404。至於啟動器裡出現了什麼公告,我看不到,這是 NGA 作者的說法。
但這件事本身說明了一個問題,以下是我的推論:被改過的官方檔案還留在某些 CDN 節點和玩家的快取裡,它們會在 .com 失效時去載 .org 的腳本。誰握有 insightjs.org,誰就能在這些啟動器裡跑 JavaScript。這次握有它的人看起來是善意的,但這條路在官方把所有檔案和快取清乾淨之前都還開著。
它偷什麼?名單裡有一整類是 AI 工具
NGA 那份清單已經列得很長,兩份技術報告補上了細節和數字。
圖 5:WormW 從代理程式字串表解出的目標,以有分類統計的部分整理(資料來源:WormW 報告)
WormW 從程式的字串表解出大約 1,790 條目標路徑。有分類統計的部分是:AI/LLM 工具 70 條、雲端與 DevOps 154 條、版本控制與 SSH/GPG 88 條、瀏覽器 66 條。其餘的路徑報告沒有逐類拆開。
AI 工具那一類,列的是 Claude Code 和 Claude Desktop 的設定與憑證、OpenAI Codex 的 auth.json、Gemini CLI 的 oauth_creds.json、Cursor、Windsurf、Aider、Copilot CLI 的 MCP 設定、HuggingFace token 等等。MotherSphere 的目標清單裡也直接寫了 ~\.claude\.credentials.json。VS Code、Cursor、Windsurf 存放機密的 state.vscdb 也在名單上,程式會去撈裡面跟 token、secret、api key、password 有關的欄位。
所以這跟你有什麼關係?如果你在同一台電腦上打 NIKKE 又寫程式,被拿走的可能不只是遊戲帳號,還有能直接花你錢的 API 金鑰,以及能登入你公司伺服器的 SSH 金鑰。
其他項目照列:
- 遠端控制:執行任何程式或 shell 指令、瀏覽和下載任何檔案、截下每個螢幕的畫面。
- NIKKE 帳號:解密啟動器存在
psd.dat和last_user.dat裡的帳號密碼。 - 瀏覽器:Chrome、Edge、Brave、Vivaldi、Opera 和 Firefox 存的密碼,以及 cookie。
- 開發者憑證:
~/.ssh、.git-credentials、PuTTY 和 WinSCP 的連線設定、Docker、GitHub CLI、npm、雲端 CLI 的登入資料、shell 歷史紀錄、專案資料夾裡的.env。 - Token 格式掃描:讀到的任何檔案都會比對 35 種前綴,例如 GitHub 的
ghp_、GitLab 的glpat-、Stripe 的sk_live_、Slack 的xoxp-。 - 加密錢包:28 個瀏覽器錢包擴充功能,包括 MetaMask、Phantom、OKX。MotherSphere 註明錢包檔案只從 Chrome 的設定檔讀。
被拿走了多少?MotherSphere 引用了受害者用 Windows 的 SRUM 紀錄回報的數字:一台電腦在代理程式啟動後幾秒內送出約 947 KB,另一台一小時內送出 146 MB。這些是受害者回報的,報告標成未經作者驗證。
自查:搜到 k2f_chan 就是中了,搜不到也別太放心
NGA 自查帖說「只要存在 k2f_chan 關鍵字即為中招,chrome 寄生並非一定執行」,還加了一句「不要再問 chrome 沒有這個文件怎麼怎麼樣了」。兩份技術報告支持這個說法,理由有兩個。
第一,k2f_chan registered 代表代理程式已經在你的電腦上啟動並接上了攻擊者的伺服器。之後它執行了哪些指令,啟動器的紀錄裡完全不會留下痕跡。MotherSphere 的建議是「假設最壞的情況」。
第二,安裝那個 DLL 不需要你有裝 Chrome。代理程式會自己建立資料夾,不會檢查 Chrome 存不存在。所以「我沒裝 Chrome」不代表沒事,「我在 Chrome 資料夾找不到那個 DLL」也不代表資料沒被拿走。
反過來,搜不到 k2f_chan 也不能證明你沒事。MotherSphere 說十月初的感染資料不足,乾淨的 log 不能排除那段時間的情況。它還提到一台電腦用 Windows Defender 離線掃描沒有抓到那個 DLL,掃毒結果乾淨不代表它不在。
除了 debug.log,兩份報告還列了幾個可以查的地方:
- 啟動器 Local Storage(
%APPDATA%\nikke_launcher\tbs_cache\Local Storage\leveldb\)裡有沒有k2f.agent.state這個鍵。 Launcher\log\tinyget\的紀錄裡有沒有lua downloaded to log\tinyget\這一行。%TEMP%裡有沒有k2f-bcreds-*.db或k2f_screen_*.jpg,不過它們用完就會被刪。- Windows 上可以查 SRUM 的網路用量紀錄,MotherSphere 說這是唯一能量出資料送出多少的地方。
WormW 的 GitHub 也放了 YARA 和 Suricata 規則,如果你在公司負責端點或網路監控,可以直接拿去用;它提醒其中兩條只適合獵捕,未經調整不要拿來直接封鎖。
止損:比 NGA 那份清單多幾個細節
圖 6:本文依兩份報告整理的處理順序(資料來源:MotherSphere、WormW)
NGA 那份「中招後能做的事」方向是對的:改掉瀏覽器存的所有密碼、換掉私鑰和伺服器密碼、錢包換新、重灌系統。兩份技術報告在幾個地方講得更細,有些細節沒照做,可能出事。
改密碼要從另一台乾淨的裝置改。 如果代理程式還在跑,你在中毒的電腦上輸入的新密碼一樣會被看到。MotherSphere 建議的順序是先 NIKKE,再來是電子郵件、Discord、網銀和瀏覽器存過的其他帳號,全部開兩步驟驗證,並且登出所有已登入的工作階段。
登出和撤銷比改密碼更重要。 被偷的 cookie 讓攻擊者不用密碼就能登入,所以要把工作階段全部踢掉。API 金鑰、SSH 金鑰、雲端憑證要撤銷重發,不是只改密碼。WormW 建議照它的收集清單逐項處理,優先順序是 AI 工具的 API 金鑰和 OAuth token、VS Code 系列的機密、MCP 設定裡的金鑰、雲端金鑰、套件庫 token、CI 和 Kubernetes 憑證、SSH/GPG 金鑰、瀏覽器工作階段。如果你用 Claude Code、Codex 或 Gemini CLI,請到各家的主控台把現有的金鑰撤掉,再重新登入一次。
錢包是改不了的,只能搬家。 助記詞外洩之後無法「更改」,唯一的辦法是建一個新助記詞的新錢包,把資產轉過去。
刪機碼只刪 HKCU 那一個。 {E77CC89B-7401-4C04-8CED-149DB35ADD04} 這個 CLSID 在每一台 Windows 的 HKLM 底下本來就存在,指向家長監護功能的 wpc.dll。惡意的是 HKCU 底下那一份。刪錯會動到系統元件。
刪檔案只刪那個 64 位十六進位名稱的子資料夾。 PlatformExperienceHelper 這個資料夾本身是 Chrome 正常的東西,Chrome 的安裝目錄裡也有一個 Google 簽章過的同名執行檔。惡意的是裡面那個以 64 位十六進位命名的子資料夾,以及其中沒有簽章的 platform_experience_helper.dll。MotherSphere 的步驟是先刪機碼、重開機,再刪檔案,因為受害者回報 DLL 在載入時會被鎖住。
最保險還是重灌。 兩份報告都這樣說。代理程式能執行任意指令,你無法確定它有沒有留下別的東西。
hosts 檔只擋得住現在這一批。 NGA 建議把三個網域指到 0.0.0.0,這對還沒中的人是合理的臨時措施,但攻擊者換一個網域就沒用了。MotherSphere 另外列了兩個 IP:89.127.233.127 和 89.126.250.172,也同樣只對目前的基礎設施有效。
修好之前不要開啟動器,開之前先清快取。 官方說已經修正(見下一節),但在那之後仍有 CDN 節點送出被改過的檔案,而且被改過的檔案也可能還在你自己電腦的快取裡,兩份報告都建議刪掉 %APPDATA%\nikke_launcher\tbs_cache,Proton 使用者要刪的是 Wine prefix 裡那一份。
官方到現在說了什麼?
很少,而且來得晚。
Inven Global 11 月 3 日的英文報導寫的是,截稿時 SHIFT UP 和 Level Infinite 都沒有公開回應;同一天另一篇從韓文版翻譯的報導說,到 11 月 4 日早上,兩家公司的官方管道都沒有發布聲明。Enduins 和 Gurugamer 11 月 4 日的報導也這樣寫。
之後 Level Infinite 回應了。根據 BigGo 的報導,Level Infinite 11 月 4 日在官方遊戲社群的公告和日文官方 X 帳號上表示:已確認 PC 啟動器的腳本檔案可能遭第三方竄改的異常,當天凌晨 2 點半左右完成了客戶端的修正與更新,目前正在確認影響範圍,後續措施會另行公告。這段話我沒有讀到官方原文,是依 BigGo 的轉述翻譯的。BigGo 的時間線把這個 2 點半標為韓國時間,換算成 UTC 是 11 月 3 日 17:30,跟兩份報告記錄的三個檔案在 17:04 到 17:21 被替換,時間大致對得上。
所以官方承認的是「可能被竄改」和「已經修正」。它沒有說檔案被改了多久,沒有說有沒有玩家的電腦被裝上代理程式、被拿走了什麼,也沒有告訴玩家該做什麼。而且 MotherSphere 在 11 月 3 日 22:26 GMT、WormW 在 11 月 4 日 02:07 UTC,都還看到 FeedList 在部分 CDN 節點上是被改過的版本,至少在那兩個時間點,「已經修正」並不完整。
官方說有在社群和 X 上發公告,這也讓 NGA 帖子那句「啟動器公告是好心人透過 insightjs.org 發的」更難判斷。玩家在啟動器裡看到的究竟是哪一則,我沒辦法確認。
NGA 帖子的結尾罵的是韓國人。被改的檔案放在 playerinfinite.com,這是發行商 Level Infinite 的網域,MotherSphere 記錄它由騰訊雲的 COS 託管。開發商 SHIFT UP 在這件事裡扮演什麼角色,目前沒有任何資料可以判斷。要追究責任,該先回答問題的是管理這個 CDN 的一方。
我的看法
這件事讓我在意的,是啟動器的設計。
一個遊戲啟動器把公告和新聞用網頁的方式載入,這很常見。但它同時讓這些網頁能呼叫原生的下載和執行功能,等於把「改得到 CDN 上一個 JS 檔」直接升級成「能在每一台開著啟動器的玩家電腦上執行任意程式」。WormW 說的破口就在這裡,CDN 被改只是起點。
這次的攻擊者很有耐心。網域註冊後幾小時就改了檔案,接下來將近四週,公開紀錄裡只看得到憑證申請和伺服器搬遷,10 月 23 日才有人回報代理程式啟動,而且不是每次開啟動器都會送。我猜這是刻意壓低被發現的機率,但報告裡沒有證據能說明攻擊者的意圖。
我自己的判斷是:如果你是在電腦上寫程式、又在同一台電腦上玩 PC 版 NIKKE 的人,就算搜不到 k2f_chan,也值得花一個晚上把 AI 工具和雲端的金鑰輪替一輪。輪替的成本是幾十分鐘,金鑰被拿去跑帳單的成本可能是幾千美元。
Level Infinite 說後續措施會另行公告。我希望那份公告至少回答四個問題:CDN 的寫入權限是怎麼外流的?除了這四個檔案,同一段時間還有沒有別的資源被改?受影響的玩家大概有多少?什麼時候會強制清除所有 CDN 節點和玩家端的快取?
什麼會讓我改變看法?如果官方公布的調查顯示只有很小一部分玩家真的收到了代理程式,風險評估可以往下調;兩份報告目前都沒有任何受影響人數的估計。如果啟動器改版,拿掉網頁內容呼叫原生下載功能的能力,我會覺得這個問題被從根本上處理了。反過來,如果之後發現其他 Level Infinite 的遊戲啟動器也載入了同一批被改過的共用檔案(aegis-fix.min.js 和 vue-bucket.min.js 都放在 comm/assets/lib/,路徑上看起來是共用的),影響範圍就不只 NIKKE 了;這一點目前兩份報告都沒有確認。
如果你想讀更多類似的事件分析,本站之前寫過 php2shell 兩個 PHP 遠端執行漏洞的深度解析,以及一個人加上數百個 AI 代理攻破 PaperCut 的案例。



