Factorioの乱数をリバースエンジニアリングして品質クラフトを予測する
Reversing Factorio's RNG
Factorioの品質システムは乱数に依存しているが、その中身はtaus88という3つのLFSRを組み合わせたPRNGだ。ゲームバイナリとデバッグシンボルを使ってアルゴリズムを特定し、内部状態を再現すれば、次にどのクラフトで高品質アイテムが得られるかを事前に知ることができる。線形代数の基礎があれば理解できる、実践的なリバースエンジニアリングの記録。
もし正確なアルゴリズムとその内部状態が分かれば、同じアルゴリズムをその状態に対して実行するだけで、ゲーム内部で見られるのと同じ出力が得られる。
- strstr
大学の入門クラスでこれのもっと簡単なバージョンをやったよ。じゃんけんがサブコンポーネントのクラス対抗戦があって、引き分けはランダムで決着をつけてたんだ。JavaのPRNGを細工して、引き分けを全部勝ちにできるようにした。
PRNGは最初の呼び出し時にusec時間でシードされてた。乱数生成器を何度も呼んでエントロピーを集めて、ありそうなusec時間をスキャンしてシードを見つけた。それからPRNGを調整して引き分けに勝てるようにしたんだ。
正直、実装は間違ってたと思うけど、理論は合ってたはずwww。
- pema99
めちゃくちゃクール
- lowbloodsugar
狂人だ。天才。