随机数生成原理
rand()
C 库函数 int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。
RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。
srand()
C 库函数 void srand(unsigned int seed) 播种由函数 rand 使用的随机数发生器。
void srand(unsigned int seed)
参数seed是一个整形值,用于伪随机数生成算法播种。
伪随机数绕过方法
修改seed
有时随机数的种子seed会在栈上,可以通过栈溢出等方法对齐进行覆盖为已知值,再通过这个已知值获取对应的随机数序列
利用ctypes撞库
ctypes是Python内建的用于调用动态链接库函数的功能模块,通过调用该模块以及利用与题目相同的libc文件,来达到一个与题目中随机数生成方式相同的效果,实现撞库,这种方式下如果提前覆盖了指定种子,是更容易达成,如果直接设置时间种子撞库,可能存在时间对不上的情况,需要多测试几次。
使用方法:
1 | from ctype import * |
1 | #使用相同时间为种子 |