bugku第七个题目love

首先把文件下载下来,是一个可执行文件,但是点击却无法运行:

 重装之后也还是一样,一开始以为题目就是这样的,但是一直也没找到办法解决,后来看网上的解答发现他们的程序是可以运行的,有点懵,但是拖到 ida 和 od 里面还是可以看代码的,所以就将就着做了。

首先将程序拖入 ida :

 找到主函数然后进入:

 看到有"please enter the flag"的字样,看到这个应该很敏感,于是继续往下看,发现关键代码段:

 到这里就已经离答案很近了,我们看到 "wrong flag" "rigth flag",可以猜测,这里应该就是判断 flag 是否正确的地方,我们可以看到上面还有一串字符串,这里要注意可能和flag有关,我们再往下看:

下面出现了base64字样,猜测 flag 可能和base64有关 ,在往下就看不到什么有价值的东西了,然后我们回到上面使用 f5 大法:

 一开始看了好久的代码,还是看不懂算法,只知道最后一个循环是将一个字符串从第一个字符开始不断地从0开始加然后得到另一个字符串,而从上面输入flag到这个循环之间的代码一直都不知道它到底是在干嘛,但是我们可以从最后那个 if 语句获取一些重要的信息,那个Dest里面的字符串就是经过上面一系列的算法后得到的,而那个Str2是我们之前看到的可能和flag 有关的字符串,最后那个 v2 是 Dest字符串的长度,而这个strncmp函数是c语言里面的一个函数,它作用就是比较里面两个字符串,如果前面那个等于后面那个,就返回0,而这里的函数写到如果非strncmp.......就输出flag正确,说明这个就是比较我们输入的flag是否正确的语句,而Str2是程序中原本的字符串,我们输入的flag经过一系列计算之后就变成那个Dest,所以我们现在只需要解出算法,然后把那个程序中的字符串反着算,就能出来字符串了。

但是..... 最后我还是没能把算法解出来,然后到网上看了一下,原来上面那一段代码是base64加密,吐血。所以整个算法就是先将flag 进行base64加密,然后再进行下面那个循环算法就得出了最后的字符,然后再和程序中的字符进行比较。所以我们将程序中那个字符串反过来算,先写个脚本:

然后将结果字符串进行base64解密:

flag出来了。

总结:基础要打好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值