Chybeta

BugsBunnyCTF2017-Reverse-writeup

单刷好幸苦。

only guess

用IDA打开

dict数组保存了各种字符串:

基本逻辑就是读入的pass和数组dict比较,同时&dest和数组dict的值比较,若一样则为good password。所以实际上&dest就是我们要输入的值。

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int main()
{
char dest;
long long src = 0x736564656372656d;
memcpy(&dest, &src, 9uLL);
printf("%s",&dest);
return 0;
}

但是我测试时只输出了mercede?(,所以这不是最后的password,需要修正。想了一个曲线救国的方法。用命令strings re50 > tmp把数组dict中的内容输出到tmp文件中,在tmp文件中查找开头为mercede的值。最终确定password为:

1
mercedes

最终的flag:

1
Bugs_Bunny{mercedes}

rev100

拖进IDA查看。

main函数中,将A,B两处的字符串拷贝后进行异或并存储到C中。用下面的脚本得到flag:

1
2
3
4
5
6
7
8
9
str1 = [0x61,0x41,0x40,0x37,0x6d,0x77,0x34,0x2c,0x5f,0x41,0x42,0x60,0x7,0x34,0x7d,0x12,0x57,0x7a,0x22,0x25,0x4f,0x28]
str2 = [0x23,0x34,0x27,0x44,0x32,0x35,0x41,0x42,0x31,0x38,0x39,0x38,0x37,0x46,0x22,0x23,0x24,0x25,0x44,0x50,0x21,0x55]
str3 = ""
for i in range(len(str2)):
str3 += chr(str1[i] ^ str2[i])
print str3

得到flag:

1
Bugs_Bunny{X0r_1s_fun}

微信扫码加入知识星球【漏洞百出】
chybeta WeChat Pay

点击图片放大,扫码知识星球【漏洞百出】

本文标题:BugsBunnyCTF2017-Reverse-writeup

文章作者:chybeta

发布时间:2017年07月30日 - 19:07

最后更新:2017年08月01日 - 15:08

原始链接:http://chybeta.github.io/2017/07/30/BugsBunnyCTF2017-Reverse-writeup/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。