XDCTF2015 WRITEUP(我才不会说我就做出来一题)
0x1 给大黑阔们跪了
本来准备出去玩的,结果到家后发现要过两天才有人回来,就趁机做了把XDCTF的线上,结果被虐的北都找不到了,看着6星和Sigma一路突突突,只能膜了。。有思路的一共三题,结果最后只做出来1题。。。另外两题做到一大半怎么也进行不下去了。 总体来说虽然没做出来多少,但是感觉XDCTF水平是很高的了,题目也都很虐人(Pia!<(=o ‵-′)ノ☆ 这里写个备忘,毕竟是一次经历。
0x2 没写出来但有思路的的
Reverse 01
一个linux 的elf x64程序,还是挺有意思的,可惜没做出来,逆向功力不够,大概思路:
- 入口函数是函数0x4008e1,里面会有ptrace反调试,然后获取输入
- 这里的输入从分析看应该是要解密后面说到的加密方法的
- 后面的坑就来了,如果顺着0x4008e1走,最后会打印出来"Congratulations? Key is XDCTF{Input}",一看就不对
- 继续看,发现有个函数在0x400787,最后也会打印出来一个flag,而且会吧上面的string的“?”换成“!”,所以这个函数才是真正会吐出flag的过程
- 解体思路应该是修改执行流到这里,但是问题有三个:
- 逆向出加密算法
- 给出能通过的输入
- 在什么时刻强制从0x4008e1跳到0x400787
- 因为没搞定上面三个问题,所以没写出来
最后说下里面加密会用到字符串ZzAwZF9DcjRrM3JfZzBfb24=,不过加密算法,我就真不想看了。
Misc 01
这题后来给了tips,也就是org原图。
- 先用stegsolv打开zzzzzzyu.png,跳几个plane后可以看到顶部有个条,原图org.png是没的
- 用stegsolve两张combine一下,然后sub后发现顶部会出现两像素宽的条状区,里面零星分布一些黑色像素点
- 导出成bmp,去色成黑白
- 用python 的PIL库把顶部两行的按照像素输出,白色是0,黑色是1,可以得到如下字符串:
11111111111111111111111111111110111111111111111111101011111111111111110111111111111111111011111111111111111111111110111111111111111101011111111111111111111111111111110111111110101110111111111111111111111111111011101110111111111111111111111111110111111111111111111111011111110111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111110101111111011111010111111011111111111111111111111111111111111111111110111111111111111111010111111101111101011111101111111111111111111111111111111101110111111111111111
但是接下来用jpk处理的时候,4bit格式format,然后处理完实在找不到什么特征了。。作罢。。。(o«(≧口≦)»o
0x3 解出来的
嘛,怎么着还是做出来一题的,至少不是鸭蛋,咩哈哈哈哈<(= ̄_ ̄)σ…<( _ _)ノ|
给了一个数据文件,file一下识别不了格式,strings也没啥有用信息,bless看的时候发现开头几个字符是VIMG….fat12….VMWare Visual什么的,搜了下,唯独fat12有点信息,但是挂载的话还是会失败。
换用binwalk,可以看到里面有很多东西,但是有两个zip文件,而且最后那个里面有flag.txt,于是把两个都dd出来 不过要说的是dd中间那个的时候,如何能精确的dd出来还是听麻烦的,试了好久,dd出来了一个没有多余附加尾部的zip,如果有更好的方法还希望有人留言说下哈
dd出来后有flag的那个,姑且命名为flag.zip有密码,试着去掉密码位后一样不行,说明不是伪加密,再看没加密的那个,姑且命名为x.zip,发现两个都有个readme.txt
用unzip -v查看了下两个的内容,结果两个readme.txt相同诶,于是想到明文破解,把x.zip里除readme.txt外的文件全部删掉,然后用pkcrack大法,大概用法是
pkcrack -c “readme.txt” -p raedme.txt -C flag.zip -P x.zip -d ok.zip
- -c是指出加密zip里readme.txt的文件结构,从顶层文件夹开始
|
|
这里flag.zip文件结构如图
- -p是明文的readme.txt所在位置,防止麻烦都放一块,当前目录下
- -C是待破解加密包flag.zip
- -P是包含明文readme.txt的无密码zip包x.zip
- -d指明破解成功后的明文包输出为ok.zip
然后后开跑,大概10分钟搞定,得到无密码包,拿到flag
如图: