题目
|
|
分析
程序的功能,就是我们输入的十个字符进行xor处理后保存在pw_buf2中,与pw_buf进行比较,若相同则得到flag。
问题出在下面这段代码中:
由于<
的优先级比=
高,所以在open()执行完后,不论是否打开成功,其返回值都大于或者等于零。所以在与0比较后,fd的值为false,在c语言中,即为0。
所以当程序执行到:
实际上执行的是:
而在unix中,0表示为标准输入流,read(0,pw_buf,PW_LEN)
即为从标准输入流中读取字符并保存到pw_buf中。
所以实际上,两个数组的内容都是我们输入的。
exp
第一次输入时输入十个字符,比如十个1:
第二次输入时输入第一次输入十个字符经过异或后的结果:
flag: