X-CTF(REVERSE入门) open-source

之前文章讲过的技巧和知识,就不再详细描述了,如果有不明白的地方建议按照做题题目顺序查看。

添加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



原文地址:https://www.cnblogs.com/blackicelisa/p/12263556.html