【问题标题】:How to bypass / Hack urandom value?如何绕过/破解 urandom 值?
【发布时间】:2017-11-22 10:57:50
【问题描述】:

我有这个 C 代码,我想知道是否可以绕过这个检查?

int fd, password, input;
fd = open("/dev/urandom", 0);
read(fd, &password, 4);
scanf("%d", &input);

if (password == input)
{
    printf("OK\n")
}

或者是否可以预测 urandom 值?

【问题讨论】:

  • 您应该在 open() 的第二个参数中使用 O_RDONLY 而不是硬编码的 0。
  • 如果sizeof(int) != 4 会发生什么?

标签: c random


【解决方案1】:

没有。在正常运行的系统上,无法预测 /dev/urandom 产生的值。

话虽如此,这里可能会出错:

  • /dev/urandom 可能创建不正确,实际上是指例如/dev/zero/dev/null

  • 您显示的代码中没有错误处理;打开或读取失败将不会被检测到,而密码的值保持不变。

【讨论】:

  • 此外,32 位足够小,可以通过简单地反复猜测相同的值直到结果正确来破解。
猜你喜欢
  • 2014-11-21
  • 2011-05-30
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2014-07-08
  • 1970-01-01
相关资源
最近更新 更多