如何预测Math.random结果?

时间:2016-10-07 16:39:26

标签: javascript

我如何预测轮盘游戏网站csgopolygon.com的结果,因为它正在调用Math.randomMath.floor

4 个答案:

答案 0 :(得分:6)

你的问题目前得分为负,这是一种耻辱。我认为这是一个非常好的问题。追求它,你将在这个过程中学到很多东西。

理论上,你可以预测Math.random的结果是正确的。这就是为什么,如果您想要构建游戏/赌博应用程序,您应该确保使用cryptographically secure pseudo-random number generator。如果他们正在使用这样的话,那就算了吧。

如果你是正确的并且他们使用System.time作为Java附带的标准Random生成器的种子,那么可能有一种方法。它将涉及根据与(未来)时间戳相对应的种子,在每个序列中生成数百万个数字序列,然后观察网站生成的实际随机数,并尝试在预先生成的数百万中查找特定序列。如果你有匹配,你找到了种子。如果你有种子并知道它们在序列中的位置,那么理论上可以预测下一个数字。

这种方法存在问题:

  1. 您需要知道他们使用的确切算法,因此您可以确保使用相同的
  2. 生成所有序列需要大量的处理能力
  3. 存储大量存储空间
  4. 在存储的序列中搜索观察到的序列需要大量的处理能力
  5. 你没有完整的图片。即使您在该种子的序列中找到了正确的种子和位置,您仍然需要预测将获得的下一个数字,但由于它是一个多人游戏网站(我假设),他们可能会给出号码给另一名球员。
  6. 在其他答案中,据说预测Math.random的结果是不可能的。这是不正确的。一旦你知道了种子和迭代(自种子设置以来生成了多少个数字),Math.random实际上是非常可预测的。我实际上曾经构建了一个生成随机级别的游戏。我弄乱了种子,发现如果我总是设置相同的种子,我总会得到相同的水平。这很酷,因为我的游戏有无限级别,但是27级(例如)总是看起来完全一样。

    修改

    好的,我应该事先检查过网站......:)

    1. 他们没有使用Java。查看顶部的'Provably Fair'链接。他们讨论了如何通过执行PHP代码自己验证过去的卷。
    2. 这些家伙很聪明。一旦他们解雇,他们就会发布旧种子。这允许您(使用伪随机数生成器的可预测行为)重新生成所有卷并验证它们从未篡改过它们。
    3. 基本上你想要的是找到当前正在使用的种子...但是我上面提到的第5点仍然存在:你没有完整的图片所以你怎么预测你

答案 1 :(得分:2)

你不可能,并且你可能不应该像16岁那样患上赌博成瘾。也就是说,即使你可以,该网站也不是使用javascript来生成数字,而是使用PHP或ASP等服务器端语言。

答案 2 :(得分:0)

也许这就是:https://jonasnick.github.io/blog/2015/07/08/exploiting-csgojackpots-weak-rng/

我怀疑csgopolygon使用math.random但是随时可以查看它。

答案 3 :(得分:-1)

基本上不可能预测Math.random()的结果。如果我们一直追溯到这个函数的根,我们将发现自己在C和二进制文件中。因此,除非你手上有永恒,否则我不会专注于此事。