粒子探測器

於 2024年9月2日 (一) 17:22 由 Njes9701留言 | 貢獻 所做的修訂 →‎原理

粒子探測器,通過一系列的紅石裝置測量了TNT點燃跳起時的隨機角度反向計算Math.random的種子碼

粒子探測器

可用於預測MINECRAFT內所有隨機事件的發生。

此機器擁有100%的預測正確率,該機器也極度敏感,只要有一玩家在任何一個維度的一個角落中吃了食物並且產生出食物碎屑粒子該機器就可以檢測這個世界有人吃食物了!

內部結構

  • 48-bit 乘法器
  • 12-bit 乘法器
  • 累計加法器模組
  • TNT角度偵測器
  • 十六進位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的生成過程中,低位比特往往具有高度的重複性,這代表著相同的低位比特可能會在不同的隨機數中反覆出現,Java通過僅輸出高位的32位來減少這種重複性對隨機性的影響,然而,低位的這種重複特性依然存在,在某些情況下可被利用進行破解。
  • 行列式弱點: 假設使用n×n的矩陣來表示LCG的輸出,其中每一行代表連續n次的LCG調用結果。當計算這個矩陣的行列式時,其結果會是k*m^(n-1)的形式,這裡的k是一個整數。如果k等於1,則這些向量可以生成LCG後續所有可能的點,這代表著這些點之間的關係是可預測的,並且可以通過數學方法來逆向推導出最初的隨機種子。
  • 網格結構: 當LCG的結果被繪製在二維或更高維度的空間中時,它們往往會形成一個網格狀的結構,這種結構看起來並不隨機。這種網格特性使得它在視覺上表現出規則性,而這種規則性正是在破解中所利用的關鍵。通過分析這些網格,我們可以推導出LCG的內部狀態,進而反推LCG的隨機數生成過程。


這台機器有一個半徑120格的圓形區域,且在周圍放上了692個偵測器用於偵測TNT隨機發射角度,每次偵測都會發射7顆TNT來偵測角度,拿到7個角度後進行反向計算出隨機種子碼,組成一個7維的超立方體,接下來就開始使用線性代數進行破解。