搜尋

MinecraftJVMHotSpot遊戲修改器

返回清單
切換到指定樓層
通知這文章過時或找檔案 發表主題

[電玩遊戲] 《Minecraft》外部JVM原始碼下載 HotSpot記憶體結構整理、ImGui覆蓋層、Entity ESP範例

[複製連結]
1
o122334234 ( Lv.70 熾天使 ) 發表於 1 小時前 | 只看該作者 回覆獎勵 |降序瀏覽 |閱讀模式

《Minecraft》外部JVM記憶體讀取 快速閱讀精華



  • 🎯 核心概念:透過外部程序讀取 java.exe 記憶體,整理 JVM HotSpot 結構,無需注入遊戲程序即可取得玩家座標、世界實體等資料
  • 🔧 技術架構:Attach 到 java.exe → 定位 jvm.dll → 整理 Klass/Field 結構 → 建立 Minecraft SDK → ImGui + DX11 繪製覆蓋層
  • ⚠️ 重要提醒:程式碼僅供學術參考,部分偏移值為特定版本專屬,直接使用可能導致遊戲崩潰或帳號限制
  • 📦 內容物:Process/RPM 包裝器、HotSpot 字典掃描、類別欄位查找、Entity ESP / Items ESP 範例模組




外部JVM注入技術簡介



這是一個針對 Minecraft Java 版的外部記憶體讀取範例專案,展示如何在不注入遊戲程序的情況下,透過讀取 java.exe 的記憶體空間來取得遊戲內部資料。

傳統的遊戲修改通常需要將 DLL 注入到目標程序中,但這個專案採用外部附加(External Attach)的方式,僅透過 Windows API 的 ReadProcessMemory 來整理 JVM 的 HotSpot 結構,從而降低被反作弊系統偵測的風險。


👉 GM後台版 遊戲 推薦 ⬇️⬇️⬇️ 快速玩各種二次元動漫手遊app



重要提醒與風險聲明



  • 學術參考性質:此原始碼並非完整的商業級產品,部分程式碼較為雜亂,偏移值(Offsets)與混淆名稱對應表(Mappings)僅適用於特定 Minecraft 版本,直接使用可能導致遊戲崩潰。
  • 使用風險:雖然外部讀取比內部注入更難被偵測,但 Hypixel 等伺服器仍可能透過行為分析或記憶體完整性檢查發現異常,導致帳號遭到限制。
  • 法律聲明:本技術僅供遊戲修改學習與單機模式使用,在多人連線伺服器中使用可能違反服務條款,請自行評估法律風險。


HotSpot結構整理原理



Minecraft Java 版運行在 Java Virtual Machine(JVM)上,而 HotSpot 是 Oracle/OpenJDK 的預設虛擬機實作。要從外部讀取遊戲資料,關鍵在於整理 JVM 內部的 Klass 結構

整個流程分為以下幾個步驟:

  • 附加到進程:透過 OpenProcess 取得 java.exe 的 HANDLE,具備 PROCESS_VM_READ 權限。
  • 定位 JVM.dll:掃描進程模組列表,找到 jvm.dll 的基址,這是 HotSpot 的主要實作檔案。
  • 整理全局符號:在 jvm.dll 的記憶體空間中搜尋特定的全局變數(如 Universe::_collectedHeap、SystemDictionary::dictionary),這些指標指向 JVM 的核心資料結構。
  • 掃描類別字典:透過 SystemDictionary 走訪所有已載入的 Klass(Java 類別在 JVM 中的內部表示),比對類別名稱的符號(Symbol)來定位目標類別,如 net.minecraft.client.Minecraft。
  • 整理欄位偏移:找到目標 Klass 後,讀取其 FieldInfo 結構,取得各欄位(如 player、world、renderManager)在物件記憶體中的偏移量,後續即可透過這些偏移讀取實際資料。


這種方式不需要注入任何 DLL 到 JVM 中,純粹透過 Windows API 讀取記憶體,因此對遊戲程序來說是「隱形」的。

SDK功能與ESP模組說明



專案內部已經針對 Minecraft 的常用物件建立了包裝器(Wrapper),將複雜的記憶體讀取封裝成簡單的 C++ 類別:

類別名稱對應遊戲物件主要功能
CMinecraftnet.minecraft.client.Minecraft取得遊戲實例、玩家物件、世界資訊、視角矩陣
CPlayernet.minecraft.client.entity.EntityPlayerSP玩家座標、生命值、手持物品、視線方向
CWorldnet.minecraft.client.multiplayer.WorldClient世界中的實體列表、方塊資訊
CEntitynet.minecraft.entity.Entity通用實體資訊(怪物、動物、物品實體)
CRenderManagernet.minecraft.client.renderer.EntityRenderer視角矩陣、投影參數,用於世界座標轉螢幕座標


基於這些包裝器,範例中提供了兩個基礎模組:

  • Player ESP(玩家透視):讀取世界中的所有玩家實體,將其位置轉換為螢幕座標,並在 ImGui 覆蓋層上繪製方框與血量條。這個範例展示瞭如何處理實體迭代與世界轉螢幕的數學運算。
  • Items ESP(物品透視):針對地面上的物品實體(EntityItem)進行追蹤,繪製物品名稱與距離。這個範例側重於如何識別特定實體類型並讀取其 NBT 資料(如物品堆疊資訊)。


原始碼下載與編譯說明



這個專案主要作為技術參考,程式碼風格與結構並非最佳化,且硬編碼的偏移量需要根據你的 Minecraft 版本進行調整。



所有站內附件皆會附上安全掃描報告
請會員查看純淨度百分比後判斷使用



相關檔案須知:
取得檔案前,請先詳細閱讀文章內容
避免不必要錯誤與誤會發生。
也可多參考文章討論樓層內容
了解附件檔案相關討論資訊。





編譯前請確認以下環境:

  • Visual Studio 2019 或更新版本,具備 C++17 支援
  • Windows SDK 10.0.19041.0 或更新版本
  • DirectX 11 SDK(已包含於 Windows SDK)
  • ImGui 原始碼(需放置於專案目錄的 ImGui/ 資料夾中)


編譯步驟:

  • 解壓縮下載的 Gift2 檔案
  • 使用 Visual Studio 開啟 .sln 方案檔
  • 確認平臺設定為 x64 Release(因 Minecraft 通常為 64 位元)
  • 建置方案(Build Solution)
  • 將產生的 DLL/EXE 放置於獨立資料夾,並確保 ImGui 的字型檔案(如有使用)位於正確路徑


使用前設定:

在執行程序前,你需要編輯 Source/Offsets.h(或類似標頭檔),根據當前 Minecraft 版本更新以下數值:

  • klass_Minecraft:Minecraft 類別在 JVM 中的內部名稱雜湊或符號指標(版本不同,混淆名稱會變化)
  • field_tdePlayer:tdePlayer 欄位在 Minecraft 類別中的偏移量
  • field_tdeWorld:tdeWorld 欄位偏移量
  • klass_Entity:Entity 基礎類別資訊


這些偏移量可以透過分析 Minecraft 的 obfuscation map(混淆對照表)或使用記憶體掃描工具(如 Cheat Engine)在遊戲運行時手動找出。

常見問題Q&A



Q:這個程式會被 Minecraft 的反作弊系統偵測到嗎?

理論上,由於這是外部讀取(External)而非 DLL 注入(Internal),並且沒有修改遊戲記憶體的內容,僅僅是讀取資料,因此對於傳統的簽名掃描或記憶體完整性檢查來說,確實比內部注入更難以偵測。然而,Hypixel 等伺服器可能會透過行為分析(如觀察你的操作反應時間是否過於完美)來判斷是否使用輔助工具。此外,如果防護軟體掃描到你在讀取 java.exe 的記憶體,仍可能標記為可疑行為。

Q:這個範例支援哪個版本的 Minecraft?

原始碼中的偏移量和混淆名稱對應表(Mappings)是針對特定版本硬編碼的(根據作者描述,這是舊專案)。如果你想用在較新的版本(如 1.20+),你必須手動更新 Source/Offsets.h 中的數值,或者重新分析新版本的 jvm.dll 與 Minecraft 的類別結構。這需要具備 Java 位元組碼與 JVM 記憶體佈局的進階知識。

Q:為什麼選擇外部讀取而不是傳統的 DLL 注入?

外部讀取(External)與內部注入(Internal)各有優劣。外部讀取的主要優勢在於穩定性與安全性:由於程式碼運行在獨立的進程中,即使你的程式崩潰也不會導致遊戲閃退;同時,因為沒有在遊戲地址空間中執行可疑代碼,對於 Ring3 層級的反作弊掃描有較強的抵抗性。然而,缺點是讀取速度較慢(需要透過 Windows API 跨進程讀取),且無法直接調用遊戲內的函數或修改記憶體(只能讀取),因此無法實現如「無敵模式」或「瞬移」等需要修改伺服器校驗資料的功能。

Q:編譯時出現「無法找到 ImGui.h」或 DirectX 相關錯誤怎麼辦?

這通常是因為專案設定中的「Include Directories」沒有正確指向你的 ImGui 與 DirectX SDK 路徑。解決步驟如下:

  • 確認你已從 ImGui GitHub 下載原始碼,並將整個資料夾放置於專案目錄下(例如與 .sln 同層的 ImGui/ 資料夾)。
  • 在 Visual Studio 中,對專案點擊右鍵 → Properties → Configuration Properties → C/C++ → General → Additional Include Directories,加入 `$(SolutionDir)ImGui;`(路徑依你的實際擺放位置調整)。
  • 對於 DirectX 錯誤,確認你的 Windows SDK 版本在專案設定中是已安裝的版本(Project Properties → General → Windows SDK Version)。
  • 如果缺少 d3d11.lib 連結錯誤,檢查 Linker → Input → Additional Dependencies 是否包含 d3d11.lib 與 d3dcompiler.lib。


Q:如何找到新版本的偏移量(Offsets)?

更新偏移量需要結合 Cheat Engine 與 Java 位元組碼分析工具。簡易流程如下:

  • 使用 CE 附加到 java.exe,搜尋已知數值(如你的玩家座標 X),找到記憶體位址。
  • 分析該位址附近的記憶體佈局,找到指向 Entity 或 World 物件的指標。
  • 使用 RecafJD-GUI 反編譯 Minecraft 的 .jar 檔案,查看目標類別的欄位名稱與型別。
  • 在 Source/Offsets.h 中更新對應的類別名稱雜湊值與欄位偏移量。


這需要一定的 C++ 與 Java 底層知識,不建議程式設計初學者嘗試修改。





大家正在看啥


收藏收藏 分享文章到FB上分享
回覆 使用道具 檢舉
複製專屬你的推廣連結:發至FB與各論壇宣傳:累積點數換GP商品 & 藍鑽
每五點閱率就可以兌換藍鑽積分或遊戲點卡 夢遊推廣文章換GP商品

你需要登入後才可以回覆 登入 | 加入會員

本版積分規則

Copyright (C) 2010-2020 夢遊電玩論壇

廣告合作:請直接聯繫我們,並附上您預刊登位置的預算。  

快速回覆 返回頂端 返回清單