其他分享
首页 > 其他分享> > 【攻防世界】REVERSE新手练习区 - open source

【攻防世界】REVERSE新手练习区 - open source

作者:互联网

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 。

标签:hash,REVERSE,17,argv,方框,source,second,open,first
来源: https://blog.csdn.net/m0_60377292/article/details/119042533