之前文章讲过的技巧和知识,就不再详细描述了,如果有不明白的地方建议按照做题题目顺序查看。
添加stdlib.h头文件,运行程序输入三个参数,输入参数数量不等于3输出what?退出程序
满足三个要求的参数最后经过运算得到hash,hash边是我们要找的flag

图1
第一个和第三个参数已经给我们了分别是,“0xcafe”、“h4cky0u”
输入参数时不可以输入十六进制,所以第一个参数我们转化为十进制为51966
第二个参数根据语义可以知道如果second % 5 == 3 || second % 17 != 8,那么得到错误提示
a& b a| b a and b a or b
如果a,b是数值变量, 则&, |表示位运算, and,or则依据是否非0来决定输出
所以我们取相反的情况得到可能的second,盲猜这数不会很大

图2
第二个参数假如为25,运行程序得到flag

图3
如果第二个参数为42呢,如果数字再大点比如满足条件的484,同样得到了flag

图4
这就是为什么,原来在图1中hash运算的第二个参数是(second % 17) * 11,而我们所有符合条件的数字经过(second % 17)运算后的结果都是8