pwnable.kr [Toddler's Bottle] - random

Daddy, teach me how to use random value in programming!

ssh [email protected] -p2222 (pw:guest)

c语言中取随机数函数rand()为伪随机,需要依赖srand()提供的随机数种子seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。没有置随机数种子直接调用rand(),得到的结果也是一样。
题目源码如下:

/* ssh [email protected] -p2222 (pw:guest) */
#include 

int main(){
    unsigned int random;
    random = rand();    // random value!

    unsigned int key=0;
    scanf("%d", &key);

    if( (key ^ random) == 0xdeadbeef ){
        printf("Good!\n");
        system("/bin/cat flag");
        return 0;
    }

    printf("Wrong, maybe you should try 2^32 cases.\n");
    return 0;
}

使用gdb调试查看random的值,或者本体直接跑rand()得到固定的一个random的值。(这里需要严格在Linux中取指,不同的操作系统会影响这个定值的结果。)
笔者在这里使用本地调试取这个random的值:(这里注意数据定义为unsigned int 或long,因为结果3039230856>2^31,超出了int的上限)

#include 

int main()
{
    unsigned int random;
    random = rand();
    unsigned int temp = 0xdeadbeef ^ random;
    printf("%u\n", random);
    printf("%u\n", temp);
    return 0;
}

结果如下:

./random
1804289383
3039230856

正确输入后即可得到flag。

你可能感兴趣的:(pwnable.kr [Toddler's Bottle] - random)