切換選單
切換偏好設定選單
切換個人選單
尚未登入
若您做出任何編輯,會公開您的 IP 位址。

「粒子探測器」:修訂間差異

出自華麥百科
無編輯摘要
Njes9701留言 | 貢獻
無編輯摘要
 
第1行: 第1行:
[[檔案:Mess Detector.webp|縮圖|粒子探測器]]
[[檔案:Mess Detector.webp|縮圖|粒子探測器]]
粒子探測器,通過一系列紅石裝置測量了TNT點燃跳起時的隨機角度反向計算Math.random種子碼
粒子探測器(Mess Detector)是一台通過一系列紅石裝置測量 TNT 點燃跳起時的隨機角度,進而反向計算 Minecraft 內 `Math.random()` 種子碼的超級電腦。


可用於預測MINECRAFT內所有隨機事件的發生。<blockquote>此機器擁有100%的預測正確率該機器極度敏感,只要有一玩家在任何一個維度的一個角落食物並產生出食物碎屑粒子機器就可以檢測這個世界有人吃食物了!</blockquote>
此機器可用於預測 Minecraft 幾乎所有隨機事件。<blockquote>此機器擁有 100% 的預測正確率該機器極度敏感,只要有一玩家在世界任何維度的任何角落吃食物並產生碎屑粒子機器就檢測到該行為!</blockquote>


== 起因 ==
== 起因 ==
粒子探測器的誕生是為了用來造Minecraft中最的經驗值農場,終界龍農場。
粒子探測器的誕生是為了建造 Minecraft 效率終界龍經驗值農場。由於玩家每秒最多只能吸收 10 顆經驗球,終界龍死亡會掉落大量經驗球其中包含兩顆極大的經驗)。為了從中篩選出這兩顆大球並優化吸收順序開發者建造了這台探測器預測掉落規律,確保玩家始終優先最高價值的經驗
 
由於玩家每秒最多只能吸收10顆經驗球,但我們知道終界龍每次死亡會掉落經驗球
 
其中兩顆球特別大顆,為了去分類出這兩顆大球,所以建造了粒子探測器預測球的掉落順序
 
確保每次玩家總是起終界龍那兩顆特別大的球,以確保最高效率獲取經驗


== Math.random 調用清單 ==
在 Minecraft 中,許多行為都會調用 `Math.random()`。了解這些調用點對於追蹤隨機種子至關重要。以下是主要的調用清單:
* '''生物生成:''' 玩家、怪物、盔甲架的自然生成、加載或維度傳送(每次 3 次調用)。
* '''擊退計算:''' 實體受到攻擊時的擊退方向(調用次數不固定)。
* '''粒子效果:''' 物品損壞粒子(5 次)、食用食物粒子(次數不固定,完整吃完一個食物約 46 次)。
* '''實體創建:''' 物品實體(4 次)、經驗球實體(4 次)。
* '''TNT 隨機角度:''' TNT 點燃時的跳起角度('''1 次''',本機器的主要偵測對象)。
* '''方塊互動:''' 液體混合產生石頭/鵝卵石(16 次)、在終界嘗試用水桶放水(24 次)。
* '''其他:''' 從熔爐取出物品獲取經驗(當平均值在 0 到 1 之間時調用 1 次)、刷怪算法中的群組大小(1 次)。


== 內部結構 ==
== 內部結構 ==
機器由複雜的紅石電路組成,模擬了 48 位元的數學運算:
* '''48-bit 乘法器與加法器:''' 用於執行 LCG 公式運算。
* '''7 個 8-bit 記憶體:''' 存儲連續偵測到的角度數據。
* '''TNT 角度偵測陣列:''' 包含 692 個精確排列的偵測器。
* '''格點還原電路:''' 執行線性代數逆運算與格點縮減邏輯。
* '''十六進位轉十進位轉換器:''' 將計算結果輸出為人類可讀的種子碼。


* 48-bit 乘法器
== 破解原理 ==
* 12-bit 乘法器
Minecraft 的隨機數生成器(RNG)基於 Java 的'''線性同餘生成器(LCG)''':
* 累計加法器模組
:<math>\text{seed}_{\text{new}} = (\text{seed}_{\text{current}} \times a + b) \pmod m</math>
* TNT角度偵測器
<math>a = 25214903917</math>,<math>b = 11</math>,<math>m = 2^{48}</math>。
* 十六進位to十進位轉換器
* 7個 8bit 記憶體
 
== 原理 ==
Minecraft本身運用的隨機數法是Linear Congruential generator(LCG)線性同餘生成器
 
公式為:seed_new = (seed_current * a) + b (mod m)
 
java使用的參數為:a = 25214903917 b = 11 m = 2^48  
 
而最後輸出隨機種子碼,但只會有高位前32bit輸出
 
 
LCG在隨機數生成中具有一定的隨機性,但其內部的結構使得它可預測,這些可預測性可以被利用來進行破解


以下是LCG幾個弱點。
=== LCG 的弱點 ===
1. '''低位比特重複性:''' 雖然 Java 只輸出高 32 位元,但低位位元的週期性極強。
2. '''格點結構(Lattice Structure):''' 如果將連續的隨機數調用視為多維空間中的坐標,它們會排列成極其規整的網格(格點),而非真正的隨機分佈。這台機器正是利用這一點,將隨機種子破解問題轉化為向量空間中的幾何搜尋問題


* '''低位比特的重複性:''' 在LCG的生成程中,低位比特往往具有高度的重複性,這代表著相同的低位比特能會在不同隨機數中反覆出現,Java通過僅輸出高位的32位來減少這種重複性對隨機性的影響,然而,低位的這種重複特性依然存在,在某些情況下可被利用進行破解
=== 格點理論與 LLL 演算法 ===
* '''行列式弱點:''' 假設使用n×n矩陣來表示LCG的輸出,其中每一行代表連續n次的LCG調用結果計算這個矩陣的行列式時其結果會是k*m^(n-1)形式,這裡的k是一個整數。如果k等於1,則這些向量可以生成LCG後續所有可能的點,這代表著這些點之間的關係是可預測的,並且可以通過數學方法來逆向推導出最初的隨機種子
當我們獲得 7 個連續(或已知間隔)的 TNT 角度時,我們實際上是在 7 維空間中定位一個點。
* '''網格結構:''' 當LCG結果被繪製在二或更高維度的空間中時它們往往會形成個網格狀結構,這結構看起來並不隨機。這種網格特性使得它在視覺上表現出規則性,而這種規則性正是在破解中所利用的關鍵。通過分析這些網格,我們可以推導出LCG的內部狀態,進而反推LCG的隨機數生成過程
* '''基底向量:''' 變換我們以建立一組描述該格點基底向量
* '''LLL 縮減(LLL Reduction):''' 原始基底向量可能非常傾斜且難以計算機器模擬了 LLL 演算法(或預先計算好的縮減矩陣將基底轉換為接近正交的向量。
* '''逆矩陣運算:''' 透過應用逆線性變換,機器能將偵測到角度範圍(一個 7 超立方體)映射回整數格點空間,從而精確鎖定唯一的 48 位元


== 實踐:TNT 角度偵測 ==
機器在半徑 120 格的圓周上佈置了 '''692 個偵測器'''(利用拌線鉤 Tripwire 實現)。
1. '''偵測機制:''' 當 TNT 被點燃時,`Math.random()` 會決定其水平運動的角度(0 到 2π)。
2. '''精確度:''' TNT 爆炸前會與拌線鉤碰撞。系統會記錄下觸發的偵測器編號。若多個偵測器同時觸發,則取逆時針方向最後一個。
3. '''種子範圍:''' 每個偵測器對應一個特定的種子範圍(高 26 位元)。通過連續 7 次探測,將 7 個範圍交集,根據格點理論,在 7 維空間中只有一個點(即正確的種子碼)會符合所有條件。


這台機器有一個半徑120格的圓區域,且在周圍放上了692個偵測器用偵測TNT隨發射角度,每次偵測都會發射7顆TNT來偵測角度拿到7個角度後進行反向計算隨機種子碼,組成一個7維超立方體,接下來就開始使用線性代數進行破解
== 數學模型 ==
具體計算涉及將 LCG 公式展開為矩陣式:
:<math>s = [(v - \bar{b}) M^{-1}] \cdot M + \bar{b} \pmod{2^{48}}</math>
其中 <math>v</math> 是偵測到的邊界向量,<math>M</math> 是基LCG 參數 <math>a</math> 構成的變換矩陣。器透過紅石電路處理這些龐大的矩陣數值最終還原最初48-bit 內部狀態


[[分類:紅石-遊戲內技術]]
[[分類:紅石-遊戲內技術]]

於 2026年2月9日 (一) 16:24 的最新修訂

粒子探測器

粒子探測器(Mess Detector),是一台通過一系列紅石裝置測量 TNT 點燃跳起時的隨機角度,進而反向計算 Minecraft 內 `Math.random()` 種子碼的超級電腦。

此機器可用於預測 Minecraft 內幾乎所有隨機事件。

此機器擁有 100% 的預測正確率。該機器極度敏感,只要有一名玩家在世界任何維度的任何角落吃下食物並產生碎屑粒子,機器就能檢測到該行為!

起因 編輯 編輯原始碼

粒子探測器的誕生是為了建造 Minecraft 中效率最高的終界龍經驗值農場。由於玩家每秒最多只能吸收 10 顆經驗球,而終界龍死亡時會掉落大量經驗球(其中包含兩顆極大的經驗球)。為了從中篩選出這兩顆大球並優化吸收順序,開發者建造了這台探測器來預測掉落規律,確保玩家始終優先吸取最高價值的經驗球。

Math.random 調用清單 編輯 編輯原始碼

在 Minecraft 中,許多行為都會調用 `Math.random()`。了解這些調用點對於追蹤隨機種子至關重要。以下是主要的調用清單:

  • 生物生成: 玩家、怪物、盔甲架的自然生成、加載或維度傳送(每次 3 次調用)。
  • 擊退計算: 實體受到攻擊時的擊退方向(調用次數不固定)。
  • 粒子效果: 物品損壞粒子(5 次)、食用食物粒子(次數不固定,完整吃完一個食物約 46 次)。
  • 實體創建: 物品實體(4 次)、經驗球實體(4 次)。
  • TNT 隨機角度: TNT 點燃時的跳起角度(1 次,本機器的主要偵測對象)。
  • 方塊互動: 液體混合產生石頭/鵝卵石(16 次)、在終界嘗試用水桶放水(24 次)。
  • 其他: 從熔爐取出物品獲取經驗(當平均值在 0 到 1 之間時調用 1 次)、刷怪算法中的群組大小(1 次)。

內部結構 編輯 編輯原始碼

機器由複雜的紅石電路組成,模擬了 48 位元的數學運算:

  • 48-bit 乘法器與加法器: 用於執行 LCG 公式運算。
  • 7 個 8-bit 記憶體: 存儲連續偵測到的角度數據。
  • TNT 角度偵測陣列: 包含 692 個精確排列的偵測器。
  • 格點還原電路: 執行線性代數逆運算與格點縮減邏輯。
  • 十六進位轉十進位轉換器: 將計算結果輸出為人類可讀的種子碼。

破解原理 編輯 編輯原始碼

Minecraft 的隨機數生成器(RNG)基於 Java 的線性同餘生成器(LCG)

seednew=(seedcurrent×a+b)(modm)

其中 a=25214903917b=11m=248

LCG 的弱點 編輯 編輯原始碼

1. 低位比特重複性: 雖然 Java 只輸出高 32 位元,但低位位元的週期性極強。 2. 格點結構(Lattice Structure): 如果將連續的隨機數調用視為多維空間中的坐標,它們會排列成極其規整的網格(格點),而非真正的隨機分佈。這台機器正是利用這一點,將隨機種子破解問題轉化為向量空間中的幾何搜尋問題。

格點理論與 LLL 演算法 編輯 編輯原始碼

當我們獲得 7 個連續(或已知間隔)的 TNT 角度時,我們實際上是在 7 維空間中定位一個點。

  • 基底向量: 透過線性變換,我們可以建立一組描述該格點的基底向量。
  • LLL 縮減(LLL Reduction): 原始的基底向量可能非常傾斜且難以計算。機器模擬了 LLL 演算法(或預先計算好的縮減矩陣),將基底轉換為接近正交的向量。
  • 逆矩陣運算: 透過應用逆線性變換,機器能將偵測到的角度範圍(一個 7 維超立方體)映射回整數格點空間,從而精確鎖定唯一的 48 位元種子。

實踐:TNT 角度偵測 編輯 編輯原始碼

機器在半徑 120 格的圓周上佈置了 692 個偵測器(利用拌線鉤 Tripwire 實現)。 1. 偵測機制: 當 TNT 被點燃時,`Math.random()` 會決定其水平運動的角度(0 到 2π)。 2. 精確度: TNT 爆炸前會與拌線鉤碰撞。系統會記錄下觸發的偵測器編號。若多個偵測器同時觸發,則取逆時針方向最後一個。 3. 種子範圍: 每個偵測器對應一個特定的種子範圍(高 26 位元)。通過連續 7 次探測,將 7 個範圍交集,根據格點理論,在 7 維空間中只有一個點(即正確的種子碼)會符合所有條件。

數學模型 編輯 編輯原始碼

具體計算涉及將 LCG 公式展開為矩陣形式:

s=[(vb¯)M1]M+b¯(mod248)

其中 v 是偵測到的邊界向量,M 是基於 LCG 參數 a 構成的變換矩陣。機器透過紅石電路處理這些龐大的矩陣數值,最終還原出最初的 48-bit 內部狀態。