逆向Factorio的RNG,预测未来

Reversing Factorio's RNG

逆向Factorio的RNG,预测未来

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

如果我们知道确切的算法及其内部状态,就可以运行相同的算法并获得相同的输出,从而预测游戏中即将发生的“随机”事件。
  1. myhf

    太厉害了!

  2. strstr

    我在大学入门课里做过一个简化版。当时课程比赛里有个石头剪刀布的小环节,平局时用随机数决胜负。你可以 rigged Java 的 prng,让自己赢下所有平局。

    这个 prng 首次调用时是用微秒级时间作为种子的。我先大量调用 rng 来收集熵,然后扫描合理的微秒时间范围来反推种子。接着我预先初始化 prng,确保自己能赢下平局。

    老实说,我估计自己实现得不对,但理论上是这么回事,哈哈。

  3. pema99

    太酷了

同日更多故事

2026-09-16