逆向Factorio的RNG,预测未来
Reversing Factorio's RNG
Factorio引入物品品质机制后,官方称其本质是统计学问题。但我发现,作为确定性游戏,它使用的伪随机数生成器(PRNG)并非真正的随机。通过逆向工程,我确认游戏底层使用的是Boost库中的taus88生成器,它由三个线性反馈移位寄存器(LFSR)组合而成。LFSR在数学上具有线性特性,这意味着只要掌握其算法和内部状态,就能精确预测未来的随机输出。我利用Ghidra和Binary Ninja反编译游戏二进制文件,验证了这一猜想,并成功在Python中复现了状态更新逻辑。现在,我们可以在游戏运行时同步计算,提前预知哪些物品会获得高品质。
如果我们知道确切的算法及其内部状态,就可以运行相同的算法并获得相同的输出,从而预测游戏中即将发生的“随机”事件。