当前位置: 代码迷 >> 综合 >> pwnable.kr random
  详细解决方案

pwnable.kr random

热度:91   发布时间:2023-12-17 11:12:24.0

题目如下:
在这里插入图片描述
我们照常连接过去看目录下有什么文件
在这里插入图片描述
运行,随便输入一下,错了
在这里插入图片描述
cat看一下源码
在这里插入图片描述
大概逻辑就是输入一个int类型的key然后这个key与rand()函数返回值亦或的值等于0xdeadbeef则获得flag
我们来查看一下rand()函数的作用

在这里插入图片描述
在这里插入图片描述
计算机中的rand()函数是伪随机,在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关(window下的RAND_MAX为:0x7fff=2^15-1
linxu下的RAND_MAX为:2^31-),然后rand()默认等于rand(1),因为种子相同,所以每次调用它时的第一个值都是相同。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{unsigned int random1;random1 = rand();printf("No srand():\n");printf("random1 = %u\n", random1);unsigned int random2;srand(1);random2 = rand();printf("srand(1):\n");printf("random2 = %u\n", random2);unsigned int random3;srand(2);random3 = rand();printf("srand(2):\n");printf("random3 = %u\n", random3);return 0;
}

我们可以自己写个程序编译一下
或者gdb -q random
查看main汇编
在这里插入图片描述
下断点在cmp处
在这里插入图片描述
$rbp-4就是 rand()返回值
计算就是0x6b8b4567^0xdeadbeef=0x?B526FB88? 转换十进制就是3039230856,因为我们sanf输入的%d
在这里插入图片描述
成功获得flag。

  相关解决方案