Pseudo-Random Number Generators (PRNG)
Often the default random function in whatever language is not cryptographically secure, making it possible to predict values
Python: import random = Mersenne Twister
import random = Mersenne Twisterimport random
# pip install mersenne-twister-predictor
from mt19937predictor import MT19937Predictor
predictor = MT19937Predictor()
for _ in range(624):
x = random.getrandbits(32)
predictor.setrandbits(x, 32) # Submit samples here
# When enough samples are given, you can start predicting:
assert random.getrandbits(32) == predictor.getrandbits(32)Truncated samples (symbolic solver)
Low bits in GF(2)
32-bit seed
mt_rand() with brute force tool, also links to writeupsJavaScript: Math.random() = xorshift128+
Math.random() = xorshift128+Truncated samples (floored)
Math.random() predictions using Z3In browser cross-origin with subdomain
Java: java.util.Random() = Linear Congruential Generator
java.util.Random() = Linear Congruential GeneratorTruncated samples
Bash: $RANDOM
$RANDOM$RANDOM variable to get the internal seed and predict future values, after only 2-3 samplesLast updated

