open source-wp
打开附件得到一段源码:
分析方框1中的内容可得,输出的hash即为正确的flag。而hash的值与first,second的值和argv[3]的长度有关。因此我们需要求出first,second和argv[3]。
首先根据方框2中的内容求first的值:
如果(first 不等于 0xcafe),会得到( “你错了,对不起。”)。
说明 first要等于0xcafe 。0xcafe是十六进制的数,用计算器将它转化成十进制数:
则得出 first = 51966 。
接着根据方框3中的内容求second的值:
当second满足(second % 5 == 3 ll second % 17 != 8)条件时,则输出 (“ha,you won’t get it!\n”),意为“你将不能得到它!”。也就是说要想得到正确的second,second必须满足second % 5 != 3和second % 17 == 8这两个条件。
容易得出同时满足这两个条件的最小的数是25,因此 second=25 。
然后根据方框4中的内容求argv[3]的长度:
如果"h4ckyou",和argv[3]相等则得到 (“so close,dude! \n”),意为“如此接近真相了,伙计。” 因此可得出 argv[3]=“h4ckyou”。
则 strlen(argv[3])=7 。
最后得出hash的值:
将first,second和argv[3]代入
unsigned int hash = first* 31337 +(second % 17) * 11 + strlen(argv[3]) - 1615810207
中得
unsigned int hash = 51966* 31337 +(25 % 17) * 11 + 7 - 1615810207
将数据用计算器中计算得到 hash=c0ffee 。
注意:源码中输出的hash为%x型,%x表示以十六进制数形式输出的整数,%x中x为小写字母,因此hash中的字母取小写。
也可以在利用python计算一下:
则得到 flag = c0ffee 。